diff --git a/.fossa.yml b/.fossa.yml index 005b660973c55b1ecb92b77bff52c5159978f3db..53918d38674d68c2e504a7a0c450d08ffe14d0d0 100644 --- a/.fossa.yml +++ b/.fossa.yml @@ -8,27 +8,27 @@ cli: project: Indexer analyze: modules: - - name: indexer-service - type: mvn - target: pom.xml - path: . - - name: indexer-core - type: mvn - target: indexer-core/pom.xml - path: . - - name: indexer-aws - type: mvn - target: provider/indexer-aws/pom.xml - path: . - - name: indexer-azure - type: mvn - target: provider/indexer-azure/pom.xml - path: . - - name: indexer-gcp - type: mvn - target: provider/indexer-gcp/pom.xml - path: . - - name: indexer-ibm - type: mvn - target: provider/indexer-ibm/pom.xml - path: . + - name: indexer-service + type: mvn + target: pom.xml + path: . + - name: indexer-core + type: mvn + target: indexer-core/pom.xml + path: . + - name: indexer-aws + type: mvn + target: provider/indexer-aws/pom.xml + path: . + - name: indexer-azure + type: mvn + target: provider/indexer-azure/pom.xml + path: . + - name: indexer-gcp + type: mvn + target: provider/indexer-gc/pom.xml + path: . + - name: indexer-ibm + type: mvn + target: provider/indexer-ibm/pom.xml + path: . diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index abddb645eb2fe0dd82af8c4feed98c9bc2f8f300..a8ca2bffe630a107f1c5bdefe2a0c27d94752b35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,11 +20,10 @@ variables: IBM_BUILD_SUBDIR: provider/indexer-ibm IBM_INT_TEST_SUBDIR: testing/indexer-test-ibm - + IBM_HELM_CONFIG_PATH: devops/ibm/ibm-indexer-config IBM_HELM_DEPLOY_PATH: devops/ibm/ibm-indexer-deploy - AZURE_SERVICE: indexer AZURE_BUILD_SUBDIR: provider/indexer-azure AZURE_TEST_SUBDIR: testing/indexer-test-azure @@ -58,9 +57,9 @@ include: file: "publishing/pages.yml" - project: "osdu/platform/ci-cd-pipelines" - file: "cloud-providers/osdu-gcp-global.yml" + file: "cloud-providers/gc-global.yml" - - local: "devops/gcp/pipeline/override-stages.yml" + - local: "devops/gc/pipeline/override-stages.yml" aws-test-java: tags: ["aws-internal-test"] diff --git a/NOTICE b/NOTICE index 19601efd3534dac53f8ee597d465708369b38d5c..6c3f19975b3ee7d491dca1595044cd3ca7d4314f 100644 --- a/NOTICE +++ b/NOTICE @@ -19,7 +19,6 @@ The following software have components provided under the terms of this license: - Apache Geronimo JMS Spec 2.0 (from http://geronimo.apache.org/maven/${siteId}/${version}) - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) - Apache Log4j JUL Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-jul) -- Apache Log4j SLF4J Binding (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl) - Apache Maven Invoker (from https://repo1.maven.org/maven2/org/apache/maven/shared/maven-invoker) - Apache Maven Reporting API (from https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api) - Apache Maven Reporting Implementation (from https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl) @@ -38,7 +37,7 @@ The following software have components provided under the terms of this license: - Maven Monitor (from https://repo1.maven.org/maven2/org/apache/maven/maven-monitor) - Maven Plugin Descriptor Model (from https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor) - Maven Plugin Parameter Documenter API (from https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter) -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -46,8 +45,6 @@ The following software have components provided under the terms of this license: - Proton-J (from https://repo1.maven.org/maven2/org/apache/qpid/proton-j) - QpidJMS Client (from https://repo1.maven.org/maven2/org/apache/qpid/qpid-jms-client) - oro (from https://repo1.maven.org/maven2/oro/oro) -- tomcat-annotations-api (from http://tomcat.apache.org/, https://tomcat.apache.org/) -- tomcat-embed-websocket (from http://tomcat.apache.org/, https://tomcat.apache.org/) ======================================================================== Apache-2.0 @@ -58,7 +55,7 @@ The following software have components provided under the terms of this license: - AMQP 1.0 JMS Spring Boot Starter (from https://repo1.maven.org/maven2/org/amqphub/spring/amqp-10-jms-spring-boot-starter) - ASM Analysis (from http://asm.ow2.io/) - ASM Commons (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-commons) -- ASM Tree (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-tree) +- ASM Tree (from http://asm.ow2.io/) - ASM Util (from http://asm.ow2.io/) - ASM based accessors helper used by json-smart (from https://urielch.github.io/) - AWS Java SDK for AWS Amplify (from https://aws.amazon.com/sdkforjava) @@ -218,11 +215,11 @@ The following software have components provided under the terms of this license: - AWS Java SDK for Amazon EMR (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon EMR Containers (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon ElastiCache (from https://aws.amazon.com/sdkforjava) -- AWS Java SDK for Amazon Elastic Inference (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elastic Block Store (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elastic Container Registry Public (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elastic Container Service for Kubernetes (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elastic File System (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon Elastic Inference (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elastic Transcoder (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon Elasticsearch Service (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for Amazon EventBridge (from https://aws.amazon.com/sdkforjava) @@ -326,22 +323,21 @@ The following software have components provided under the terms of this license: - Animal Sniffer Annotations (from https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations) - Apache Ant + JUnit (from http://ant.apache.org/, https://ant.apache.org/) - Apache Ant Core -- Apache Ant Launcher (from http://ant.apache.org/, https://ant.apache.org/) +- Apache Ant Launcher (from https://ant.apache.org/) - Apache Commons BeanUtils (from http://commons.apache.org/proper/commons-beanutils/, https://commons.apache.org/proper/commons-beanutils/, https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils) -- Apache Commons CLI (from https://commons.apache.org/proper/commons-cli/, https://repo1.maven.org/maven2/commons-cli/commons-cli) - Apache Commons Codec (from http://commons.apache.org/proper/commons-codec/, https://commons.apache.org/proper/commons-codec/) -- Apache Commons Collections (from http://commons.apache.org/proper/commons-collections/, https://commons.apache.org/proper/commons-collections/) +- Apache Commons Collections (from https://commons.apache.org/proper/commons-collections/) - Apache Commons IO (from http://commons.apache.org/io/, https://commons.apache.org/proper/commons-io/, https://repo1.maven.org/maven2/commons-io/commons-io) -- Apache Commons Lang (from http://commons.apache.org/proper/commons-lang/, https://commons.apache.org/proper/commons-lang/) +- Apache Commons Lang (from https://commons.apache.org/proper/commons-lang/) - Apache Commons Logging (from http://commons.apache.org/logging/, http://commons.apache.org/proper/commons-logging/) - Apache Commons Validator (from http://commons.apache.org/proper/commons-validator/, http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/, https://repo1.maven.org/maven2/commons-validator/commons-validator) - Apache Geronimo JMS Spec 2.0 (from http://geronimo.apache.org/maven/${siteId}/${version}) - Apache Groovy (from http://groovy-lang.org, http://groovy.codehaus.org/, https://groovy-lang.org) - Apache HTTP transport v2 for the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-apache-v2) - Apache HttpAsyncClient (from http://hc.apache.org/httpcomponents-asyncclient) -- Apache HttpClient (from http://hc.apache.org/httpcomponents-client) -- Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client) -- Apache HttpCore (from http://hc.apache.org/httpcomponents-core-ga, http://hc.apache.org/httpcomponents-core-ga/) +- Apache HttpClient (from http://hc.apache.org/httpcomponents-client, http://hc.apache.org/httpcomponents-client-ga) +- Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client, http://hc.apache.org/httpcomponents-client-ga) +- Apache HttpCore (from http://hc.apache.org/httpcomponents-core-ga, http://hc.apache.org/httpcomponents-core-ga/, http://hc.apache.org/httpcomponents-core/) - Apache HttpCore NIO (from http://hc.apache.org/httpcomponents-core-ga, http://hc.apache.org/httpcomponents-core/) - Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) @@ -349,9 +345,9 @@ The following software have components provided under the terms of this license: - Apache Log4j SLF4J Binding (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl) - Apache Log4j to SLF4J Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-to-slf4j) - Apache Lucene (module: memory) (from https://lucene.apache.org/) -- Apache Lucene (module: misc) (from https://lucene.apache.org/) -- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/) -- Apache Lucene (module: suggest) (from https://lucene.apache.org/) +- Apache Lucene (module: misc) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Apache Lucene (module: suggest) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) - Apache Maven Invoker (from https://repo1.maven.org/maven2/org/apache/maven/shared/maven-invoker) - Apache Maven Reporting API (from https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api) - Apache Maven Reporting Implementation (from https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl) @@ -363,12 +359,12 @@ The following software have components provided under the terms of this license: - Apache Maven Wagon :: Providers :: SSH External Provider (from https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-external) - Apache Maven Wagon :: Providers :: SSH Provider (from https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh) - Apache Velocity (from http://velocity.apache.org/engine/devel/, http://velocity.apache.org/engine/releases/velocity-1.6.1/, http://velocity.apache.org/engine/releases/velocity-1.6.2/) -- AssertJ fluent assertions (from ${project.parent.url}#${project.artifactId}, https://repo1.maven.org/maven2/org/assertj/assertj-core) +- AssertJ Core (from ${project.organization.url}#${project.artifactId}) - Asynchronous Http Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) - Asynchronous Http Client Netty Utils (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client-netty-utils) - AutoValue Annotations (from https://github.com/google/auto/tree/master/value, https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations) - BSON (from http://bsonspec.org, https://bsonspec.org) -- BSON Record Codec (from https://www.mongodb.com/) +- BSON Record Codec (from <https://www.mongodb.com/>, https://www.mongodb.com/) - Bean Validation API (from http://beanvalidation.org) - Brave (from https://repo1.maven.org/maven2/io/zipkin/brave/brave) - Brave Instrumentation: Http Adapters (from https://repo1.maven.org/maven2/io/zipkin/brave/brave-instrumentation-http) @@ -376,13 +372,8 @@ The following software have components provided under the terms of this license: - Byte Buddy (without dependencies) (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy) - Byte Buddy Java agent (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-agent) - ClassMate (from http://github.com/cowtowncoder/java-classmate) -- Cloud Key Management Service (KMS) API v1-rev20220407-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) -- Cloud Key Management Service (KMS) API v1-rev20220617-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) -- Cloud Key Management Service (KMS) API v1-rev20220701-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) -- Cloud Storage JSON API v1-rev20220604-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) -- Cloud Storage JSON API v1-rev20220608-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) -- Cloud Storage JSON API v1-rev20220705-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) -- Cloud Storage JSON API v1-rev20220705-2.0.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) +- Cloud Key Management Service (KMS) API (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) +- Cloud Storage JSON API (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) - CloudWatch Metrics for AWS Java SDK (from https://aws.amazon.com/sdkforjava) - Cobertura (from http://cobertura.sourceforge.net) - Cobertura Limited Runtime (from http://cobertura.sourceforge.net) @@ -392,7 +383,6 @@ The following software have components provided under the terms of this license: - Converter: Jackson (from https://github.com/square/retrofit, https://repo1.maven.org/maven2/com/squareup/retrofit2/converter-jackson) - Core functionality for the Reactor Netty library (from https://github.com/reactor/reactor-netty) - Default Plexus Container (from https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default) -- Digester (from https://repo1.maven.org/maven2/commons-digester/commons-digester) - Doxia :: APT Module (from https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-apt) - Doxia :: Core (from https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core) - Doxia :: FML Module (from https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-fml) @@ -402,16 +392,15 @@ The following software have components provided under the terms of this license: - Doxia Sitetools :: Decoration Model (from http://maven.apache.org/doxia/doxia-sitetools/doxia-decoration-model/, https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model) - Doxia Sitetools :: Site Renderer (from http://maven.apache.org/doxia/doxia-sitetools/doxia-site-renderer/, https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer) - Elastic JNA Distribution (from https://github.com/java-native-access/jna) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - FindBugs-jsr305 (from http://findbugs.sourceforge.net/) - GSON extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-gson) - Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) - Google App Engine extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-appengine) -- Google Cloud Core (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core, https://github.com/googleapis/java-core) -- Google Cloud Core HTTP (from https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-core-http, https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core-http, https://github.com/googleapis/java-core) -- Google Cloud Core gRPC (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core-grpc, https://github.com/googleapis/java-core) +- Google Cloud Core (from https://github.com/googleapis/google-cloud-java, https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core, https://github.com/googleapis/java-core) +- Google Cloud Core HTTP (from https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-core-http, https://github.com/googleapis/google-cloud-java, https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core-http, https://github.com/googleapis/java-core) +- Google Cloud Core gRPC (from https://github.com/googleapis/google-cloud-java, https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-core-grpc, https://github.com/googleapis/java-core) - Google Cloud Datastore (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-datastore, https://github.com/googleapis/java-datastore) -- Google Cloud IAM Service Account Credentials (from https://github.com/googleapis/java-iamcredentials) +- Google Cloud IAM Service Account Credentials (from https://github.com/googleapis/google-cloud-java, https://github.com/googleapis/java-iamcredentials) - Google Cloud Logging (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-logging, https://github.com/googleapis/java-logging) - Google Cloud Pub/Sub (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-pubsub, https://github.com/googleapis/java-pubsub) - Google Cloud Storage (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-storage, https://github.com/googleapis/java-storage) @@ -431,8 +420,6 @@ The following software have components provided under the terms of this license: - IBM COS Java SDK for COS KMS (from https://github.com/ibm/ibm-cos-sdk-java) - IBM COS SDK For Java (from https://github.com/ibm/ibm-cos-sdk-java) - IBM COS SDK for Java - Core (from https://github.com/ibm/ibm-cos-sdk-java) -- Identity and Access Management (IAM) API v2beta-rev20220421-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) -- Identity and Access Management (IAM) API v2beta-rev20220526-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) - J2ObjC Annotations (from https://github.com/google/j2objc/) - JBoss Logging 3 (from http://www.jboss.org) - JBoss Marshalling API (from https://repo1.maven.org/maven2/org/jboss/marshalling/jboss-marshalling) @@ -443,36 +430,32 @@ The following software have components provided under the terms of this license: - JOpt Simple (from http://jopt-simple.github.io/jopt-simple, http://pholser.github.io/jopt-simple) - JSON Small and Fast Parser (from https://repo1.maven.org/maven2/net/minidev/json-smart, https://urielch.github.io/) - JSON Web Token support for the JVM (from https://github.com/jwtk/jjwt) -- JSON in Java (from https://github.com/douglascrockford/JSON-java) - JSON library from Android SDK (from http://developer.android.com/sdk) - JSON.simple (from http://code.google.com/p/json-simple/) - JSONassert (from http://github.com/skyscreamer/yoga, https://github.com/skyscreamer/JSONassert) - JSR107 API and SPI (from https://github.com/jsr107/jsr107spec) -- Jackson (from http://jackson.codehaus.org) - Jackson 2 extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2) - Jackson dataformat: CBOR (from http://github.com/FasterXML/jackson-dataformats-binary) - Jackson dataformat: Smile (from http://github.com/FasterXML/jackson-dataformat-smile, http://github.com/FasterXML/jackson-dataformats-binary) - Jackson datatype: JSR310 (from http://wiki.fasterxml.com/JacksonModuleJSR310, https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310) - Jackson datatype: Joda (from http://wiki.fasterxml.com/JacksonModuleJoda, https://github.com/FasterXML/jackson-datatype-joda) - Jackson datatype: jdk8 (from https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8) -- Jackson extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson) - Jackson module: Afterburner (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-modules-base) - Jackson module: JAXB Annotations (from http://github.com/FasterXML/jackson-module-jaxb-annotations, http://wiki.fasterxml.com/JacksonJAXBAnnotations, https://github.com/FasterXML/jackson-modules-base) - Jackson-annotations (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson) - Jackson-core (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-core) - Jackson-dataformat-XML (from http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding, https://github.com/FasterXML/jackson-dataformat-xml) -- Jackson-dataformat-YAML (from http://wiki.fasterxml.com/JacksonExtensionYAML, https://github.com/FasterXML/jackson, https://github.com/FasterXML/jackson-dataformats-text) +- Jackson-dataformat-YAML (from https://github.com/FasterXML/jackson, https://github.com/FasterXML/jackson-dataformats-text) - Jackson-module-parameter-names (from https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-parameter-names) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) -- Jakarta Servlet (from https://javaee.github.io/servlet-spec/, https://projects.eclipse.org/projects/ee4j.servlet) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) - Java Libraries for Amazon Simple WorkFlow (from https://github.com/aws/aws-swf-flow-library) -- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna, https://repo1.maven.org/maven2/net/java/dev/jna/jna) +- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna) - Java Native Access Platform (from https://github.com/java-native-access/jna) - Java UUID Generator (from http://wiki.fasterxml.com/JugHome) -- JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) +- JavaBeans Activation Framework (from <http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp>, http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp, https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - Javassist (from http://www.javassist.org/) - JetBrains Java Annotations (from https://github.com/JetBrains/java-annotations) - Jetty :: Utilities (from http://jetty.mortbay.org, http://www.eclipse.org/jetty, https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util, https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util) @@ -486,11 +469,10 @@ The following software have components provided under the terms of this license: - KeePassJava2 :: Simple (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-simple) - Kotlin Stdlib (from https://kotlinlang.org/, https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib) - Kotlin Stdlib Common (from https://kotlinlang.org/) -- Kotlin Stdlib Jdk7 (from https://kotlinlang.org/) -- Kotlin Stdlib Jdk8 (from https://kotlinlang.org/) -- Lang (from https://repo1.maven.org/maven2/commons-lang/commons-lang) +- Kotlin Stdlib Jdk7 (from <https://kotlinlang.org/>, https://kotlinlang.org/) +- Kotlin Stdlib Jdk8 (from <https://kotlinlang.org/>, https://kotlinlang.org/) - LatencyUtils (from http://latencyutils.github.io/LatencyUtils/) -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Lucene Core (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-core) - Lucene Grouping (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) - Lucene Highlighter (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) @@ -500,7 +482,6 @@ The following software have components provided under the terms of this license: - Lucene QueryParsers (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-queryparser) - Lucene Sandbox (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-sandbox) - Lucene Spatial 3D (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) -- MapStruct Core (from http://mapstruct.org/mapstruct/, https://repo1.maven.org/maven2/org/mapstruct/mapstruct) - Maven Artifact (from https://repo1.maven.org/maven2/org/apache/maven/maven-artifact) - Maven Artifact Manager (from https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager) - Maven Core (from https://repo1.maven.org/maven2/org/apache/maven/maven-core) @@ -516,7 +497,7 @@ The following software have components provided under the terms of this license: - Maven Repository Metadata Model (from https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata) - Maven Settings (from https://repo1.maven.org/maven2/org/apache/maven/maven-settings) - Metrics Core (from https://repo1.maven.org/maven2/io/dropwizard/metrics/metrics-core) -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -527,6 +508,7 @@ The following software have components provided under the terms of this license: - Mojo's Maven plugin for Cobertura (from http://mojo.codehaus.org/cobertura-maven-plugin/) - MongoDB Driver (from https://www.mongodb.com/) - MongoDB Java Driver (from http://mongodb.org/, http://www.mongodb.org, https://www.mongodb.com/) +- NanoHttpd-Core (from https://repo1.maven.org/maven2/org/nanohttpd/nanohttpd) - Netty Reactive Streams Implementation (from https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams) - Netty/Buffer (from https://repo1.maven.org/maven2/io/netty/netty-buffer) - Netty/Codec (from https://repo1.maven.org/maven2/io/netty/netty-codec) @@ -551,7 +533,7 @@ The following software have components provided under the terms of this license: - Non-Blocking Reactive Foundation for the JVM (from https://github.com/reactor/reactor, https://github.com/reactor/reactor-core) - OAuth 2.0 SDK with OpenID Connect extensions (from https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) - OAuth2 for Spring Security (from https://repo1.maven.org/maven2/org/springframework/security/oauth/spring-security-oauth2) -- Objenesis (from http://objenesis.org, https://repo1.maven.org/maven2/org/objenesis/objenesis) +- Objenesis (from https://repo1.maven.org/maven2/org/objenesis/objenesis) - OkHttp (from https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp, https://square.github.io/okhttp/) - OkHttp Logging Interceptor (from https://github.com/square/okhttp, https://repo1.maven.org/maven2/com/squareup/okhttp3/logging-interceptor, https://square.github.io/okhttp/) - OkHttp URLConnection (from https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp-urlconnection, https://square.github.io/okhttp/) @@ -563,12 +545,11 @@ The following software have components provided under the terms of this license: - Plexus Velocity Component (from https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity) - PostgreSQL JDBC Driver - PowerMock (from http://www.powermock.org, https://repo1.maven.org/maven2/org/powermock/powermock-api-mockito) -- Prometheus Java Simpleclient (from https://repo1.maven.org/maven2/io/prometheus/simpleclient) -- Prometheus Java Simpleclient Common (from https://repo1.maven.org/maven2/io/prometheus/simpleclient_common) -- Prometheus Java Span Context Supplier - Common (from https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_common) -- Prometheus Java Span Context Supplier - OpenTelemetry (from https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel) -- Prometheus Java Span Context Supplier - OpenTelemetry Agent (from https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel_agent) -- Protocol Buffer Java API (from http://code.google.com/p/protobuf, https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java) +- Prometheus Java Simpleclient (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient>, https://repo1.maven.org/maven2/io/prometheus/simpleclient) +- Prometheus Java Simpleclient Common (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient_common>, https://repo1.maven.org/maven2/io/prometheus/simpleclient_common) +- Prometheus Java Span Context Supplier - Common (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_common>, https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_common) +- Prometheus Java Span Context Supplier - OpenTelemetry (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel>, https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel) +- Prometheus Java Span Context Supplier - OpenTelemetry Agent (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel_agent>, https://repo1.maven.org/maven2/io/prometheus/simpleclient_tracer_otel_agent) - Protocol Buffer extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-protobuf) - Proton-J (from https://repo1.maven.org/maven2/org/apache/qpid/proton-j) - QpidJMS Client (from https://repo1.maven.org/maven2/org/apache/qpid/qpid-jms-client) @@ -581,18 +562,15 @@ The following software have components provided under the terms of this license: - Simple XML (safe) (from https://github.com/dweiss/simplexml) - SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org, https://bitbucket.org/snakeyaml/snakeyaml) - Spatial4J (from https://projects.eclipse.org/projects/locationtech.spatial4j) -- Spring AMQP Core (from https://github.com/spring-projects/spring-amqp, https://projects.spring.io/spring-amqp) - Spring AOP (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-aop) - Spring Beans (from http://www.springframework.org, https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-beans) - Spring Boot (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot, https://spring.io/projects/spring-boot) -- Spring Boot AMPQ Starter (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-amqp, https://spring.io/projects/spring-boot) - Spring Boot AOP Starter (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot Actuator (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot Actuator AutoConfigure (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-actuator-autoconfigure, https://spring.io/projects/spring-boot) - Spring Boot Actuator Starter (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot AutoConfigure (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-autoconfigure, https://spring.io/projects/spring-boot) - Spring Boot Configuration Processor (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-tools/spring-boot-configuration-processor, https://spring.io/projects/spring-boot) -- Spring Boot Data MongoDB Starter (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot Dependencies (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot JDBC Starter (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot Jersey Starter (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-jersey, https://spring.io/projects/spring-boot) @@ -612,16 +590,14 @@ The following software have components provided under the terms of this license: - Spring Commons Logging Bridge (from https://github.com/spring-projects/spring-framework) - Spring Context (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-context) - Spring Core (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-core) -- Spring Data Core (from https://repo1.maven.org/maven2/org/springframework/data/spring-data-commons) +- Spring Data Core (from https://spring.io/projects/spring-data) - Spring Data MongoDB - Core (from https://repo1.maven.org/maven2/org/springframework/data/spring-data-mongodb) - Spring Expression Language (SpEL) (from https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-expression) - Spring JDBC (from https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-jdbc) - Spring JMS (from http://www.springframework.org, https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-jms) - Spring Messaging (from https://github.com/spring-projects/spring-framework) - Spring Plugin - Metadata Extension (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-metadata) -- Spring Plugin Core (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-core) -- Spring RabbitMQ Support (from https://github.com/spring-projects/spring-amqp, https://projects.spring.io/spring-amqp) -- Spring Retry (from https://www.springsource.org) +- Spring Plugin Core (from https://github.com/spring-projects/spring-plugin/spring-plugin-core, https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-core) - Spring Security - Core (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-core, https://spring.io/projects/spring-security, https://spring.io/spring-security) - Spring Security - Namespace Configuration Module (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-config, https://spring.io/projects/spring-security, https://spring.io/spring-security) - Spring Security - Web Application Security Module (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-web, https://spring.io/projects/spring-security, https://spring.io/spring-security) @@ -631,7 +607,7 @@ The following software have components provided under the terms of this license: - Spring Web (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-web) - Spring Web MVC (from https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-webmvc) - Spring WebFlux (from https://github.com/spring-projects/spring-framework) -- Swagger UI (from http://webjars.org) +- Swagger UI (from <http://webjars.org>, http://webjars.org) - Vavr (from http://vavr.io, https://www.vavr.io) - Vavr Match (from http://vavr.io) - Woodstox (from https://github.com/FasterXML/woodstox) @@ -640,17 +616,17 @@ The following software have components provided under the terms of this license: - Zipkin Reporter: Core (from https://repo1.maven.org/maven2/io/zipkin/reporter2/zipkin-reporter) - Zipkin v2 (from https://repo1.maven.org/maven2/io/zipkin/zipkin2/zipkin) - aalto-xml (from https://github.com/FasterXML/aalto-xml, https://repo1.maven.org/maven2/com/fasterxml/aalto-xml) -- aggs-matrix-stats (from https://github.com/elastic/elasticsearch) +- aggs-matrix-stats (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) +- compiler (from http://github.com/spullara/mustache.java) - datastore-v1-proto-client (from https://repo1.maven.org/maven2/com/google/cloud/datastore/datastore-v1-proto-client) - documentdb-bulkexecutor (from http://azure.microsoft.com/en-us/services/documentdb/) -- elasticsearch (from https://github.com/elastic/elasticsearch, https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch) -- elasticsearch-cli (from https://github.com/elastic/elasticsearch) -- elasticsearch-core (from https://github.com/elastic/elasticsearch) -- elasticsearch-geo (from https://github.com/elastic/elasticsearch) -- elasticsearch-secure-sm (from https://github.com/elastic/elasticsearch) -- elasticsearch-x-content (from https://github.com/elastic/elasticsearch) +- elasticsearch (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git, https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch) +- elasticsearch-cli (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) +- elasticsearch-core (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) +- elasticsearch-geo (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) +- elasticsearch-secure-sm (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) +- elasticsearch-x-content (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - error-prone annotations (from https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations) -- grpc-google-cloud-pubsub-v1 (from https://github.com/googleapis/googleapis, https://repo1.maven.org/maven2/com/google/api/grpc/grpc-google-cloud-pubsub-v1) - io.grpc:grpc-alts (from https://github.com/grpc/grpc-java) - io.grpc:grpc-api (from https://github.com/grpc/grpc-java) - io.grpc:grpc-auth (from https://github.com/grpc/grpc-java) @@ -668,62 +644,42 @@ The following software have components provided under the terms of this license: - javatuples (from http://www.javatuples.org) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) - javax.inject (from http://code.google.com/p/atinject/, https://repo1.maven.org/maven2/org/glassfish/hk2/external/javax.inject) -- javax.ws.rs-api (from https://github.com/eclipse-ee4j/jaxrs-api) - jersey-core-common (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-common) - jersey-core-server (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-server) - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jose4j (from https://bitbucket.org/b_c/jose4j/) - json-path (from http://code.google.com/p/json-path/, https://github.com/jayway/JsonPath) -- lang-mustache (from https://github.com/elastic/elasticsearch) +- lang-mustache (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - lettuce (from http://github.com/mp911de/lettuce/wiki, https://github.com/lettuce-io/lettuce-core/wiki) -- mapper-extras (from https://github.com/elastic/elasticsearch) +- mapper-extras (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - micrometer-core (from https://github.com/micrometer-metrics/micrometer) - micrometer-registry-azure-monitor (from https://github.com/micrometer-metrics/micrometer) -- micrometer-registry-prometheus (from https://github.com/micrometer-metrics/micrometer) +- micrometer-registry-prometheus (from <https://github.com/micrometer-metrics/micrometer>, https://github.com/micrometer-metrics/micrometer) - minio (from https://github.com/minio/minio-java) - org.apiguardian:apiguardian-api (from https://github.com/apiguardian-team/apiguardian) - org.conscrypt:conscrypt-openjdk-uber (from https://conscrypt.org/) - org.opentest4j:opentest4j (from https://github.com/ota4j-team/opentest4j) - org.xmlunit:xmlunit-core (from http://www.xmlunit.org/, https://www.xmlunit.org/) -- parent-join (from https://github.com/elastic/elasticsearch) +- parent-join (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - perfmark:perfmark-api (from https://github.com/perfmark/perfmark) -- powermock-api-mockito2 (from https://repo1.maven.org/maven2/org/powermock/powermock-api-mockito2) -- powermock-api-support (from https://repo1.maven.org/maven2/org/powermock/powermock-api-support) -- powermock-module-junit4 (from http://www.powermock.org) -- powermock-module-junit4-common (from https://repo1.maven.org/maven2/org/powermock/powermock-module-junit4-common) -- powermock-reflect (from https://repo1.maven.org/maven2/org/powermock/powermock-reflect) - proto-google-cloud-datastore-v1 (from https://github.com/googleapis/googleapis, https://github.com/googleapis/java-datastore/proto-google-cloud-datastore-v1) -- proto-google-cloud-iamcredentials-v1 (from https://github.com/googleapis/java-iamcredentials/proto-google-cloud-iamcredentials-v1, https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-iamcredentials-v1) +- proto-google-cloud-iamcredentials-v1 (from https://github.com/googleapis/google-cloud-java, https://github.com/googleapis/java-iamcredentials/proto-google-cloud-iamcredentials-v1, https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-iamcredentials-v1) - proto-google-cloud-logging-v2 (from https://github.com/googleapis/java-logging/proto-google-cloud-logging-v2, https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-logging-v2) - proto-google-cloud-pubsub-v1 (from https://github.com/googleapis/googleapis, https://github.com/googleapis/java-pubsub/proto-google-cloud-pubsub-v1) -- proto-google-common-protos (from https://github.com/googleapis/api-client-staging, https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-common-protos) -- proto-google-iam-v1 (from https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-iam-v1) -- rank-eval (from https://github.com/elastic/elasticsearch) +- proto-google-common-protos (from https://github.com/googleapis/api-client-staging, https://github.com/googleapis/gapic-generator-java, https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-common-protos) +- proto-google-iam-v1 (from https://github.com/googleapis/gapic-generator-java, https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-iam-v1) +- rank-eval (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - resilience4j (from https://github.com/resilience4j/resilience4j, https://resilience4j.readme.io, ttps://resilience4j.readme.io) -- rest (from https://github.com/elastic/elasticsearch) +- rest (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) - rest-high-level (from https://github.com/elastic/elasticsearch) -- spring-security-crypto (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) - spring-security-oauth2-client (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) - spring-security-oauth2-core (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) - spring-security-oauth2-jose (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) - spring-security-test (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) -- springdoc-openapi-common (from https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-common) -- springdoc-openapi-ui (from https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-ui) -- springdoc-openapi-webmvc-core (from https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-webmvc-core) -- springfox-bean-validators (from https://github.com/springfox/springfox) -- springfox-boot-starter (from https://github.com/springfox/springfox) -- springfox-core (from https://github.com/springfox/springfox) -- springfox-data-rest (from https://github.com/springfox/springfox) -- springfox-oas (from https://github.com/springfox/springfox) -- springfox-schema (from https://github.com/springfox/springfox) -- springfox-spi (from https://github.com/springfox/springfox) -- springfox-spring-web (from https://github.com/springfox/springfox) -- springfox-spring-webflux (from https://github.com/springfox/springfox) -- springfox-spring-webmvc (from https://github.com/springfox/springfox) -- springfox-swagger-common (from https://github.com/springfox/springfox) -- springfox-swagger-ui (from https://github.com/springfox/springfox) -- springfox-swagger2 (from https://github.com/springfox/springfox) +- springdoc-openapi-common (from <https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-common>, https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-common) +- springdoc-openapi-ui (from https://github.com/springdoc/springdoc-openapi, https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-ui) +- springdoc-openapi-webmvc-core (from <https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-webmvc-core>, https://repo1.maven.org/maven2/org/springdoc/springdoc-openapi-webmvc-core) - swagger-annotations (from https://repo1.maven.org/maven2/io/swagger/core/v3/swagger-annotations, https://repo1.maven.org/maven2/io/swagger/swagger-annotations) - swagger-core (from https://repo1.maven.org/maven2/io/swagger/core/v3/swagger-core, https://repo1.maven.org/maven2/io/swagger/swagger-core) - swagger-jaxrs (from https://repo1.maven.org/maven2/io/swagger/swagger-jaxrs) @@ -740,23 +696,20 @@ BSD-2-Clause ======================================================================== The following software have components provided under the terms of this license: -- API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java) -- ASM Analysis (from http://asm.ow2.io/) -- ASM Commons (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-commons) -- ASM Tree (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-tree) -- ASM Util (from http://asm.ow2.io/) -- Apache Commons CLI (from https://commons.apache.org/proper/commons-cli/, https://repo1.maven.org/maven2/commons-cli/commons-cli) +- API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java, https://repo1.maven.org/maven2/com/google/api/api-common) - Apache Lucene (module: memory) (from https://lucene.apache.org/) -- Apache Lucene (module: misc) (from https://lucene.apache.org/) -- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/) -- Apache Lucene (module: suggest) (from https://lucene.apache.org/) -- GAX (Google Api eXtensions) (from https://github.com/googleapis, https://github.com/googleapis/gax-java) +- Apache Lucene (module: misc) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Apache Lucene (module: suggest) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) +- GAX (Google Api eXtensions) for Java (Core) (from https://github.com/googleapis, https://github.com/googleapis/gax-java, https://repo1.maven.org/maven2/com/google/api/gax) +- GAX (Google Api eXtensions) for Java (HTTP JSON) (from <https://repo1.maven.org/maven2/com/google/api/gax-httpjson>, https://repo1.maven.org/maven2/com/google/api/gax-httpjson) +- GAX (Google Api eXtensions) for Java (gRPC) (from <https://repo1.maven.org/maven2/com/google/api/gax-grpc>, https://repo1.maven.org/maven2/com/google/api/gax-grpc) - Hamcrest (from http://hamcrest.org/JavaHamcrest/) - Hamcrest Core (from http://hamcrest.org/, http://hamcrest.org/JavaHamcrest/, https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - JSch (from http://www.jcraft.com/jsch/) - Jodd BeanUtil (from http://jodd.org) - Jodd Core (from http://jodd.org) -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Lucene Grouping (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) - Lucene Highlighter (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) - Lucene Join (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-join) @@ -767,10 +720,8 @@ The following software have components provided under the terms of this license: - Lucene Spatial 3D (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) - Plexus Common Utilities (from http://plexus.codehaus.org/plexus-utils, https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils) - PostgreSQL JDBC Driver -- Reflections (from http://code.google.com/p/reflections/, http://github.com/ronmamo/reflections) - Stax2 API (from http://github.com/FasterXML/stax2-api) -- ThreeTen backport (from https://github.com/ThreeTen/threetenbp, https://www.threeten.org/threetenbp) -- jaxen (from http://jaxen.codehaus.org/, http://www.cafeconleche.org/jaxen, https://repo1.maven.org/maven2/jaxen/jaxen) +- jaxen (from http://jaxen.codehaus.org/, https://repo1.maven.org/maven2/jaxen/jaxen) - jersey-core-server (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-server) ======================================================================== @@ -778,35 +729,36 @@ BSD-3-Clause ======================================================================== The following software have components provided under the terms of this license: -- API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java) +- API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java, https://repo1.maven.org/maven2/com/google/api/api-common) - ASM Analysis (from http://asm.ow2.io/) - ASM Commons (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-commons) - ASM Core (from http://asm.ow2.io/, http://asm.ow2.org/) -- ASM Tree (from http://asm.ow2.io/, https://repo1.maven.org/maven2/org/ow2/asm/asm-tree) +- ASM Tree (from http://asm.ow2.io/) - ASM Util (from http://asm.ow2.io/) -- Apache Commons Codec (from http://commons.apache.org/proper/commons-codec/, https://commons.apache.org/proper/commons-codec/) - Apache Lucene (module: memory) (from https://lucene.apache.org/) -- Apache Lucene (module: misc) (from https://lucene.apache.org/) -- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/) -- Apache Lucene (module: suggest) (from https://lucene.apache.org/) +- Apache Lucene (module: misc) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Apache Lucene (module: suggest) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) - AspectJ Weaver (from http://www.aspectj.org, https://www.eclipse.org/aspectj/) - Class Model for Hk2 (from https://repo1.maven.org/maven2/org/glassfish/hk2/class-model) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) -- GAX (Google Api eXtensions) (from https://github.com/googleapis, https://github.com/googleapis/gax-java) +- GAX (Google Api eXtensions) for Java (Core) (from https://github.com/googleapis, https://github.com/googleapis/gax-java, https://repo1.maven.org/maven2/com/google/api/gax) +- GAX (Google Api eXtensions) for Java (HTTP JSON) (from <https://repo1.maven.org/maven2/com/google/api/gax-httpjson>, https://repo1.maven.org/maven2/com/google/api/gax-httpjson) +- GAX (Google Api eXtensions) for Java (gRPC) (from <https://repo1.maven.org/maven2/com/google/api/gax-grpc>, https://repo1.maven.org/maven2/com/google/api/gax-grpc) - Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) - Google Auth Library for Java - Credentials (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials) - Google Auth Library for Java - OAuth2 HTTP (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http) +- Google OAuth Client Library for Java (from https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client) - HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - HK2 core module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-core) - Hamcrest (from http://hamcrest.org/JavaHamcrest/) - Hamcrest Core (from http://hamcrest.org/, http://hamcrest.org/JavaHamcrest/, https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - JSch (from http://www.jcraft.com/jsch/) - Jackson module: Afterburner (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-modules-base) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Lucene Core (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-core) - Lucene Grouping (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) - Lucene Highlighter (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) @@ -816,32 +768,31 @@ The following software have components provided under the terms of this license: - Lucene QueryParsers (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-queryparser) - Lucene Sandbox (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-sandbox) - Lucene Spatial 3D (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) - Mockito (from http://mockito.org, http://www.mockito.org, https://github.com/mockito/mockito) +- NanoHttpd-Core (from https://repo1.maven.org/maven2/org/nanohttpd/nanohttpd) - Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) - Plexus Common Utilities (from http://plexus.codehaus.org/plexus-utils, https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils) - PostgreSQL JDBC Driver - Protocol Buffer Java API (from http://code.google.com/p/protobuf, https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java) - Protocol Buffers [Util] (from https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util) - Redisson (from http://redisson.org) -- Reflections (from http://code.google.com/p/reflections/, http://github.com/ronmamo/reflections) - ServiceLocator Default Implementation (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-locator) -- SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org, https://bitbucket.org/snakeyaml/snakeyaml) - Spring Core (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-core) - ThreeTen backport (from https://github.com/ThreeTen/threetenbp, https://www.threeten.org/threetenbp) - aopalliance-repackaged (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/aopalliance-repackaged) -- classworlds (from http://classworlds.codehaus.org/, https://repo1.maven.org/maven2/classworlds/classworlds) - jakarta.inject (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/jakarta.inject) -- jaxen (from http://jaxen.codehaus.org/, http://www.cafeconleche.org/jaxen, https://repo1.maven.org/maven2/jaxen/jaxen) +- jaxen (from http://jaxen.codehaus.org/, https://repo1.maven.org/maven2/jaxen/jaxen) - jersey-container-servlet (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet) - jersey-core-client (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client) - jersey-core-common (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-common) - jersey-core-server (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-server) - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) +- jts-core (from https://repo1.maven.org/maven2/org/locationtech/jts/jts-core) - jts-io-common (from https://repo1.maven.org/maven2/org/locationtech/jts/io/jts-io-common) ======================================================================== @@ -849,7 +800,7 @@ Beerware ======================================================================== The following software have components provided under the terms of this license: -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -859,6 +810,7 @@ BouncyCastle ======================================================================== The following software have components provided under the terms of this license: +- Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) - Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) ======================================================================== @@ -874,7 +826,7 @@ CC-BY-4.0 ======================================================================== The following software have components provided under the terms of this license: -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -890,7 +842,7 @@ The following software have components provided under the terms of this license: - LatencyUtils (from http://latencyutils.github.io/LatencyUtils/) - MongoDB Java Driver (from http://mongodb.org/, http://www.mongodb.org, https://www.mongodb.com/) - Netty/Common (from https://repo1.maven.org/maven2/io/netty/netty-common) -- Prometheus Java Simpleclient (from https://repo1.maven.org/maven2/io/prometheus/simpleclient) +- Prometheus Java Simpleclient (from <https://repo1.maven.org/maven2/io/prometheus/simpleclient>, https://repo1.maven.org/maven2/io/prometheus/simpleclient) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - jersey-container-servlet (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet) - jersey-container-servlet-core (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet-core) @@ -900,7 +852,6 @@ The following software have components provided under the terms of this license: - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-ext-entity-filtering (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-entity-filtering) - jersey-inject-hk2 (from https://repo1.maven.org/maven2/org/glassfish/jersey/inject/jersey-hk2) -- jersey-media-jaxb (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-jaxb) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jersey-spring5 (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring5) - reactive-streams (from http://www.reactive-streams.org/) @@ -911,11 +862,9 @@ CDDL-1.0 The following software have components provided under the terms of this license: - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) -- Jakarta Servlet (from https://javaee.github.io/servlet-spec/, https://projects.eclipse.org/projects/ee4j.servlet) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) -- JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) -- JavaBeans(TM) Activation Framework (from http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp) +- JavaBeans Activation Framework (from <http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp>, http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp, https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - Servlet Specification 2.5 API (from http://jetty.mortbay.org, https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) @@ -925,17 +874,12 @@ CDDL-1.1 The following software have components provided under the terms of this license: - HK2 Spring Bridge (from https://repo1.maven.org/maven2/org/glassfish/hk2/spring-bridge) -- HK2 config types (from https://repo1.maven.org/maven2/org/glassfish/hk2/config-types) -- HK2 configuration module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-config) - HK2 module of HK2 itself (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2) - Jakarta Servlet (from https://javaee.github.io/servlet-spec/, https://projects.eclipse.org/projects/ee4j.servlet) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) -- JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) -- JavaBeans(TM) Activation Framework (from http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp) +- JavaBeans Activation Framework (from <http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp>, http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp, https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - JavaMail API (from https://repo1.maven.org/maven2/com/sun/mail/javax.mail) -- OSGi resource locator (from https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator) - Run Level Service (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-runlevel) -- Servlet Specification 2.5 API (from http://jetty.mortbay.org, https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) - tomcat-embed-core (from http://tomcat.apache.org/) @@ -953,35 +897,29 @@ EPL-1.0 The following software have components provided under the terms of this license: - AspectJ Weaver (from http://www.aspectj.org, https://www.eclipse.org/aspectj/) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) -- HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) - JUnit Jupiter API (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Jupiter Engine (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) -- Logback Classic Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) - Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) - Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) - Logback Contrib :: Jackson (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-jackson) - Logback Core Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-core) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) -- OSGi resource locator (from https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator) -- ServiceLocator Default Implementation (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-locator) -- SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org, https://bitbucket.org/snakeyaml/snakeyaml) - aopalliance-repackaged (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/aopalliance-repackaged) -- jakarta.inject (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/jakarta.inject) -- javax.ws.rs-api (from https://github.com/eclipse-ee4j/jaxrs-api) - jersey-core-common (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-common) - jersey-core-server (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-server) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) +- jts-core (from https://repo1.maven.org/maven2/org/locationtech/jts/jts-core) - jts-io-common (from https://repo1.maven.org/maven2/org/locationtech/jts/io/jts-io-common) ======================================================================== @@ -991,7 +929,7 @@ The following software have components provided under the terms of this license: - AspectJ Weaver (from http://www.aspectj.org, https://www.eclipse.org/aspectj/) - Class Model for Hk2 (from https://repo1.maven.org/maven2/org/glassfish/hk2/class-model) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) +- HK2 API module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-api) - HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - HK2 core module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-core) - JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) @@ -1000,7 +938,7 @@ The following software have components provided under the terms of this license: - JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) @@ -1009,7 +947,6 @@ The following software have components provided under the terms of this license: - ServiceLocator Default Implementation (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-locator) - aopalliance-repackaged (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/aopalliance-repackaged) - jakarta.inject (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/jakarta.inject) -- javax.ws.rs-api (from https://github.com/eclipse-ee4j/jaxrs-api) - jersey-container-servlet (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet) - jersey-container-servlet-core (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet-core) - jersey-core-client (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client) @@ -1018,7 +955,6 @@ The following software have components provided under the terms of this license: - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-ext-entity-filtering (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-entity-filtering) - jersey-inject-hk2 (from https://repo1.maven.org/maven2/org/glassfish/jersey/inject/jersey-hk2) -- jersey-media-jaxb (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-jaxb) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jersey-spring5 (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring5) @@ -1036,21 +972,16 @@ The following software have components provided under the terms of this license: - Class Model for Hk2 (from https://repo1.maven.org/maven2/org/glassfish/hk2/class-model) - Cobertura (from http://cobertura.sourceforge.net) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - HK2 core module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-core) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) -- Jakarta Servlet (from https://javaee.github.io/servlet-spec/, https://projects.eclipse.org/projects/ee4j.servlet) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) -- JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) -- Lang (from https://repo1.maven.org/maven2/commons-lang/commons-lang) -- OSGi resource locator (from https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator) +- JavaBeans Activation Framework (from <http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp>, http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp, https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - ServiceLocator Default Implementation (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-locator) - aopalliance-repackaged (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/aopalliance-repackaged) - jakarta.inject (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/jakarta.inject) -- javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) - jersey-container-servlet (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet) - jersey-container-servlet-core (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet-core) - jersey-core-client (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client) @@ -1059,7 +990,6 @@ The following software have components provided under the terms of this license: - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-ext-entity-filtering (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-entity-filtering) - jersey-inject-hk2 (from https://repo1.maven.org/maven2/org/glassfish/jersey/inject/jersey-hk2) -- jersey-media-jaxb (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-jaxb) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jersey-spring5 (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring5) - tomcat-embed-core (from http://tomcat.apache.org/) @@ -1070,7 +1000,6 @@ GPL-2.0-or-later The following software have components provided under the terms of this license: - Cobertura (from http://cobertura.sourceforge.net) -- SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org, https://bitbucket.org/snakeyaml/snakeyaml) ======================================================================== GPL-2.0-with-classpath-exception @@ -1079,24 +1008,20 @@ The following software have components provided under the terms of this license: - Checker Qual (from https://checkerframework.org) - Class Model for Hk2 (from https://repo1.maven.org/maven2/org/glassfish/hk2/class-model) -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - HK2 core module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-core) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) -- Jakarta Servlet (from https://javaee.github.io/servlet-spec/, https://projects.eclipse.org/projects/ee4j.servlet) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) -- JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) +- JavaBeans Activation Framework (from <http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp>, http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp, https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - OSGi resource locator (from https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator) -- RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - ServiceLocator Default Implementation (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-locator) - aopalliance-repackaged (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/aopalliance-repackaged) - jakarta.inject (from https://repo1.maven.org/maven2/org/glassfish/hk2/external/jakarta.inject) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) -- javax.ws.rs-api (from https://github.com/eclipse-ee4j/jaxrs-api) - jersey-container-servlet (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet) - jersey-container-servlet-core (from https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-servlet-core) - jersey-core-client (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client) @@ -1105,7 +1030,6 @@ The following software have components provided under the terms of this license: - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-ext-entity-filtering (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-entity-filtering) - jersey-inject-hk2 (from https://repo1.maven.org/maven2/org/glassfish/jersey/inject/jersey-hk2) -- jersey-media-jaxb (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-jaxb) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jersey-spring5 (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring5) - tomcat-embed-core (from http://tomcat.apache.org/) @@ -1115,12 +1039,8 @@ GPL-3.0-only ======================================================================== The following software have components provided under the terms of this license: -- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) -- OSGi resource locator (from https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator) -- Project Lombok (from http://projectlombok.org, https://projectlombok.org) -- javax.ws.rs-api (from https://github.com/eclipse-ee4j/jaxrs-api) ======================================================================== GPL-3.0-or-later @@ -1135,7 +1055,7 @@ IPA ======================================================================== The following software have components provided under the terms of this license: -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Xerces2-j (from https://repo1.maven.org/maven2/xerces/xercesImpl, https://xerces.apache.org/xerces2-j/) ======================================================================== @@ -1145,7 +1065,6 @@ The following software have components provided under the terms of this license: - Java Native Access Platform (from https://github.com/java-native-access/jna) - Spring Security - Core (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-core, https://spring.io/projects/spring-security, https://spring.io/spring-security) -- spring-security-crypto (from http://spring.io/spring-security, https://spring.io/projects/spring-security, https://spring.io/spring-security) ======================================================================== ImageMagick @@ -1161,13 +1080,6 @@ The following software have components provided under the terms of this license: - ClassGraph (from https://github.com/classgraph/classgraph) -======================================================================== -JSON -======================================================================== -The following software have components provided under the terms of this license: - -- JSON in Java (from https://github.com/douglascrockford/JSON-java) - ======================================================================== LGPL-2.0-only ======================================================================== @@ -1181,15 +1093,14 @@ LGPL-2.1-only The following software have components provided under the terms of this license: - Cobertura (from http://cobertura.sourceforge.net) -- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna, https://repo1.maven.org/maven2/net/java/dev/jna/jna) +- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna) - Java Native Access Platform (from https://github.com/java-native-access/jna) -- Javassist (from http://www.javassist.org/) -- Lang (from https://repo1.maven.org/maven2/commons-lang/commons-lang) - Logback Classic Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) - Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) - Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) - Logback Contrib :: Jackson (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-jackson) - Logback Core Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-core) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -1200,18 +1111,9 @@ LGPL-2.1-or-later The following software have components provided under the terms of this license: - Elastic JNA Distribution (from https://github.com/java-native-access/jna) -- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna, https://repo1.maven.org/maven2/net/java/dev/jna/jna) +- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna) +- Java Native Access Platform (from https://github.com/java-native-access/jna) - Javassist (from http://www.javassist.org/) -- SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org, https://bitbucket.org/snakeyaml/snakeyaml) - -======================================================================== -LGPL-3.0-only -======================================================================== -The following software have components provided under the terms of this license: - -- Logback Classic Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) -- Logback Core Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-core) -- RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) ======================================================================== MIT @@ -1220,15 +1122,15 @@ The following software have components provided under the terms of this license: - AWS Java SDK for AWS Lambda (from https://aws.amazon.com/sdkforjava) - Animal Sniffer Annotations (from https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations) -- Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client) +- Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client, http://hc.apache.org/httpcomponents-client-ga) - Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) - Apache Log4j SLF4J Binding (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl) - Apache Log4j to SLF4J Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-to-slf4j) - Apache Lucene (module: memory) (from https://lucene.apache.org/) -- Apache Lucene (module: misc) (from https://lucene.apache.org/) -- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/) -- Apache Lucene (module: suggest) (from https://lucene.apache.org/) +- Apache Lucene (module: misc) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Apache Lucene (module: suggest) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) - Azure Java Client Authentication Library for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) - Azure Java Client Runtime for ARM (from https://github.com/Azure/autorest-clientruntime-for-java) - Azure Java Client Runtime for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) @@ -1245,7 +1147,7 @@ The following software have components provided under the terms of this license: - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - Java Client Runtime for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) - Java JWT (from http://www.jwt.io, https://github.com/auth0/java-jwt) -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Lucene Core (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-core) - Lucene Grouping (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) - Lucene Highlighter (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) @@ -1255,7 +1157,7 @@ The following software have components provided under the terms of this license: - Lucene QueryParsers (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-queryparser) - Lucene Sandbox (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-sandbox) - Lucene Spatial 3D (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) -- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java Agent (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -1295,7 +1197,6 @@ The following software have components provided under the terms of this license: - jersey-ext-bean-validation (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-bean-validation) - jersey-ext-entity-filtering (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-entity-filtering) - jersey-inject-hk2 (from https://repo1.maven.org/maven2/org/glassfish/jersey/inject/jersey-hk2) -- jersey-media-jaxb (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-jaxb) - jersey-media-json-jackson (from https://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson) - jersey-spring5 (from https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring5) - micrometer-core (from https://github.com/micrometer-metrics/micrometer) @@ -1303,7 +1204,7 @@ The following software have components provided under the terms of this license: - msal4j (from https://github.com/AzureAD/microsoft-authentication-library-for-java) - msal4j-persistence-extension (from https://github.com/AzureAD/microsoft-authentication-extensions-for-java) - qpid-proton-j-extensions (from https://github.com/Azure/qpid-proton-j-extensions) -- webjars-locator-core (from http://webjars.org) +- webjars-locator-core (from <http://webjars.org>, http://webjars.org) ======================================================================== MPL-1.1 @@ -1319,16 +1220,8 @@ MPL-2.0 ======================================================================== The following software have components provided under the terms of this license: -- Javassist (from http://www.javassist.org/) -- OkHttp (from https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp, https://square.github.io/okhttp/) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) -======================================================================== -PHP-3.01 -======================================================================== -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) -- Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - ======================================================================== Plexus ======================================================================== @@ -1351,18 +1244,13 @@ The following software have components provided under the terms of this license: - Apache Ant Core - xml-apis (from https://repo1.maven.org/maven2/xml-apis/xml-apis) -======================================================================== -SPL-1.0 -======================================================================== -- Servlet Specification 2.5 API (from http://jetty.mortbay.org, https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5) - ======================================================================== SunPro ======================================================================== The following software have components provided under the terms of this license: - Lucene Core (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-core) -- elasticsearch-core (from https://github.com/elastic/elasticsearch) +- elasticsearch-core (from https://github.com/elastic/elasticsearch, https://github.com/elastic/elasticsearch.git) ======================================================================== W3C @@ -1370,9 +1258,6 @@ W3C The following software have components provided under the terms of this license: - Apache Ant Core -- JTidy (from http://jtidy.sourceforge.net) -- Xerces2-j (from https://repo1.maven.org/maven2/xerces/xercesImpl, https://xerces.apache.org/xerces2-j/) -- jaxen (from http://jaxen.codehaus.org/, http://www.cafeconleche.org/jaxen, https://repo1.maven.org/maven2/jaxen/jaxen) - xml-apis (from https://repo1.maven.org/maven2/xml-apis/xml-apis) ======================================================================== @@ -1397,10 +1282,10 @@ X11 The following software have components provided under the terms of this license: - Apache Lucene (module: memory) (from https://lucene.apache.org/) -- Apache Lucene (module: misc) (from https://lucene.apache.org/) -- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/) -- Apache Lucene (module: suggest) (from https://lucene.apache.org/) -- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Apache Lucene (module: misc) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Apache Lucene (module: spatial-extras) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Apache Lucene (module: suggest) (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) +- Lucene Common Analyzers (from <https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common>, https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) - Lucene Grouping (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) - Lucene Highlighter (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) - Lucene Join (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-join) @@ -1409,7 +1294,6 @@ The following software have components provided under the terms of this license: - Lucene QueryParsers (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-queryparser) - Lucene Sandbox (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-sandbox) - Lucene Spatial 3D (from https://lucene.apache.org/, https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) -- MongoDB Java Driver (from http://mongodb.org/, http://www.mongodb.org, https://www.mongodb.com/) ======================================================================== cc-pd @@ -1430,42 +1314,21 @@ public-domain ======================================================================== The following software have components provided under the terms of this license: -- Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (from http://www.bouncycastle.org/java.html, https://maven.repository.redhat.com/ga/org/bouncycastle/bcpkix-jdk15on, https://www.bouncycastle.org/java.html) -- Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) -- Guava: Google Core Libraries for Java (from http://code.google.com/p/guava-libraries, https://github.com/google/guava, https://repo1.maven.org/maven2/com/google/guava/guava) - HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) - JBoss Logging 3 (from http://www.jboss.org) -- JTidy (from http://jtidy.sourceforge.net) +- JSON in Java (from https://github.com/douglascrockford/JSON-java) - LatencyUtils (from http://latencyutils.github.io/LatencyUtils/) +- Microsoft Azure client library for Blob Storage (from https://github.com/Azure/azure-sdk-for-java) - PostgreSQL JDBC Driver -- Project Lombok (from http://projectlombok.org, https://projectlombok.org) -- Prometheus Java Simpleclient (from https://repo1.maven.org/maven2/io/prometheus/simpleclient) -- RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - jersey-core-common (from https://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-common) -- reactive-streams (from http://www.reactive-streams.org/) -- xml-apis ======================================================================== unknown ======================================================================== The following software have components provided under the terms of this license: -- Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (from http://www.bouncycastle.org/java.html, https://maven.repository.redhat.com/ga/org/bouncycastle/bcpkix-jdk15on, https://www.bouncycastle.org/java.html) -- Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) -- Byte Buddy (without dependencies) (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy) -- Checker Qual (from https://checkerframework.org) -- JSON in Java (from https://github.com/douglascrockford/JSON-java) -- JTidy (from http://jtidy.sourceforge.net) -- JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) -- JUnit Jupiter API (from http://junit.org/junit5/, https://junit.org/junit5/) -- JUnit Jupiter Engine (from http://junit.org/junit5/, https://junit.org/junit5/) -- JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) -- JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) -- JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) -- Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - System Rules (from http://stefanbirkner.github.com/system-rules/, http://stefanbirkner.github.io/system-rules/) -- jaxen (from http://jaxen.codehaus.org/, http://www.cafeconleche.org/jaxen, https://repo1.maven.org/maven2/jaxen/jaxen) - xml-apis (from https://repo1.maven.org/maven2/xml-apis/xml-apis) ======================================================================== diff --git a/README.md b/README.md index cf670738a775199c38be2b6ecc223b1880948a40..0b2fc26ecb867f1ebb0c569a5f4f4c948b3a7471 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ os-indexer-azure is a [Spring Boot](https://spring.io/projects/spring-boot) serv The [os-indexer-azure README.md](./provider/indexer-azure/README.md) has all the information needed to get started running the `os-indexer` Azure implementation -## GCP Implementation +## Google Cloud Implementation -All documentation for the GCP implementation of `os-indexer` lives [here](./provider/indexer-gcp/README.md) +All documentation for the Google Cloud implementation of `os-indexer` lives [here](./provider/indexer-gc/README.md) ## AWS Implementation -All documentation for the AWS implementation of `os-indexer` lives [here](./provider/indexer-aws/README.md) \ No newline at end of file +All documentation for the AWS implementation of `os-indexer` lives [here](./provider/indexer-aws/README.md) diff --git a/devops/aws/chart/Chart.yaml b/devops/aws/chart/Chart.yaml index 5fbb0d73c247f5b40dd93de2d44f5f67c744a97e..2afc719c5cbe3a2ee8118ac57d60a09b73b51be9 100644 --- a/devops/aws/chart/Chart.yaml +++ b/devops/aws/chart/Chart.yaml @@ -1,12 +1,12 @@ apiVersion: v2 name: "os-indexer" version: __CHART_VERSION__ -kubeVersion: "v1.21.x-x-x" +kubeVersion: ">= 1.21.x-x-x < 1.24.x-x-x" description: Indexer Helm Chart for Kubernetes type: application appVersion: __VERSION__ dependencies: - name: osdu-aws-lib - version: 0.1.0 + version: 0.2.0 repository: __HELM_REPO__/osdu-aws-lib/ deprecated: false diff --git a/devops/aws/chart/templates/tests/test-connection.yaml b/devops/aws/chart/templates/tests/test-connection.yaml deleted file mode 100644 index f341212ea253eced15fd153dd894287341d8db93..0000000000000000000000000000000000000000 --- a/devops/aws/chart/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "common.fullname" . }}-test-connection" - labels: - {{- include "common.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "common.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/devops/aws/chart/values.schema.json b/devops/aws/chart/values.schema.json index c3bc0eb63c7dbdc49322be085c6a65f1be4938b7..d01920940ba1ae3ac7b6078c7321bf8042d24eca 100644 --- a/devops/aws/chart/values.schema.json +++ b/devops/aws/chart/values.schema.json @@ -6,10 +6,8 @@ "image", "imagePullPolicy", "service", - "podAnnotations", "replicaCount", - "serviceAccountRole", - "securityContext" + "serviceAccountRole" ], "properties": { "image": { @@ -262,10 +260,10 @@ "type": "string", "title": "Allowed principal", "examples": [ - "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account", + "cluster.local/ns/istio-system/sa/istio-ingressgateway", "cluster.local/ns/osdu-services/sa/compliance-queue" ] } } } -} \ No newline at end of file +} diff --git a/devops/aws/chart/values.yaml b/devops/aws/chart/values.yaml index 0032504fe18eb0f0d62ac0ca24c039205e76a882..1712d51d2117277efc176e126580d962658e5d77 100644 --- a/devops/aws/chart/values.yaml +++ b/devops/aws/chart/values.yaml @@ -64,8 +64,6 @@ environmentVariables: value: "true" - name: PARAMETER_MOUNT_PATH value: "/mnt/params" -podAnnotations: - seccomp.security.alpha.kubernetes.io/pod: "runtime/default" # Resource Config replicaCount: 1 @@ -92,8 +90,12 @@ securityContext: capabilities: drop: - ALL +podSecurityContext: + fsGroup: 1337 + seccompProfile: + type: RuntimeDefault allowedPrincipals: - - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + - cluster.local/ns/istio-system/sa/istio-ingressgateway - cluster.local/ns/{{ .Release.Namespace }}/sa/indexer-queue - cluster.local/ns/aws-binary-dms/sa/binary-dms - cluster.local/ns/osdu-airflow/sa/airflow-dag-upload diff --git a/devops/gcp/deploy/Chart.yaml b/devops/gc/deploy/Chart.yaml similarity index 96% rename from devops/gcp/deploy/Chart.yaml rename to devops/gc/deploy/Chart.yaml index 0c734669619861963d0ae8e80968babc7dbfbbbf..d7f8b27ec306171387e9d34e203a2c7a2e74bbba 100644 --- a/devops/gcp/deploy/Chart.yaml +++ b/devops/gc/deploy/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -name: gcp-indexer-deploy +name: gc-indexer-deploy description: A Helm chart for Kubernetes # A chart can be either an 'application' or a 'library' chart. @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "1.16.0" +appVersion: "1.19.0" diff --git a/devops/gc/deploy/README.md b/devops/gc/deploy/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b77aed3c34d7b5dc294439dcd5e0dd970c3831a6 --- /dev/null +++ b/devops/gc/deploy/README.md @@ -0,0 +1,96 @@ +<!--- Deploy --> + +# Deploy helm chart + +## Introduction + +This chart bootstraps a deployment on a [Kubernetes](https://kubernetes.io) cluster using [Helm](https://helm.sh) package manager. + +## Prerequisites + +The code was tested on **Kubernetes cluster** (v1.21.11) with **Istio** (1.12.6) +> It is possible to use other versions, but it hasn't been tested + +### Operation system + +The code works in Debian-based Linux (Debian 10 and Ubuntu 20.04) and Windows WSL 2. Also, it works but is not guaranteed in Google Cloud Shell. All other operating systems, including macOS, are not verified and supported. + +### Packages + +Packages are only needed for installation from a local computer. + +* **HELM** (version: v3.7.1 or higher) [helm](https://helm.sh/docs/intro/install/) +* **Kubectl** (version: v1.21.0 or higher) [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) + +## Installation + +Before installing deploy Helm chart you need to install [configmap Helm chart](../configmap). +First you need to set variables in **values.yaml** file using any code editor. Some of the values are prefilled, but you need to specify some values as well. You can find more information about them below. + +### Configmap variables + +| Name | Description | Type | Default |Required | +|------|-------------|------|---------|---------| +**data.entitlementsHost** | entitlements host | string | "http://entitlements" | yes +**data.indexerQueueHost** | indexer-queue host | string | "http://indexer-queue" | yes +**data.logLevel** | logging level | string | INFO | yes +**data.partitionHost** | partition host | string | "http://partition" | yes +**data.schemaHost** | schema host | string | "http://schema" | yes +**data.securityHttpsCertificateTrust** | whether https is enabled | boolean | true | yes +**data.springProfilesActive** | active spring profile | string | gcp | yes +**data.storageHost** | storage host | string | "http://storage" | yes +**data.redisIndexerHost** | The host for redis instance. If empty (by default), helm installs an internal redis instance | string | - | yes +**data.redisIndexerPort** | The port for redis instance | digit | 6379 | yes + +### Deploy variables + +| Name | Description | Type | Default |Required | +|------|-------------|------|---------|---------| +**data.requestsCpu** | amount of requested CPU | string | 480m | yes +**data.requestsMemory** | amount of requested memory| string | 700Mi | yes +**data.limitsCpu** | CPU limit | string | 1 | yes +**data.limitsMemory** | memory limit | string | 1G | yes +**data.image** | service image | string | - | yes +**data.imagePullPolicy** | when to pull image | string | IfNotPresent | yes +**data.serviceAccountName** | name of your service account | string | indexer | yes +**data.redisImage** | service image | string | `redis:7` | yes + +### Config variables + +| Name | Description | Type | Default |Required | +|------|-------------|------|---------|---------| +**conf.appName** | name of the app | string | `indexer` | yes +**conf.configmap** | configmap to be used | string | `indexer-config` | yes +**conf.elasticSecretName** | secret for elastic | string | `indexer-elastic-secret` | yes +**conf.keycloakSecretName** | secret for keycloak | string | `indexer-keycloak-secret` | yes +**conf.rabbitmqSecretName** | secret for rabbitmq | string | `rabbitmq-secret` | yes +**conf.onPremEnabled** | whether on-prem is enabled | boolean | false | yes +**conf.domain** | your domain | string | - | yes +**conf.indexerRedisSecretName** | indexer Redis secret that contains redis password with REDIS_PASSWORD key | string | `indexer-redis-secret` | yes + +### ISTIO variables + +| Name | Description | Type | Default |Required | +|------|-------------|------|---------|---------| +**istio.proxyCPU** | CPU request for Envoy sidecars | string | 130m | yes +**istio.proxyCPULimit** | CPU limit for Envoy sidecars | string | 500m | yes +**istio.proxyMemory** | memory request for Envoy sidecars | string | 100Mi | yes +**istio.proxyMemoryLimit** | memory limit for Envoy sidecars | string | 512Mi | yes + +### Install the helm chart + +Run this command from within this directory: + +```console +helm install gc-indexer-deploy . +``` + +## Uninstalling the Chart + +To uninstall the helm deployment: + +```console +helm uninstall gc-indexer-deploy +``` + +[Move-to-Top](#deploy-helm-chart) diff --git a/devops/gc/deploy/templates/configmap.yaml b/devops/gc/deploy/templates/configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3ca6fe5812d03b62c52b480ac8df345f8f57a187 --- /dev/null +++ b/devops/gc/deploy/templates/configmap.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ .Values.conf.appName | quote }} + name: {{ .Values.conf.configmap | quote }} + namespace: {{ .Release.Namespace | quote }} +data: + ENTITLEMENTS_HOST: {{ .Values.data.entitlementsHost | quote }} + INDEXER_QUEUE_BASE_HOST: {{ .Values.data.indexerQueueHost | quote }} + LOG_LEVEL: {{ .Values.data.logLevel | quote }} + PARTITION_HOST: {{ .Values.data.partitionHost | quote }} + {{- if .Values.data.redisIndexerHost }} + REDIS_GROUP_HOST: {{ .Values.data.redisIndexerHost | quote }} + REDIS_SEARCH_HOST: {{ .Values.data.redisIndexerHost | quote }} + {{- else }} + REDIS_GROUP_HOST: {{ printf "redis-%s" .Values.conf.appName | quote }} + REDIS_SEARCH_HOST: {{ printf "redis-%s" .Values.conf.appName | quote }} + {{- end }} + REDIS_SEARCH_PORT: {{ .Values.data.redisIndexerPort | quote }} + REDIS_GROUP_PORT: {{ .Values.data.redisIndexerPort | quote }} + SCHEMA_BASE_HOST: {{ .Values.data.schemaHost | quote }} + SECURITY_HTTPS_CERTIFICATE_TRUST: {{ .Values.data.securityHttpsCertificateTrust | quote }} + SPRING_PROFILES_ACTIVE: {{ .Values.data.springProfilesActive | quote }} + STORAGE_HOST: {{ .Values.data.storageHost | quote }} diff --git a/devops/gc/deploy/templates/deploy-redis.yaml b/devops/gc/deploy/templates/deploy-redis.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f310f1a847b80c2af66ef3dc3fa218e7250e661c --- /dev/null +++ b/devops/gc/deploy/templates/deploy-redis.yaml @@ -0,0 +1,37 @@ +{{ if not .Values.data.redisIndexerHost }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ printf "redis-%s" .Values.conf.appName | quote }} + namespace: {{ .Release.Namespace | quote }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ printf "redis-%s" .Values.conf.appName | quote }} + template: + metadata: + labels: + app: {{ printf "redis-%s" .Values.conf.appName | quote }} + annotations: + sidecar.istio.io/proxyCPU: 50m + sidecar.istio.io/proxyMemory: 100Mi + spec: + containers: + - args: + - --requirepass + - $(REDIS_PASSWORD) + envFrom: + - secretRef: + name: {{ .Values.conf.indexerRedisSecretName | quote }} + image: {{ .Values.data.redisImage | quote }} + imagePullPolicy: {{ .Values.data.imagePullPolicy | quote }} + name: {{ printf "redis-%s" .Values.conf.appName | quote }} + ports: + - containerPort: 6379 + protocol: TCP + resources: + requests: + cpu: 30m + memory: 50Mi +{{ end }} diff --git a/devops/gc/deploy/templates/deployment.yaml b/devops/gc/deploy/templates/deployment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cfd362ebc14567bc617e7ed710cba93156b1f5a3 --- /dev/null +++ b/devops/gc/deploy/templates/deployment.yaml @@ -0,0 +1,62 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: {{ .Values.conf.appName | quote }} + name: {{ .Values.conf.appName | quote }} + namespace: {{ .Release.Namespace | quote }} +spec: + selector: + matchLabels: + app: {{ .Values.conf.appName | quote }} + replicas: 1 + template: + metadata: + labels: + app: {{ .Values.conf.appName | quote }} + annotations: + rollme: {{ randAlphaNum 5 | quote }} + sidecar.istio.io/proxyCPU: {{ .Values.istio.proxyCPU | quote }} + sidecar.istio.io/proxyMemory: {{ .Values.istio.proxyMemory | quote }} + sidecar.istio.io/proxyCPULimit: {{ .Values.istio.proxyCPULimit | quote }} + sidecar.istio.io/proxyMemoryLimit: {{ .Values.istio.proxyMemoryLimit | quote }} + spec: + containers: + - name: {{ .Values.conf.appName | quote }} + image: {{ .Values.data.image | quote }} + imagePullPolicy: {{ .Values.data.imagePullPolicy | quote }} + env: + - name: REDIS_GROUP_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.conf.indexerRedisSecretName | quote }} + key: REDIS_PASSWORD + - name: REDIS_SEARCH_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.conf.indexerRedisSecretName | quote }} + key: REDIS_PASSWORD + envFrom: + - configMapRef: + name: {{ .Values.conf.configmap | quote }} + - secretRef: + name: {{ .Values.conf.elasticSecretName | quote }} + {{- if .Values.conf.onPremEnabled }} + - secretRef: + name: {{ .Values.conf.keycloakSecretName | quote }} + - secretRef: + name: {{ .Values.conf.rabbitmqSecretName | quote }} + {{- end }} + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + ports: + - containerPort: 8080 + resources: + requests: + cpu: {{ .Values.data.requestsCpu | quote }} + memory: {{ .Values.data.requestsMemory | quote }} + limits: + cpu: {{ .Values.data.limitsCpu | quote }} + memory: {{ .Values.data.limitsMemory | quote }} + serviceAccountName: {{ .Values.data.serviceAccountName | quote }} diff --git a/devops/gc/deploy/templates/service-account.yaml b/devops/gc/deploy/templates/service-account.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f0771985cd5da9db77781dc3ab635e52378b3fb6 --- /dev/null +++ b/devops/gc/deploy/templates/service-account.yaml @@ -0,0 +1,7 @@ +{{- if .Values.conf.onPremEnabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.data.serviceAccountName | quote }} + namespace: {{ .Release.Namespace | quote }} +{{- end }} diff --git a/devops/gc/deploy/templates/service-redis.yaml b/devops/gc/deploy/templates/service-redis.yaml new file mode 100644 index 0000000000000000000000000000000000000000..abc86bf979808eec89b273afe2ea711e74995c84 --- /dev/null +++ b/devops/gc/deploy/templates/service-redis.yaml @@ -0,0 +1,14 @@ +{{ if not .Values.data.redisIndexerHost }} +apiVersion: v1 +kind: Service +metadata: + name: {{ printf "redis-%s" .Values.conf.appName | quote }} + namespace: {{ .Release.Namespace | quote }} +spec: + ports: + - port: {{ .Values.data.redisIndexerPort }} + protocol: TCP + targetPort: 6379 + selector: + app: {{ printf "redis-%s" .Values.conf.appName | quote }} +{{ end }} diff --git a/devops/gcp/deploy/templates/service.yaml b/devops/gc/deploy/templates/service.yaml similarity index 65% rename from devops/gcp/deploy/templates/service.yaml rename to devops/gc/deploy/templates/service.yaml index b7e02b2ed551ad16a96b9894dad08399ddc4d02e..45bd505383e8204e40ebf5188814bc4a707b6c34 100644 --- a/devops/gcp/deploy/templates/service.yaml +++ b/devops/gc/deploy/templates/service.yaml @@ -5,8 +5,8 @@ metadata: annotations: cloud.google.com/neg: '{"ingress": true}' {{- end }} - name: "{{ .Values.conf.appName }}" - namespace: "{{ .Release.Namespace }}" + name: {{ .Values.conf.appName | quote }} + namespace: {{ .Release.Namespace | quote }} spec: ports: - protocol: TCP @@ -14,4 +14,4 @@ spec: targetPort: 8080 name: http selector: - app: "{{ .Values.conf.appName }}" + app: {{ .Values.conf.appName | quote }} diff --git a/devops/gcp/deploy/templates/virtual-service.yaml b/devops/gc/deploy/templates/virtual-service.yaml similarity index 72% rename from devops/gcp/deploy/templates/virtual-service.yaml rename to devops/gc/deploy/templates/virtual-service.yaml index 30ebb98ae58802b79ad8145f12d195ba05ac392c..ed9507c9788b4fb94ba2c75e2faae7a6ba49ada8 100644 --- a/devops/gcp/deploy/templates/virtual-service.yaml +++ b/devops/gc/deploy/templates/virtual-service.yaml @@ -1,8 +1,8 @@ apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: - name: "{{ .Values.conf.appName }}" - namespace: "{{ .Release.Namespace }}" + name: {{ .Values.conf.appName | quote }} + namespace: {{ .Release.Namespace | quote }} spec: hosts: {{- if and .Values.conf.domain .Values.conf.onPremEnabled }} @@ -22,4 +22,4 @@ spec: - destination: port: number: 80 - host: "{{ .Values.conf.appName }}.{{ .Release.Namespace }}.svc.cluster.local" + host: {{ printf "%s.%s.svc.cluster.local" .Values.conf.appName .Release.Namespace | quote }} diff --git a/devops/gc/deploy/values.yaml b/devops/gc/deploy/values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a5f7c271e40d3dfb957915b94612319fc8798ab9 --- /dev/null +++ b/devops/gc/deploy/values.yaml @@ -0,0 +1,42 @@ +# Default values for indexer-deploy. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +data: + # Configmap + entitlementsHost: "http://entitlements" + indexerQueueHost: "http://indexer-queue" + logLevel: "ERROR" + partitionHost: "http://partition" + schemaHost: "http://schema" + securityHttpsCertificateTrust: "true" + springProfilesActive: "gcp" + storageHost: "http://storage" + # Deployment + requestsCpu: "480m" + requestsMemory: "700Mi" + limitsCpu: "1" + limitsMemory: "1G" + image: "" + imagePullPolicy: "IfNotPresent" + serviceAccountName: "indexer" + # redis connection. Change it if you want to use external redis + redisIndexerHost: "" + redisIndexerPort: 6379 + redisImage: "docker.io/library/redis:7" + +conf: + appName: "indexer" + configmap: "indexer-config" + elasticSecretName: "indexer-elastic-secret" + keycloakSecretName: "indexer-keycloak-secret" + rabbitmqSecretName: "rabbitmq-secret" + onPremEnabled: false + domain: "" + indexerRedisSecretName: "indexer-redis-secret" + +istio: + proxyCPU: "130m" + proxyCPULimit: "200m" + proxyMemory: "100Mi" + proxyMemoryLimit: "256Mi" diff --git a/devops/gc/pipeline/override-stages.yml b/devops/gc/pipeline/override-stages.yml new file mode 100644 index 0000000000000000000000000000000000000000..e14557ddd5d4093b0d0a8a92a2c9d1214ec4217c --- /dev/null +++ b/devops/gc/pipeline/override-stages.yml @@ -0,0 +1,7 @@ +variables: + GC_SERVICE: indexer + GC_VENDOR: gc + +gc-anthos-test: + variables: + GC_VENDOR: anthos diff --git a/devops/gcp/configmap/Chart.yaml b/devops/gcp/configmap/Chart.yaml deleted file mode 100644 index c500f6dd586a566a8f55be1c428d40da77b506e1..0000000000000000000000000000000000000000 --- a/devops/gcp/configmap/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: gcp-indexer-configmap -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/devops/gcp/configmap/README.md b/devops/gcp/configmap/README.md deleted file mode 100644 index 6ecc6fe4fdc4803bc1a8bd97ec528daf7226e2f3..0000000000000000000000000000000000000000 --- a/devops/gcp/configmap/README.md +++ /dev/null @@ -1,74 +0,0 @@ -<!--- Configmap --> - -# Configmap helm chart - -## Introduction - -This chart bootstraps a configmap deployment on a [Kubernetes](https://kubernetes.io) cluster using [Helm](https://helm.sh) package manager. - -## Prerequisites - -The code was tested on **Kubernetes cluster** (v1.21.11) with **Istio** (1.12.6) -> It is possible to use other versions, but it hasn't been tested - -### Operation system - -The code works in Debian-based Linux (Debian 10 and Ubuntu 20.04) and Windows WSL 2. Also, it works but is not guaranteed in Google Cloud Shell. All other operating systems, including macOS, are not verified and supported. - -### Packages - -Packages are only needed for installation from a local computer. - -* **HELM** (version: v3.7.1 or higher) [helm](https://helm.sh/docs/intro/install/) -* **Kubectl** (version: v1.21.0 or higher) [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) - -## Installation - -First you need to set variables in **values.yaml** file using any code editor. Some of the values are prefilled, but you need to specify some values as well. You can find more information about them below. - -### Common variables - -| Name | Description | Type | Default |Required | -|------|-------------|------|---------|---------| -**entitlementsHost** | entitlements host | string | "http://entitlements" | yes -**indexerQueueHost** | indexer-queue host | string | "http://indexer-queue" | yes -**logLevel** | logging level | string | INFO | yes -**partitionHost** | partition host | string | "http://partition" | yes -**redisGroupHost** | redis group host | string | redis-group-master | yes -**redisSearchHost** | redis search host | string | redis-search-master | yes -**schemaHost** | schema host | string | "http://schema" | yes -**securityHttpsCertificateTrust** | whether https is enabled | boolean | true | yes -**springProfilesActive** | active spring profile | string | gcp | yes -**storageHost** | storage host | string | "http://storage" | yes - -### GCP variables - -| Name | Description | Type | Default |Required | -|------|-------------|------|---------|---------| -**googleAudiences** | your GCP client ID | string | - | yes - -### Config variables - -| Name | Description | Type | Default |Required | -|------|-------------|------|---------|---------| -**configmap** | configmap to be used | string | indexer-config | yes -**appName** | name of the app | string | indexer | yes -**onPremEnabled** | whether on-prem is enabled | boolean | false | yes - -### Install the helm chart - -Run this command from within this directory: - -```console -helm install gcp-indexer-configmap . -``` - -## Uninstalling the Chart - -To uninstall the helm deployment: - -```console -helm uninstall gcp-indexer-configmap -``` - -[Move-to-Top](#configmap-helm-chart) diff --git a/devops/gcp/configmap/templates/variables.yaml b/devops/gcp/configmap/templates/variables.yaml deleted file mode 100644 index 0988de1435130fd0de537eb094eaf1518513b3d9..0000000000000000000000000000000000000000 --- a/devops/gcp/configmap/templates/variables.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app: "{{ .Values.conf.appName }}" - name: "{{ .Values.conf.configmap }}" - namespace: "{{ .Release.Namespace }}" -data: - ENTITLEMENTS_HOST: "{{ .Values.data.entitlementsHost }}" - INDEXER_QUEUE_BASE_HOST: "{{ .Values.data.indexerQueueHost }}" - LOG_LEVEL: "{{ .Values.data.logLevel }}" - PARTITION_HOST: "{{ .Values.data.partitionHost }}" - REDIS_GROUP_HOST: "{{ .Values.data.redisGroupHost }}" - REDIS_SEARCH_HOST: "{{ .Values.data.redisSearchHost }}" - SCHEMA_BASE_HOST: "{{ .Values.data.schemaHost }}" - SECURITY_HTTPS_CERTIFICATE_TRUST: "{{ .Values.data.securityHttpsCertificateTrust }}" - SPRING_PROFILES_ACTIVE: "{{ .Values.data.springProfilesActive }}" - STORAGE_HOST: "{{ .Values.data.storageHost }}" - {{- if not .Values.conf.onPremEnabled }} - GOOGLE_AUDIENCES: "{{ .Values.data.googleAudiences }}" - {{- end }} diff --git a/devops/gcp/configmap/values.yaml b/devops/gcp/configmap/values.yaml deleted file mode 100644 index 79aa287b308a549fb61ff7658c405b3cccda7736..0000000000000000000000000000000000000000 --- a/devops/gcp/configmap/values.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Default values for indexer-configmap. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -data: - # common - entitlementsHost: "http://entitlements" - indexerQueueHost: "http://indexer-queue" - logLevel: "ERROR" - partitionHost: "http://partition" - redisGroupHost: "redis-group-master" - redisSearchHost: "redis-search-master" - schemaHost: "http://schema" - securityHttpsCertificateTrust: "true" - springProfilesActive: "gcp" - storageHost: "http://storage" - # gcp - googleAudiences: "" -conf: - appName: "indexer" - configmap: "indexer-config" - onPremEnabled: false diff --git a/devops/gcp/deploy/README.md b/devops/gcp/deploy/README.md deleted file mode 100644 index 91af5795453aa4fce107ed48e2bd7a692dc92f0b..0000000000000000000000000000000000000000 --- a/devops/gcp/deploy/README.md +++ /dev/null @@ -1,70 +0,0 @@ -<!--- Deploy --> - -# Deploy helm chart - -## Introduction - -This chart bootstraps a deployment on a [Kubernetes](https://kubernetes.io) cluster using [Helm](https://helm.sh) package manager. - -## Prerequisites - -The code was tested on **Kubernetes cluster** (v1.21.11) with **Istio** (1.12.6) -> It is possible to use other versions, but it hasn't been tested - -### Operation system - -The code works in Debian-based Linux (Debian 10 and Ubuntu 20.04) and Windows WSL 2. Also, it works but is not guaranteed in Google Cloud Shell. All other operating systems, including macOS, are not verified and supported. - -### Packages - -Packages are only needed for installation from a local computer. - -* **HELM** (version: v3.7.1 or higher) [helm](https://helm.sh/docs/intro/install/) -* **Kubectl** (version: v1.21.0 or higher) [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) - -## Installation - -Before installing deploy Helm chart you need to install [configmap Helm chart](../configmap). -First you need to set variables in **values.yaml** file using any code editor. Some of the values are prefilled, but you need to specify some values as well. You can find more information about them below. - -### Common variables - -| Name | Description | Type | Default |Required | -|------|-------------|------|---------|---------| -**requestsCpu** | amount of requested CPU | string | 0.1 | yes -**requestsMemory** | amount of requested memory| string | 640M | yes -**limitsCpu** | CPU limit | string | 1 | yes -**limitsMemory** | memory limit | string | 1G | yes -**image** | service image | string | - | yes -**imagePullPolicy** | when to pull image | string | IfNotPresent | yes -**serviceAccountName** | name of your service account | string | indexer | yes - -### Config variables - -| Name | Description | Type | Default |Required | -|------|-------------|------|---------|---------| -**appName** | name of the app | string | `indexer` | yes -**configmap** | configmap to be used | string | `indexer-config` | yes -**elasticSecretName** | secret for elastic | string | `indexer-elastic-secret` | yes -**keycloakSecretName** | secret for keycloak | string | `indexer-keycloak-secret` | yes -**rabbitmqSecretName** | secret for rabbitmq | string | `rabbitmq-secret` | yes -**onPremEnabled** | whether on-prem is enabled | boolean | false | yes -**domain** | your domain | string | - | yes - -### Install the helm chart - -Run this command from within this directory: - -```console -helm install gcp-indexer-deploy . -``` - -## Uninstalling the Chart - -To uninstall the helm deployment: - -```console -helm uninstall gcp-indexer-deploy -``` - -[Move-to-Top](#deploy-helm-chart) diff --git a/devops/gcp/deploy/templates/deployment.yaml b/devops/gcp/deploy/templates/deployment.yaml deleted file mode 100644 index 8c883af78718775e0258b30d0bfef0521f5a4fe2..0000000000000000000000000000000000000000 --- a/devops/gcp/deploy/templates/deployment.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app: "{{ .Values.conf.appName }}" - name: "{{ .Values.conf.appName }}" - namespace: "{{ .Release.Namespace }}" -spec: - selector: - matchLabels: - app: "{{ .Values.conf.appName }}" - replicas: 1 - template: - metadata: - labels: - app: "{{ .Values.conf.appName }}" - annotations: - rollme: {{ randAlphaNum 5 | quote }} - spec: - containers: - - name: "{{ .Values.conf.appName }}" - image: "{{ .Values.data.image }}" - imagePullPolicy: "{{ .Values.data.imagePullPolicy }}" - envFrom: - - configMapRef: - name: "{{ .Values.conf.configmap }}" - - secretRef: - name: "{{ .Values.conf.elasticSecretName }}" - {{- if .Values.conf.onPremEnabled }} - - secretRef: - name: "{{ .Values.conf.keycloakSecretName }}" - - secretRef: - name: "{{ .Values.conf.rabbitmqSecretName }}" - {{- end }} - securityContext: - allowPrivilegeEscalation: false - runAsUser: 0 - ports: - - containerPort: 8080 - resources: - requests: - cpu: "{{ .Values.data.requestsCpu }}" - memory: "{{ .Values.data.requestsMemory }}" - limits: - cpu: "{{ .Values.data.limitsCpu }}" - memory: "{{ .Values.data.limitsMemory }}" - serviceAccountName: "{{ .Values.data.serviceAccountName }}" diff --git a/devops/gcp/deploy/templates/service-account.yaml b/devops/gcp/deploy/templates/service-account.yaml deleted file mode 100644 index 25fd74efbfca059f541af82d98b676cfcb930d64..0000000000000000000000000000000000000000 --- a/devops/gcp/deploy/templates/service-account.yaml +++ /dev/null @@ -1,7 +0,0 @@ -{{- if .Values.conf.onPremEnabled }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: "{{ .Values.data.serviceAccountName }}" - namespace: "{{ .Release.Namespace }}" -{{- end }} diff --git a/devops/gcp/deploy/values.yaml b/devops/gcp/deploy/values.yaml deleted file mode 100644 index 2ef4cb8867cc264cf10b3f298f7629042eddb692..0000000000000000000000000000000000000000 --- a/devops/gcp/deploy/values.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Default values for indexer-deploy. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -data: - requestsCpu: "0.1" - requestsMemory: "640M" - limitsCpu: "1" - limitsMemory: "1G" - image: "" - imagePullPolicy: "IfNotPresent" - serviceAccountName: "indexer" -conf: - appName: "indexer" - configmap: "indexer-config" - elasticSecretName: "indexer-elastic-secret" - keycloakSecretName: "indexer-keycloak-secret" - rabbitmqSecretName: "rabbitmq-secret" - onPremEnabled: false - domain: "" diff --git a/devops/gcp/pipeline/override-stages.yml b/devops/gcp/pipeline/override-stages.yml deleted file mode 100644 index 466c27c54721f606de555b9a5ffe4a5287ba5882..0000000000000000000000000000000000000000 --- a/devops/gcp/pipeline/override-stages.yml +++ /dev/null @@ -1,7 +0,0 @@ -variables: - OSDU_GCP_SERVICE: indexer - OSDU_GCP_VENDOR: gcp - -osdu-gcp-anthos-test: - variables: - OSDU_GCP_VENDOR: anthos diff --git a/docs/tutorial/IndexerService.md b/docs/tutorial/IndexerService.md index 106753b26f384f1206b682f81855d8f791b11e7d..7d32460d94b8774dcaf5e888baae2e17fd35fad6 100644 --- a/docs/tutorial/IndexerService.md +++ b/docs/tutorial/IndexerService.md @@ -11,9 +11,9 @@ - [Data Partition provision](#data-partition-provision) - [Schema change](#schema-change) - [Schema Service adoption](#schema-service-adoption) - * [R3 Schema Support](#r3-schema-support) + - [R3 Schema Support](#r3-schema-support) - [Troubleshoot Indexing Issues](#troubleshoot-indexing-issues) - * [Get indexing status](#get-indexing-status) + - [Get indexing status](#get-indexing-status) ## Introduction <a name="introduction"></a> @@ -27,28 +27,31 @@ parent, acl, namespace, type, version, legaltags, index to each record at the ti ## Indexer API access <a name="indexer-api-access"></a> -* Required roles +- Required roles Indexer service requires that users (and service accounts) have dedicated roles in order to use it. Users must be a member of `users.datalake.viewers` or `users.datalake.editors` or `users.datalake.admins`, roles can be assigned using the [Entitlements Service](/solutions/osdu/tutorials/core-services/entitlementsservice). Please look at the API documentation for specific requirements. In addition to service roles, users __must__ be a member of data groups to access the data. -* Required headers +- Required headers The OSDU Data Platform stores data in different partitions, depending on the different accounts in the OSDU system. A user may belong to more than one account. As a user, after logging into the OSDU portal, you need to select the account you wish to be active. Likewise, when using the Search APIs, you need to specify the active account in the header called `data-partition-id`. The correct `data-partition-id` can be obtained from the CFS services. The `data-partition-id` enables the search within the mapped partition. e.g. + ``` data-partition-id: opendes ``` -* Optional headers +- Optional headers The `correlation-id` is a traceable ID to track the journey of a single request. The `correlation-id` can be a GUID on the header with a key. It is best practice to provide the correlation-id so the request can be tracked through all the services. + ``` correlation-id: 1e0fef08-22fd-49b1-a5cc-dffa21bc0b70 ``` + If the service is initiating the request, an ID should be generated. If the `correlation-id` is not provided, then a new ID will be generated by the service so that the request would be traceable. [Back to table of contents](#TOC) @@ -65,12 +68,12 @@ Provides build and git related information. GET /api/indexer/v2/info HTTP/1.1 ``` -#### Example response: +#### Example response ```json { "groupId": "org.opengroup.osdu", - "artifactId": "indexer-gcp", + "artifactId": "indexer-gc", "version": "0.10.0-SNAPSHOT", "buildTime": "2021-07-09T14:29:51.584Z", "branch": "feature/GONRG-2681_Build_info", @@ -140,12 +143,12 @@ will use the same schema and overwrite records with the same ids. Default value #### Request body `kind` <br /> -  (required, String) Kind to be re-indexed. - +  (required, String) Kind to be re-indexed. [Back to table of contents](#TOC) ## Delete API <a name="delete"></a> + Delete API is used to delete an index for a specific kind. Only users who belong to the Entitlement groups 'users.datalake.ops' can make calls to this API. @@ -165,9 +168,9 @@ curl --request DELETE \ ### Data Partition provision <a name="data-partition-provision"></a> -Configures Search backend for a data partition. +Configures Search backend for a data partition. -```http +```http PUT /api/indexer/v2/partitions/provision HTTP/1.1 ``` @@ -181,6 +184,7 @@ curl --request PUT \ --header 'content-type: application/json' \ --header 'data-partition-id: opendes'' ``` + </details> #### Prerequisite @@ -244,14 +248,14 @@ Indexer service support r3 schema. These schemas are created via Schema service. Here is an example following end-to-end workflow can be exercised (please update the schema based on your environment): -* Ingest r3 schema for `opendes:wks:master-data--Wellbore:1.0.0`. Schema service payload can be +- Ingest r3 schema for `opendes:wks:master-data--Wellbore:1.0.0`. Schema service payload can be found [here](https://community.opengroup.org/osdu/platform/system/indexer-service/-/blob/master/testing/indexer-test-core/src/main/resources/testData/r3-index_record_wks_master.schema.json) . -* Ingest r3 master-data Wellbore record. Storage service payload can be +- Ingest r3 master-data Wellbore record. Storage service payload can be found [here](https://community.opengroup.org/osdu/platform/system/indexer-service/-/blob/master/testing/indexer-test-core/src/main/resources/testData/r3-index_record_wks_master.json) -* Records can be searched via Search service. Here is sample payload: +- Records can be searched via Search service. Here is sample payload: ``` POST /api/search/v2/query HTTP/1.1 @@ -322,9 +326,9 @@ Details of the index block: 1) trace: This field collects all the issues related to the indexing and concatenates using '|'. This is a String field. 2) statusCode: This field determines the category of the error. This is integer field. It can have the following values: - * 200 - All OK - * 404 - Schema is missing in Storage - * 400 - Some fields were not properly mapped with the schema defined + - 200 - All OK + - 404 - Schema is missing in Storage + - 400 - Some fields were not properly mapped with the schema defined 3) lastUpdateTime: This field captures the last time the record was updated by the indexer service. This is datetime field so you can do range queries on this field. @@ -346,4 +350,4 @@ The above query will return all records which had problems due to fields mismatc Please refer to the [Search service](https://community.opengroup.org/osdu/platform/system/search-service/-/blob/master/docs/api/search_openapi.yaml#L28) documentation for examples on different kinds of search queries. -[Back to table of contents](#TOC) \ No newline at end of file +[Back to table of contents](#TOC) diff --git a/docs/tutorial/PreviewFeatures.md b/docs/tutorial/PreviewFeatures.md index eaa06b7194ba3d5cb70bf8f01b8b0ae49995dfd3..307360f59ddab73756195822f622d7ae9948142f 100644 --- a/docs/tutorial/PreviewFeatures.md +++ b/docs/tutorial/PreviewFeatures.md @@ -8,17 +8,18 @@ by implementing Ramer–Douglas–Peucker algorithm: - Polygon - MultiPolygon -In order to reduce the risk when extended evaluation of the solution is still on going, a feature flag that is managed by -the Partition Service is applied to the solution. -Here is an example to enable this feature by setting the property "indexer-decimation-enabled" in a given data partition: + +The feature is enabled by default for all data partitions. If client does not want the geo-shape to be decimated in their +data partitions, they can disable geo-shape decimation through the Partition Service. +Here is an example to disable this feature by setting the property "indexer-decimation-enabled" in a given data partition: ``` { "indexer-decimation-enabled": { "sensitive": false, - "value": "true" + "value": "false" } } ``` -If the property "indexer-decimation-enabled" is not created or the property value is set to "false" (String type) in the -given data partition, the geo-shape decimation will be ignored. +If the property "indexer-decimation-enabled" is not created or the property value is set to "true" (String type) in the +given data partition, the geo-shape decimation will be enabled. diff --git a/indexer-core/pom.xml b/indexer-core/pom.xml index 120a081c4e94b5df47bb960052063fb187f58b8e..8879d001c71555a9a46718fc90c5047eed3d473f 100644 --- a/indexer-core/pom.xml +++ b/indexer-core/pom.xml @@ -4,12 +4,12 @@ <parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>indexer-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <name>indexer-core</name> <description>Indexer Service Core</description> <packaging>jar</packaging> @@ -19,8 +19,8 @@ <spring-security-web.version>5.4.9</spring-security-web.version> <gson.version>2.9.1</gson.version> <netty.version>4.1.70.Final</netty.version> - <jackson-databind.version>2.13.2.2</jackson-databind.version> - <jackson.version>2.13.2</jackson.version> + <jackson-databind.version>2.13.4.2</jackson-databind.version> + <jackson.version>2.13.4</jackson.version> <spring-webmvc.version>5.3.22</spring-webmvc.version> </properties> @@ -244,7 +244,11 @@ <version>3.0.16</version> <scope>test</scope> </dependency> - + <dependency> + <groupId>org.apache.tomcat.embed</groupId> + <artifactId>tomcat-embed-core</artifactId> + <version>9.0.68</version> + </dependency> </dependencies> <build> diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/config/IndexerConfigurationProperties.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/config/IndexerConfigurationProperties.java index cff663d6ca875c6c3bddbbd0c7ba68653ac77ac1..c97fbc61591bed6af0af8b8b1777157191546ace 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/config/IndexerConfigurationProperties.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/config/IndexerConfigurationProperties.java @@ -67,7 +67,6 @@ public class IndexerConfigurationProperties { private String gaeVersion; private String googleCloudProject; private String googleCloudProjectRegion; - private String googleAudiences; public DeploymentEnvironment getDeploymentEnvironment(){ return DeploymentEnvironment.valueOf(deploymentEnvironment); diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java index dd3d7519c91a95b14987c3b4a1f530750a6ecaf1..31e253eaeda6d9933856bd62a9077d39029da59c 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java @@ -70,6 +70,9 @@ public class IndexerServiceImpl implements IndexerService { private final Gson gson = new GsonBuilder().serializeNulls().create(); + // we index a normalized kind (authority + source + entity type + major version) as a tags attribute for all records + private static String NORMALIZATION_KIND_TAG_ATTRIBUTE_NAME = "normalizedKind"; + @Inject private JaxRsDpsLog jaxRsDpsLog; @Inject @@ -310,6 +313,7 @@ public class IndexerServiceImpl implements IndexerService { String authority = kindParts[0]; String source = kindParts[1]; String type = kindParts[2]; + String[] versionParts = kindParts[3].split("\\."); document.setKind(storageRecord.getKind()); document.setNamespace(authority + ":" + source); document.setAuthority(authority); @@ -319,9 +323,12 @@ public class IndexerServiceImpl implements IndexerService { document.setVersion(storageRecord.getVersion()); document.setAcl(storageRecord.getAcl()); document.setLegal(storageRecord.getLegal()); - if (storageRecord.getTags() != null) { - document.setTags(storageRecord.getTags()); + if (storageRecord.getTags() == null) { + Map<String, String> constantTags = new HashMap<>(); + constantTags.put(IndexerServiceImpl.NORMALIZATION_KIND_TAG_ATTRIBUTE_NAME, String.format("%s:%s:%s:%s", authority, source, type, versionParts[0])); + storageRecord.setTags(constantTags); } + document.setTags(storageRecord.getTags()); document.setCreateUser(storageRecord.getCreateUser()); document.setCreateTime(storageRecord.getCreateTime()); if (!Strings.isNullOrEmpty(storageRecord.getModifyUser())) { diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndicesServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndicesServiceImpl.java index db5a2f37a19857fd609da3fc3abdc953c5889fd8..bc8d633ac9be3a39336ea79a634709e1f34c2940 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndicesServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndicesServiceImpl.java @@ -24,6 +24,7 @@ import org.elasticsearch.ElasticsearchException; import org.elasticsearch.ElasticsearchStatusException; import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; +import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.Request; @@ -51,10 +52,7 @@ import org.springframework.web.context.annotation.RequestScope; import java.io.IOException; import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; @Service @RequestScope @@ -107,6 +105,8 @@ public class IndicesServiceImpl implements IndicesService { if (indexStatus) { this.indexCache.put(index, true); this.log.info(String.format("Time taken to successfully create new index %s : %d milliseconds", request.index(), stopTime-startTime)); + + createIndexAlias(client, index); } return indexStatus; @@ -303,4 +303,48 @@ public class IndicesServiceImpl implements IndicesService { throw exception; } } -} \ No newline at end of file + + private void createIndexAlias(RestHighLevelClient client, String index) { + String kind = this.elasticIndexNameResolver.getKindFromIndexName(index); + if(!elasticIndexNameResolver.isIndexAliasSupported(kind)) + return; + + try { + List<String> kinds = new ArrayList<>(); + kinds.add(kind); + String kindWithMajorVersion = getKindWithMajorVersion(kind); + if(elasticIndexNameResolver.isIndexAliasSupported(kindWithMajorVersion)) { + kinds.add(kindWithMajorVersion); + } + for (String kd : kinds) { + index = elasticIndexNameResolver.getIndexNameFromKind(kd); + String alias = elasticIndexNameResolver.getIndexAliasFromKind(kd); + IndicesAliasesRequest addRequest = new IndicesAliasesRequest(); + IndicesAliasesRequest.AliasActions aliasActions = new IndicesAliasesRequest.AliasActions(IndicesAliasesRequest.AliasActions.Type.ADD) + .index(index) + .alias(alias); + addRequest.addAliasAction(aliasActions); + AcknowledgedResponse response = client.indices().updateAliases(addRequest, RequestOptions.DEFAULT); + if (response.isAcknowledged()) { + this.log.info(String.format("Alias %s was created for index %s", alias, index)); + } + } + } + catch(Exception ex) { + // Failed to create alias is not the end. It should not affect the status of index creation + this.log.error(String.format("Fail to create aliases for index %s", index), ex); + } + } + + private String getKindWithMajorVersion(String kind) { + // If kind is common:welldb:wellbore:1.2.0, then kind with major version is common:welldb:wellbore:1.*.* + int idx = kind.lastIndexOf(":"); + String version = kind.substring(idx+1); + if(version.indexOf(".") > 0) { + String kindWithoutVersion = kind.substring(0, idx); + String majorVersion = version.substring(0, version.indexOf(".")); + return String.format("%s:%s.*.*", kindWithoutVersion, majorVersion); + } + return null; + } +} diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java index ff381db42c4d0854f8e36eba2d05a9733f0535ec..89c13fcb1fbc6b0da27795b5577a491eac8bf3dd 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java @@ -116,6 +116,10 @@ public class StorageServiceImpl implements StorageService { throw new AppException(HttpStatus.SC_NOT_FOUND, "Invalid request", "Storage service returned empty response"); } + if (response.getResponseCode() == 500) { + throw new AppException(RequestStatus.NO_RETRY, "Server error", String.format("Storage service error: %s", response.getBody())); + } + Records records = null; try { records = this.objectMapper.readValue(bulkStorageData, Records.class); diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSetting.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSetting.java index 492f2d7479f3c2a02d883681fab6216045211b0e..a062c1ac6e645e3e5bdcec4d9c066e0d0230d199 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSetting.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSetting.java @@ -51,14 +51,13 @@ public class GeoShapeDecimationSetting { if (cache != null && cache.containsKey(cacheKey)) return cache.get(cacheKey); - boolean decimationEnabled = false; + boolean decimationEnabled = true; try { PartitionInfo partitionInfo = getPartitionInfo(dataPartitionId); decimationEnabled = getDecimationSetting(partitionInfo); } catch (Exception e) { - this.logger.error(String.format("PartitionService: Error getting %s for dataPartition with Id: %s", PROPERTY_NAME, dataPartitionId), e); + this.logger.error(String.format("PartitionService: Error getting %s for dataPartition with Id: %s. Turn on the feature flag by default.", PROPERTY_NAME, dataPartitionId), e); } - this.cache.put(cacheKey, decimationEnabled); return decimationEnabled; } @@ -78,12 +77,12 @@ public class GeoShapeDecimationSetting { private boolean getDecimationSetting(PartitionInfo partitionInfo) { if(partitionInfo == null || partitionInfo.getProperties() == null) - return false; + return true; if(partitionInfo.getProperties().containsKey(PROPERTY_NAME)) { Property property = partitionInfo.getProperties().get(PROPERTY_NAME); return Boolean.parseBoolean((String)property.getValue()); } - return false; + return true; } } diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/IndicesServiceTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/IndicesServiceTest.java index 8fb08c6e6ac0be3e3116cec674108af1a6f8231d..7f22b619a9364b308791473adbae5324a0687d9a 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/IndicesServiceTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/IndicesServiceTest.java @@ -24,8 +24,11 @@ import org.apache.http.util.EntityUtils; import org.elasticsearch.ElasticsearchStatusException; import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; +import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.*; +import org.elasticsearch.client.indices.CreateIndexRequest; +import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.client.indices.GetIndexResponse; import org.elasticsearch.rest.RestStatus; @@ -47,10 +50,12 @@ import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException; import java.lang.reflect.Type; +import java.util.HashMap; import java.util.List; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; @@ -87,6 +92,52 @@ public class IndicesServiceTest { restHighLevelClient = PowerMockito.mock(RestHighLevelClient.class); } + @Test + public void create_elasticIndex() throws Exception { + String kind = "common:welldb:wellbore:1.2.0"; + String index = "common-welldb-wellbore-1.2.0"; + CreateIndexResponse indexResponse = new CreateIndexResponse(true, true, index); + AcknowledgedResponse acknowledgedResponse = new AcknowledgedResponse(true); + + when(elasticIndexNameResolver.getKindFromIndexName(any())).thenReturn(kind); + when(elasticIndexNameResolver.getIndexNameFromKind(any())).thenReturn(index); + when(elasticIndexNameResolver.getIndexAliasFromKind(any())).thenReturn("a12345678"); + when(elasticIndexNameResolver.isIndexAliasSupported(any())).thenReturn(true); + when(restHighLevelClient.indices()).thenReturn(indicesClient); + when(indicesClient.create(any(CreateIndexRequest.class), any(RequestOptions.class))).thenReturn(indexResponse); + when(indicesClient.updateAliases(any(IndicesAliasesRequest.class), any(RequestOptions.class))).thenReturn(acknowledgedResponse); + boolean response = this.sut.createIndex(restHighLevelClient, index, null, "anytype", new HashMap<>()); + assertTrue(response); + when(this.indicesExistCache.get(index)).thenReturn(true); + verify(this.indicesClient, times(2)).updateAliases(any(IndicesAliasesRequest.class), any(RequestOptions.class)); + } + + @Test + public void create_elasticIndex_fail() throws Exception { + String index = "common-welldb-wellbore-1.2.0"; + CreateIndexResponse indexResponse = new CreateIndexResponse(false, false, index); + + when(restHighLevelClient.indices()).thenReturn(indicesClient); + when(indicesClient.create(any(CreateIndexRequest.class), any(RequestOptions.class))).thenReturn(indexResponse); + boolean response = this.sut.createIndex(restHighLevelClient, index, null, "anytype", new HashMap<>()); + assertFalse(response); + verify(this.indicesExistCache, times(0)).put(any(), any()); + verify(this.indicesClient, times(0)).updateAliases(any(IndicesAliasesRequest.class), any(RequestOptions.class)); + } + + @Test + public void create_existingElasticIndex() throws Exception { + String index = "common-welldb-wellbore-1.2.0"; + ElasticsearchStatusException elasticsearchStatusException = new ElasticsearchStatusException("resource_already_exists_exception", RestStatus.BAD_REQUEST); + + when(restHighLevelClient.indices()).thenReturn(indicesClient); + when(indicesClient.create(any(CreateIndexRequest.class), any(RequestOptions.class))).thenThrow(elasticsearchStatusException); + boolean response = this.sut.createIndex(restHighLevelClient, index, null, "anytype", new HashMap<>()); + assertTrue(response); + verify(this.indicesExistCache, times(1)).put(any(), any()); + verify(this.indicesClient, times(0)).updateAliases(any(IndicesAliasesRequest.class), any(RequestOptions.class)); + } + @Test public void delete_existingElasticIndex() throws Exception { AcknowledgedResponse indexResponse = new AcknowledgedResponse(true); @@ -290,4 +341,4 @@ public class IndicesServiceTest { verify(this.indicesExistCache, times(1)).get("anyIndex"); verify(this.indicesExistCache, times(1)).put("anyIndex", true); } -} \ No newline at end of file +} diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSettingTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSettingTest.java index 2b4ed8351c66c303b242403c063bcb5d510a0662..82fc83db7ccd0a520eabb90ea3a0f414ca0338c2 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSettingTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/geo/decimator/GeoShapeDecimationSettingTest.java @@ -91,18 +91,20 @@ public class GeoShapeDecimationSettingTest { } @Test - public void isDecimationEnabled_return_false_when_property_does_not_exist() throws PartitionException { + public void isDecimationEnabled_return_true_when_property_does_not_exist() throws PartitionException { + // The feature flag is enabled by default PartitionInfo partitionInfo = new PartitionInfo(); when(this.partitionProvider.get(anyString())).thenReturn(partitionInfo); boolean enabled = sut.isDecimationEnabled(); - Assert.assertFalse(enabled); + Assert.assertTrue(enabled); } @Test - public void isDecimationEnabled_return_false_when_partitionProvider_throws_exception() throws PartitionException { + public void isDecimationEnabled_return_true_when_partitionProvider_throws_exception() throws PartitionException { + // The feature flag is enabled by default when(this.partitionProvider.get(anyString())).thenThrow(PartitionException.class); boolean enabled = sut.isDecimationEnabled(); - Assert.assertFalse(enabled); + Assert.assertTrue(enabled); } } diff --git a/pom.xml b/pom.xml index b3abf3636de183bdf632b8cda2c02e6dc576fdf8..42b096b3a8a73735ae42c63baeb32638a0456fdc 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> <packaging>pom</packaging> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <description>Indexer Service</description> <properties> @@ -13,18 +13,19 @@ <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> - <os-core-common.version>0.16.1</os-core-common.version> - <snakeyaml.version>1.26</snakeyaml.version> + <os-core-common.version>0.19.0-SNAPSHOT</os-core-common.version> + <snakeyaml.version>1.33</snakeyaml.version> <hibernate-validator.version>6.1.5.Final</hibernate-validator.version> - <jackson-databind.version>2.13.2.2</jackson-databind.version> - <jackson.version>2.13.2</jackson.version> - <tomcat-embed-core.version>9.0.67</tomcat-embed-core.version> + <jackson-databind.version>2.13.4.2</jackson-databind.version> + <jackson.version>2.13.4</jackson.version> + <tomcat-embed-core.version>9.0.68</tomcat-embed-core.version> <common-codec.version>1.14</common-codec.version> <elasticsearch.version>7.8.1</elasticsearch.version> <netty.version>4.1.51.Final</netty.version> <reactor-netty.version>0.8.20.RELEASE</reactor-netty.version> <woodstox-core.version>6.2.3</woodstox-core.version> <log4j2.version>2.17.1</log4j2.version> + <spring-boot-maven-plugin.version>2.7.6</spring-boot-maven-plugin.version> <!-- <spring-boot.version>2.1.18.RELEASE</spring-boot.version>--> <json-smart.version>2.4.7</json-smart.version> <!-- <maven.war.plugin>2.6</maven.war.plugin>--> @@ -172,7 +173,7 @@ <module>indexer-core</module> <module>provider/indexer-aws</module> <module>provider/indexer-azure</module> - <module>provider/indexer-gcp</module> + <module>provider/indexer-gc</module> <module>provider/indexer-ibm</module> </modules> @@ -252,6 +253,25 @@ </generateGitPropertiesFilename> </configuration> </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.8.3</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>prepare-package</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> </project> diff --git a/provider/indexer-aws/build-aws/buildspec.yaml b/provider/indexer-aws/build-aws/buildspec.yaml index 07568c7d890cc73bd33b26f6ed515ece36a7d665..79089e2939c45cd82cba06e20526a19e4d93181f 100644 --- a/provider/indexer-aws/build-aws/buildspec.yaml +++ b/provider/indexer-aws/build-aws/buildspec.yaml @@ -45,6 +45,10 @@ phases: - export AWS_ACCOUNT_ID=`aws sts get-caller-identity | grep Account | cut -d':' -f 2 | cut -d'"' -f 2` - export AWS_OSDU_DEV_MAVEN_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain $AWS_OSDU_DEV_MAVEN_DOMAIN --domain-owner $AWS_ACCOUNT_ID --query authorizationToken --output text` # Install git secrets + #TODO temporarily adding hotfix, due to https://github.com/awslabs/git-secrets/issues/220 + - export SAY_LOCATION=`ln -s "$(which echo)" say` + - export PATH="$PATH:$SAY_LOCATION" + - git clone https://github.com/awslabs/git-secrets.git - cd git-secrets && make install && cd .. - git secrets --install && git secrets --register-aws diff --git a/provider/indexer-aws/pom.xml b/provider/indexer-aws/pom.xml index ce378e23c88d63ae6c1875d3ab2f9a012042fc92..741636525f6048d7718d05093e21a23a61153bf9 100644 --- a/provider/indexer-aws/pom.xml +++ b/provider/indexer-aws/pom.xml @@ -18,7 +18,7 @@ <parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -26,7 +26,7 @@ <artifactId>indexer-aws</artifactId> <description>Indexer service on AWS</description> <packaging>jar</packaging> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <properties> <aws.version>1.11.1018</aws.version> @@ -66,12 +66,12 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.opengroup.osdu.core.aws</groupId> <artifactId>os-core-lib-aws</artifactId> - <version>0.14.0-rc2</version> + <version>0.18.0</version> </dependency> <!-- AWS managed packages --> @@ -192,6 +192,7 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-maven-plugin.version}</version> <configuration> <classifier>spring-boot</classifier> <mainClass>org.opengroup.osdu.indexer.aws.IndexerAwsApplication</mainClass> @@ -204,18 +205,24 @@ </execution> </executions> </plugin> - <plugin> - <groupId>org.owasp</groupId> - <artifactId>dependency-check-maven</artifactId> - <version>6.2.2</version> - <executions> - <execution> - <goals> - <goal>check</goal> - </goals> - </execution> - </executions> - </plugin> + <plugin> + <groupId>org.owasp</groupId> + <artifactId>dependency-check-maven</artifactId> + <version>7.4.4</version> + <configuration> + <!-- .Disable Net content--> + <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled> + <nugetconfAnalyzerEnabled>false</nugetconfAnalyzerEnabled> + <nuspecAnalyzerEnabled>false</nuspecAnalyzerEnabled> + </configuration> + <executions> + <execution> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> </project> diff --git a/provider/indexer-azure/pom.xml b/provider/indexer-azure/pom.xml index 82cfaeed59b5d6f00f43368920b3b233802855e7..cb769aeaf75e06a34316ffd3cea9a60fc1fcdff2 100644 --- a/provider/indexer-azure/pom.xml +++ b/provider/indexer-azure/pom.xml @@ -21,12 +21,12 @@ <parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <artifactId>indexer-azure</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <name>indexer-azure</name> <description>Indexer Service Azure</description> <packaging>jar</packaging> @@ -39,9 +39,9 @@ <azure.appservice.subscription /> <log4j.version>2.17.1</log4j.version> <nimbus-jose-jwt.version>8.2</nimbus-jose-jwt.version> - <indexer-core.version>0.18.0-SNAPSHOT</indexer-core.version> + <indexer-core.version>0.20.0-SNAPSHOT</indexer-core.version> <spring-security-jwt.version>1.1.1.RELEASE</spring-security-jwt.version> - <osdu.corelibazure.version>0.15.2</osdu.corelibazure.version> + <osdu.corelibazure.version>0.18.0-rc3</osdu.corelibazure.version> <reactor-netty.version>0.9.12.RELEASE</reactor-netty.version> <java-jwt.version>3.8.1</java-jwt.version> <powermock.version>2.0.2</powermock.version> @@ -50,9 +50,9 @@ <spring-security-oauth2.version>2.3.6.RELEASE</spring-security-oauth2.version> <spring-boot.version>2.1.18.RELEASE</spring-boot.version> <reactor-netty.version>1.0.7</reactor-netty.version> - <reactor-core.version>3.4.6</reactor-core.version> + <reactor-core.version>3.4.24</reactor-core.version> <oauth2-oidc-sdk.version>6.5</oauth2-oidc-sdk.version> - <jackson-databind.version>2.13.2.2</jackson-databind.version> + <jackson-databind.version>2.13.4</jackson-databind.version> <jackson.version>2.13.2</jackson.version> <spring-webmvc.version>5.3.22</spring-webmvc.version> <azure-core.version>1.31.0</azure-core.version> @@ -374,6 +374,7 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-maven-plugin.version}</version> <executions> <execution> <goals> @@ -388,6 +389,25 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.8.2</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>prepare-package</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> @@ -428,8 +448,32 @@ <threadCount>1</threadCount> </configuration> </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <configuration> + <excludes> + <exclude>**/cache/*</exclude> + <exclude>**/security/*</exclude> + </excludes> + </configuration> + </plugin> </plugins> </build> - - + <reporting> + <plugins> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <reportSets> + <reportSet> + <reports> + <!-- select non-aggregate reports --> + <report>report</report> + </reports> + </reportSet> + </reportSets> + </plugin> + </plugins> + </reporting> </project> diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/IndexerAzureApplicationTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/IndexerAzureApplicationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6d38bc8f2150ee3d1fb06fc9fae04e754298915d --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/IndexerAzureApplicationTest.java @@ -0,0 +1,16 @@ +package org.opengroup.osdu.indexer.azure; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; + +import static org.junit.jupiter.api.Assertions.*; + +@RunWith(MockitoJUnitRunner.class) +public class IndexerAzureApplicationTest { + + @Test + public void shouldReturn_notNullInstance_when_creatingNewObject() { + assertNotNull(new IndexerAzureApplication()); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/EntitlementsClientFactoryTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/EntitlementsClientFactoryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..22b3b071ddd3879c42fd7a9f58adfe50875f8d99 --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/EntitlementsClientFactoryTest.java @@ -0,0 +1,47 @@ +package org.opengroup.osdu.indexer.azure.di; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.entitlements.IEntitlementsFactory; +import org.opengroup.osdu.core.common.http.json.HttpResponseBodyMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.test.util.ReflectionTestUtils; +import static org.junit.jupiter.api.Assertions.*; + +@RunWith(MockitoJUnitRunner.class) +public class EntitlementsClientFactoryTest { + + private static String authorizeApi = "authorizeApi"; + private static String authorizeApiKey = "authorizeApiKey"; + + @Mock + private HttpResponseBodyMapper mapper; + + @InjectMocks + public EntitlementsClientFactory sut; + + @BeforeEach + public void setUp() { + MockitoAnnotations.openMocks(EntitlementsClientFactoryTest.this); + ReflectionTestUtils.setField(sut, authorizeApi, authorizeApi); + ReflectionTestUtils.setField(sut, authorizeApiKey, authorizeApiKey); + } + + @Test + public void shouldReturn_notNull_EntitlementFactory_when_createInstance_isCalled() throws Exception{ + IEntitlementsFactory entitlementFactory = sut.createInstance(); + assertNotNull(entitlementFactory); + } + + @Test + public void shouldReturn_IEntitlementFactoryClass_when_getObjectType_isCalled() { + Class<?> responseClass = sut.getObjectType(); + assertEquals(responseClass, IEntitlementsFactory.class); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/RedisConfigTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/RedisConfigTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c7b56ccf4a20c8da1ac253cc3c6a2be62961118e --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/RedisConfigTest.java @@ -0,0 +1,59 @@ +package org.opengroup.osdu.indexer.azure.di; + +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.springframework.beans.factory.annotation.Value; +import static org.junit.jupiter.api.Assertions.*; + +public class RedisConfigTest { + @Spy + @Value("5000") + private int port; + + @Mock + @Value("4000") + public int indexRedisTtl; + + @Mock + @Value("3000") + public int jwtTtl; + + @Mock + @Value("2000") + public int schemaTtl; + + @InjectMocks + public RedisConfig sut = new RedisConfig(); + + public void setup() + { + MockitoAnnotations.openMocks(RedisConfigTest.this); + } + + @Test + public void shouldReturnPort_whenGetRedisPortCalled() { + int port_val = sut.getRedisPort(); + assertEquals(port_val, port); + } + + @Test + public void shouldReturnSetValue_when_GetIndexRedisTtl_isCalled() { + int indexRedisTtl_val = sut.getIndexRedisTtl(); + assertEquals(indexRedisTtl_val, indexRedisTtl); + } + + @Test + public void shouldReturnSetValue_when_GetJwtRedisTtl_isCalled() { + int jwtTtl_val = sut.getJwtRedisTtl(); + assertEquals(jwtTtl_val, jwtTtl); + } + + @Test + public void shouldReturnSetValue_when_GetSchemaRedisTtl_isCalled() { + int schemaTtl_val = sut.getSchemaRedisTtl(); + assertEquals(schemaTtl_val, schemaTtl); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/TenantInfoServiceTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/TenantInfoServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..047c1d401d65f53a011ffdfbc9c5a10ea76cfcc3 --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/di/TenantInfoServiceTest.java @@ -0,0 +1,57 @@ +package org.opengroup.osdu.indexer.azure.di; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; +import static reactor.core.publisher.Mono.when; + +@RunWith(MockitoJUnitRunner.class) +public class TenantInfoServiceTest { + + @Mock + private ITenantFactory tenantFactory; + + @Mock + private DpsHeaders headers; + + @InjectMocks + TenantInfoService sut; + + @BeforeEach + public void setUp() { + MockitoAnnotations.openMocks(TenantInfoServiceTest.this); + } + + @Test + public void shouldReturnSetValue_when_getTenantInfo_isCalled() { + TenantInfo tenantInfo = new TenantInfo(); + Mockito.when(headers.getPartitionId()).thenReturn("opendes"); + Mockito.when(tenantFactory.getTenantInfo("opendes")).thenReturn(tenantInfo); + + TenantInfo tenantInfoExpected = sut.getTenantInfo(); + + assertEquals(tenantInfo, tenantInfoExpected); + } + + @Test + public void shouldReturnSetList_when_getAllTenantInfos_isCalled() { + List<TenantInfo> tenantInfoArrayList = new ArrayList<>(); + Mockito.when(tenantFactory.listTenantInfo()).thenReturn(tenantInfoArrayList); + + List<TenantInfo> tenantInfoArrayListExpected = sut.getAllTenantInfos(); + + assertEquals(tenantInfoArrayList, tenantInfoArrayListExpected); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/publish/PublisherImplTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/publish/PublisherImplTest.java new file mode 100644 index 0000000000000000000000000000000000000000..565b99dc8cb70b8ceaebe695ef1600954d5ed325 --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/publish/PublisherImplTest.java @@ -0,0 +1,77 @@ +package org.opengroup.osdu.indexer.azure.publish; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.Test; +import org.junit.platform.commons.util.ReflectionUtils; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.azure.servicebus.ITopicClientFactory; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.indexer.JobStatus; +import org.springframework.test.util.ReflectionTestUtils; +import javax.inject.Inject; +import javax.inject.Named; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class PublisherImplTest { + + private static String serviceBusTopicField = "serviceBusTopic"; + private static String serviceBusTopicValue = "recordChangeTopic"; + private static String publishToIndexingProgressTopicField = "publishToIndexingProgressTopic"; + private static Boolean publishToIndexingProgressTopicValue = true; + private static String partitionId = "opendes"; + + @Mock + public ITopicClientFactory topicClientFactory; + + @Mock + private JaxRsDpsLog logger; + + @Mock + private DpsHeaders dpsHeaders; + + @Mock + private JobStatus jobStatus; + + @InjectMocks + public PublisherImpl sut; + + @Test + public void should_invoke_getPartitionIdOfdpsHeaders_when_publishStatusChangedTagsToTopic_isCalled() throws Exception { + ReflectionTestUtils.setField(sut,serviceBusTopicField,serviceBusTopicValue); + ReflectionTestUtils.setField(sut,publishToIndexingProgressTopicField,publishToIndexingProgressTopicValue); + when(dpsHeaders.getPartitionId()).thenReturn(partitionId); + + sut.publishStatusChangedTagsToTopic(dpsHeaders, jobStatus); + + verify(dpsHeaders, times(3)).getPartitionId(); + } + + @Test + public void should_invoke_getAccountIdOfDpsHeaders_when_publishStatusChangedTagsToTopic_isCalledWithGetPartitionIdReturningEmptyString() throws Exception { + ReflectionTestUtils.setField(sut,serviceBusTopicField,serviceBusTopicValue); + ReflectionTestUtils.setField(sut,publishToIndexingProgressTopicField,publishToIndexingProgressTopicValue); + when(dpsHeaders.getPartitionId()).thenReturn(""); + + sut.publishStatusChangedTagsToTopic(dpsHeaders, jobStatus); + + verify(dpsHeaders, times(1)).getAccountId(); + } + + @Test + public void should_invoke_getClientOftopicClientFactory_when_publishStatusChangedTagsToTopic_isCalled() throws Exception { + ReflectionTestUtils.setField(sut,serviceBusTopicField,serviceBusTopicValue); + ReflectionTestUtils.setField(sut,publishToIndexingProgressTopicField,publishToIndexingProgressTopicValue); + when(dpsHeaders.getPartitionId()).thenReturn(partitionId); + + sut.publishStatusChangedTagsToTopic(dpsHeaders, jobStatus); + + verify(topicClientFactory, times(1)).getClient(partitionId, serviceBusTopicValue); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/RetryPolicyTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/RetryPolicyTest.java index cb891b20be7bd68190258f643cdcb64588976116..e130e5fa5f1f68326f4c9c37c9f3a5b6640da3db 100644 --- a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/RetryPolicyTest.java +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/RetryPolicyTest.java @@ -15,7 +15,6 @@ package org.opengroup.osdu.indexer.azure.service; import io.github.resilience4j.retry.RetryConfig; - import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -25,9 +24,7 @@ import org.opengroup.osdu.core.common.http.FetchServiceHttpRequest; import org.opengroup.osdu.core.common.http.UrlFetchServiceImpl; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.HttpResponse; - import java.util.function.Predicate; - import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -128,7 +125,6 @@ public class RetryPolicyTest { @Mock private JaxRsDpsLog logger; - @Test public void retry_should_be_true_for_jsonResponseWithNotFound() { RetryConfig config = this.retryPolicy.retryConfig(response -> this.retryPolicy.batchRetryPolicy(response)); @@ -160,4 +156,71 @@ public class RetryPolicyTest { assertFalse(value); } + @Test + public void shouldReturnFalse_when_emptyResponse_for_schemaRetryPolicy() + { + HttpResponse response=null; + + Boolean value=retryPolicy.schemaRetryPolicy(response); + + assertFalse(value); + } + + @Test + public void shouldReturnFalse_when_ResponseCode404_for_schemaRetryPolicy() + { + HttpResponse response=new HttpResponse(); + response.setBody(JSON_RESPONSE1_WITHOUT_NOT_FOUND); + response.setResponseCode(404); + + Boolean value=retryPolicy.schemaRetryPolicy(response); + + assertFalse(value); + } + + @Test + public void shouldReturnTrue_when_ResponseCode505_for_schemaRetryPolicy() + { + HttpResponse response=new HttpResponse(); + response.setBody(JSON_RESPONSE1_WITHOUT_NOT_FOUND); + response.setResponseCode(505); + + Boolean value=retryPolicy.schemaRetryPolicy(response); + + assertTrue(value); + } + + @Test + public void shouldReturnFalse_when_ResponseCode200_for_schemaRetryPolicy() + { + HttpResponse response=new HttpResponse(); + response.setBody(JSON_RESPONSE1_WITHOUT_NOT_FOUND); + response.setResponseCode(200); + + Boolean value=retryPolicy.schemaRetryPolicy(response); + + assertFalse(value); + } + + @Test + public void shouldReturnFalse_when_emptyResponse_for_defaultRetryPolicy() + { + HttpResponse response=null; + + Boolean value=retryPolicy.defaultRetryPolicy(response); + + assertFalse(value); + } + + @Test + public void shouldReturnTrue_when_defaultResponse_for_defaultRetryPolicy() + { + HttpResponse response=new HttpResponse(); + response.setBody(JSON_RESPONSE1_WITHOUT_NOT_FOUND); + response.setResponseCode(504); + + Boolean value=retryPolicy.defaultRetryPolicy(response); + + assertTrue(value); + } } diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzureTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzureTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e1333d34f6cb7e1d3bc5ede5a642ecb8680d930c --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzureTest.java @@ -0,0 +1,158 @@ +package org.opengroup.osdu.indexer.azure.util; + +import com.microsoft.azure.servicebus.TopicClient; +import com.microsoft.azure.servicebus.primitives.ServiceBusException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.Test; +import org.mockito.Spy; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.azure.servicebus.ITopicClientFactory; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.indexer.RecordQueryResponse; +import org.opengroup.osdu.core.common.model.indexer.RecordReindexRequest; +import org.opengroup.osdu.core.common.model.search.RecordChangedMessages; +import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; +import org.opengroup.osdu.indexer.service.StorageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.util.ReflectionTestUtils; +import javax.inject.Inject; +import javax.inject.Named; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; +import static org.opengroup.osdu.core.common.model.http.DpsHeaders.AUTHORIZATION; + +@RunWith(MockitoJUnitRunner.class) +public class IndexerQueueTaskBuilderAzureTest { + + private String payload="{payload : value }"; + private static String partitionId = "opendes"; + private static String correlationId = "correlationId"; + private static String serviceBusReindexTopicNameField = "serviceBusReindexTopicName"; + private static String serviceBusReindexTopicNameValue = "recordChangeTopic"; + private static String authorisedHeader = "Bearer opendes"; + + @Spy + private ITopicClientFactory topicClientFactory; + + @Mock + private IndexerConfigurationProperties configurationProperties; + + @Mock + private JaxRsDpsLog logger; + + @Mock + DpsHeaders dpsHeaders; + + @Mock + RequestInfoImpl requestInfo; + + @Mock + StorageService storageService; + + @InjectMocks + IndexerQueueTaskBuilderAzure sut; + + @Test + public void createWorkerTask_should_invoke_correctMethods() throws ServiceBusException, InterruptedException, NoSuchFieldException { + when(dpsHeaders.getPartitionIdWithFallbackToAccountId()).thenReturn(partitionId); + when(dpsHeaders.getPartitionId()).thenReturn(partitionId); + when(dpsHeaders.getCorrelationId()).thenReturn(correlationId); + ReflectionTestUtils.setField(sut, serviceBusReindexTopicNameField, serviceBusReindexTopicNameValue); + + sut.createWorkerTask(payload, dpsHeaders); + + verify(dpsHeaders, times(4)).getPartitionIdWithFallbackToAccountId(); + verify(dpsHeaders, times(2)).getCorrelationId(); + verify(dpsHeaders, times(1)).addCorrelationIdIfMissing(); + verify(topicClientFactory, times(1)).getClient(partitionId, serviceBusReindexTopicNameValue); + } + + @Test + public void createWorkerTaskWithCountDown_should_invoke_correctMethods() throws ServiceBusException, InterruptedException, NoSuchFieldException { + Long milliseconds=8000L; + when(dpsHeaders.getPartitionIdWithFallbackToAccountId()).thenReturn(partitionId); + when(dpsHeaders.getPartitionId()).thenReturn(partitionId); + when(dpsHeaders.getCorrelationId()).thenReturn(correlationId); + ReflectionTestUtils.setField(sut, serviceBusReindexTopicNameField, serviceBusReindexTopicNameValue); + + sut.createWorkerTask(payload, milliseconds, dpsHeaders); + + verify(dpsHeaders, times(2)).addCorrelationIdIfMissing(); + verify(dpsHeaders, times(4)).getPartitionIdWithFallbackToAccountId(); + verify(dpsHeaders, times(2)).getCorrelationId(); + verify(topicClientFactory, times(1)).getClient(partitionId, serviceBusReindexTopicNameValue); + } + + @Test(expected = AppException.class) + public void createReIndexTask_InvalidParameter_ShouldThrowException() + { + sut.createReIndexTask(payload,dpsHeaders); + } + + @Test + public void createReIndexTaskWithEmptyStorageResponse_should_invoke_correctMethods() throws ServiceBusException, InterruptedException, NoSuchFieldException, URISyntaxException { + Long milliseconds = 8000L; + RecordQueryResponse recordQueryResponse = new RecordQueryResponse(); + when(requestInfo.checkOrGetAuthorizationHeader()).thenReturn(authorisedHeader); + when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); + ReflectionTestUtils.setField(sut, serviceBusReindexTopicNameField, serviceBusReindexTopicNameValue); + + sut.createReIndexTask(payload, milliseconds, dpsHeaders); + + verify(requestInfo,times(1)).checkOrGetAuthorizationHeader(); + verify(dpsHeaders, times(1)).put(AUTHORIZATION, authorisedHeader); + verify(storageService,times(1)).getRecordsByKind(any()); + verify(dpsHeaders, times(1)).addCorrelationIdIfMissing(); + } + + @Test + public void createReIndexTaskWithNonEmptyStorageResponse_should_invoke_correctMethods() throws ServiceBusException, InterruptedException, NoSuchFieldException, URISyntaxException { + Long milliseconds = 8000L; + RecordQueryResponse recordQueryResponse = new RecordQueryResponse(); + List<String> res = Arrays.asList("r1","r2","r3"); + recordQueryResponse.setResults(res); + when(dpsHeaders.getPartitionIdWithFallbackToAccountId()).thenReturn(partitionId); + when(dpsHeaders.getCorrelationId()).thenReturn(correlationId); + when(dpsHeaders.getPartitionId()).thenReturn(partitionId); + when(requestInfo.checkOrGetAuthorizationHeader()).thenReturn(authorisedHeader); + when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); + ReflectionTestUtils.setField(sut, serviceBusReindexTopicNameField, serviceBusReindexTopicNameValue); + + sut.createReIndexTask(payload, milliseconds, dpsHeaders); + + verify(requestInfo,times(1)).checkOrGetAuthorizationHeader(); + verify(dpsHeaders, times(1)).put(AUTHORIZATION, authorisedHeader); + verify(storageService,times(1)).getRecordsByKind(any()); + verify(dpsHeaders, times(6)).getPartitionIdWithFallbackToAccountId(); + verify(dpsHeaders, times(3)).getCorrelationId(); + verify(dpsHeaders, times(2)).addCorrelationIdIfMissing(); + verify(topicClientFactory, times(1)).getClient(partitionId, serviceBusReindexTopicNameValue); + } + + @Test + public void createReIndexTaskWithCountdown_should_invoke_correctMethods() throws ServiceBusException, InterruptedException, NoSuchFieldException, URISyntaxException { + Long milliseconds = 8000L; + RecordQueryResponse recordQueryResponse = new RecordQueryResponse(); + when(requestInfo.checkOrGetAuthorizationHeader()).thenReturn(authorisedHeader); + when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); + ReflectionTestUtils.setField(sut, serviceBusReindexTopicNameField, serviceBusReindexTopicNameValue); + + sut.createReIndexTask(payload, milliseconds, dpsHeaders); + + verify(requestInfo,times(1)).checkOrGetAuthorizationHeader(); + verify(dpsHeaders, times(1)).put(AUTHORIZATION, authorisedHeader); + verify(storageService,times(1)).getRecordsByKind(any()); + verify(dpsHeaders, times(1)).addCorrelationIdIfMissing(); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/RequestInfoImplTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/RequestInfoImplTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8b2c66becc92c96dcd12825a5347af9cc39acdfa --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/RequestInfoImplTest.java @@ -0,0 +1,145 @@ +package org.opengroup.osdu.indexer.azure.util; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.*; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient; +import org.springframework.test.util.ReflectionTestUtils; +import java.util.*; +import static junit.framework.TestCase.*; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.powermock.api.mockito.PowerMockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class RequestInfoImplTest { + + private static String deploymentEnvironmentField = "DEPLOYMENT_ENVIRONMENT"; + private static String deploymentEnvironmentValue = "LOCAL"; + private static String deploymentEnvironmentValueCloud = "CLOUD"; + private static String tenant = "tenant1"; + private static String bearerToken = "bearerToken"; + private static String expectedToken = "Bearer bearerToken"; + private static String partitionId = "opendes"; + private static String owner = "owner"; + + @Mock + private DpsHeaders standardHeaders; + + @Mock + private IServiceAccountJwtClient serviceAccountJwtClient; + + @Mock + private TenantInfo tenantInfo; + + @InjectMocks + public RequestInfoImpl sut; + + @Before + public void setup() { + MockitoAnnotations.openMocks(RequestInfoImplTest.this); + ReflectionTestUtils.setField(sut, deploymentEnvironmentField, deploymentEnvironmentValue); + + } + + @Test + public void shouldReturnStandardHeaders_when_getHeaders_isCalled() { + DpsHeaders headers = sut.getHeaders(); + assertEquals(headers, standardHeaders); + } + + @Test + public void shouldReturnSamePartitionIdReturnedByStandardHeaders_when_getPartitionId_isCalled() { + when(standardHeaders.getPartitionId()).thenReturn(partitionId); + + String expectedPartitionId = sut.getPartitionId(); + + verify(standardHeaders,times(1)).getPartitionId(); + assertEquals(partitionId, expectedPartitionId); + } + + @Test + public void shouldReturnSameHeadersReturnedByStandardHeaders_when_getHeadersMap_isCalled() { + Map<String, String> headers = new HashMap(); + when(standardHeaders.getHeaders()).thenReturn(headers); + + Map<String, String> headersMap = sut.getHeadersMap(); + + verify(standardHeaders,times(1)).getHeaders(); + assertEquals(headers, headersMap); + } + + @Test + public void should_invoke_getAuthorizationMethod_when_getHeadersWithDwdAuthZ_isCalled() + { + when(standardHeaders.getAuthorization()).thenReturn(owner); + + DpsHeaders dpsHeaders=sut.getHeadersWithDwdAuthZ(); + + verify(standardHeaders,times(1)).getAuthorization(); + assertEquals(standardHeaders,dpsHeaders); + } + + @Test + public void should_invoke_getAuthorizationMethod_when_getHeadersMapWithDwdAuthZ_isCalled() + { + when(standardHeaders.getAuthorization()).thenReturn(owner); + + Map<String,String> dpsHeadersMap=sut.getHeadersMapWithDwdAuthZ(); + + verify(standardHeaders,times(1)).getAuthorization(); + verify(standardHeaders,times(1)).getHeaders(); + assertEquals(standardHeaders.getHeaders(),dpsHeadersMap); + } + + @Test + public void shouldReturnFalse_when_isCronRequest() { + Boolean cronRequest = sut.isCronRequest(); + assertFalse(cronRequest); + } + + @Test + public void shouldReturnFalse_when_isTaskQueueRequest() { + Boolean taskQueueRequest = sut.isTaskQueueRequest(); + assertFalse(taskQueueRequest); + } + + @Test + public void shouldInvoke_getAuthorization_andReturnAuthHeader_when_checkOrGetAuthorizationHeader_withAuth_isCalled() + { + when(standardHeaders.getAuthorization()).thenReturn(owner); + + String authHeader=sut.checkOrGetAuthorizationHeader(); + + verify(standardHeaders,times(1)).getAuthorization(); + assertEquals(authHeader,owner); + } + + @Test(expected = AppException.class) + public void shouldThrowException_checkOrGetAuthorizationHeader_isCalled_with_nullAsAuthHeader() + { +// Authorization token cannot be empty, hence it is expected to throw an App exception. + when(standardHeaders.getAuthorization()).thenReturn(null); + String authHeader=sut.checkOrGetAuthorizationHeader(); + } + + @Test + public void checkOrGetAuthorizationHeader_withCloud() + { + ReflectionTestUtils.setField(sut,deploymentEnvironmentField,deploymentEnvironmentValueCloud); + when(tenantInfo.getName()).thenReturn(tenant); + when(serviceAccountJwtClient.getIdToken(tenant)).thenReturn(bearerToken); + + String bearerToken=sut.checkOrGetAuthorizationHeader(); + + verify(tenantInfo,times(1)).getName(); + verify(serviceAccountJwtClient,times(1)).getIdToken(tenant); + assertEquals(bearerToken, expectedToken); + } +} diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/ServiceAccountJwtClientImplTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/ServiceAccountJwtClientImplTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f55c96dc2a34306fc6e0d4beb4cbed79513263f6 --- /dev/null +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/util/ServiceAccountJwtClientImplTest.java @@ -0,0 +1,68 @@ +package org.opengroup.osdu.indexer.azure.util; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.*; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.azure.util.AzureServicePrincipleTokenService; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.test.context.junit4.SpringRunner; +import javax.inject.Inject; +import java.util.*; +import static junit.framework.TestCase.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class ServiceAccountJwtClientImplTest { + + private String partitionId="opendes"; + private static String authorizationToken = "authorizationToken"; + + @Mock + private ITenantFactory tenantInfoServiceProvider; + + @Mock + private DpsHeaders dpsHeaders; + + @Mock + private JaxRsDpsLog log; + + @Mock + private AzureServicePrincipleTokenService tokenService; + + @InjectMocks + ServiceAccountJwtClientImpl sut; + + @Test + public void should_invoke_methodsWithRightArguments_andReturnAuthToken_when_getIdToken_isCalled() { + TenantInfo tenant=new TenantInfo(); + when(tenantInfoServiceProvider.getTenantInfo(partitionId)).thenReturn(tenant); + when(tokenService.getAuthorizationToken()).thenReturn(authorizationToken); + + String authToken=sut.getIdToken(partitionId); + + verify(tenantInfoServiceProvider,times(1)).getTenantInfo(partitionId); + verify(tokenService,times(1)).getAuthorizationToken(); + verify(dpsHeaders,times(1)).put(DpsHeaders.USER_EMAIL, tenant.getServiceAccount()); + assertEquals(authorizationToken, authToken); + } + + @Test(expected = AppException.class) + public void should_throw_appException_when_getIdToken_isCalled_with_tenantNull() { + when(tenantInfoServiceProvider.getTenantInfo(partitionId)).thenReturn(null); + + sut.getIdToken(partitionId); + + Assert.fail("Invalid tenant Name from azure"); + } +} diff --git a/provider/indexer-gcp/README.md b/provider/indexer-gc/README.md similarity index 81% rename from provider/indexer-gcp/README.md rename to provider/indexer-gc/README.md index d798d59838036271c62de2491e84453968f536c4..40f0a3b857e18748efcf064cb99357ff2ddc97fb 100644 --- a/provider/indexer-gcp/README.md +++ b/provider/indexer-gc/README.md @@ -1,7 +1,9 @@ # Indexer Service -os-indexer-gcp is a [Spring Boot](https://spring.io/projects/spring-boot) service that is responsible for indexing Records that enable the `os-search` service to execute OSDU R2 domain searches against Elasticsearch. + +Indexer-gc is a [Spring Boot](https://spring.io/projects/spring-boot) service that is responsible for indexing Records that enable the `search` service to execute OSDU R2 domain searches against Elasticsearch. ## Table of Contents <a name="TOC"></a> + * [Getting started](#Getting-started) * [Mappers](#Mappers) * [Settings and Configuration](#Settings-and-Configuration) @@ -12,15 +14,20 @@ os-indexer-gcp is a [Spring Boot](https://spring.io/projects/spring-boot) servic * [Licence](#License) ## Getting Started + These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. # Configuration ## Service Configuration -### Anthos: -[Anthos service configuration ](docs/anthos/README.md) -### GCP: -[Gcp service configuration ](docs/gcp/README.md) + +### Anthos + +[Anthos service configuration](docs/anthos/README.md) + +### Google Cloud + +[Google Cloud service configuration](docs/gc/README.md) ## Mappers @@ -28,32 +35,40 @@ This is a universal solution created using EPAM OQM mappers technology. It allow implementations of message brokers. For more information about mappers: -- [OQM Readme](https://community.opengroup.org/osdu/platform/system/lib/cloud/gcp/oqm/-/blob/master/README.md) +* [OQM Readme](https://community.opengroup.org/osdu/platform/system/lib/cloud/gcp/oqm/-/blob/master/README.md) ### Limitations of the current version In the current version, the mappers are equipped with several drivers to the stores and the message broker: -- OQM (mapper to message brokers): Google PubSub; RabbitMQ +* OQM (mapper to message brokers): Google PubSub; RabbitMQ ## Settings and Configuration ### Prerequisites + 1. Mandatory - - JDK 8 - - Lombok 1.16 or later - - Maven + +* JDK 8 +* Lombok 1.16 or later +* Maven + 2. For Google Cloud only - - GCloud SDK with java (latest version) -### Anthos Service Configuration: -[Anthos service configuration ](docs/anthos/README.md) -### GCP Service Configuration: -[Gcp service configuration ](docs/gcp/README.md) +* GCloud SDK with java (latest version) + +### Anthos Service Configuration + +[Anthos service configuration](docs/anthos/README.md) + +### Google Cloud Service Configuration + +[Google Cloud service configuration](docs/gc/README.md) ## Run service ### Run Locally + Check that maven is installed: ```bash @@ -95,6 +110,7 @@ $ cat ~/.m2/settings.xml ```bash gcloud components update ``` + * Set Google Project Id: ```bash @@ -129,10 +145,11 @@ mvn clean install -DskipTests After configuring your environment as specified above, you can follow these steps to build and run the application. These steps should be invoked from the *repository root.* ```bash -cd provider/indexer-gcp/ && mvn spring-boot:run +cd provider/indexer-gc && mvn spring-boot:run ``` ## Testing + Navigate to indexer service's root folder and run all the tests: ```bash @@ -140,33 +157,39 @@ Navigate to indexer service's root folder and run all the tests: $ (cd testing/indexer-test-core/ && mvn clean install) ``` -### Running E2E Tests +### Running E2E Tests This section describes how to run cloud OSDU E2E tests. -### Anthos test configuration: -[Anthos service configuration ](docs/anthos/README.md) -### GCP test configuration: -[Gcp service configuration ](docs/gcp/README.md) +### Anthos test configuration + +[Anthos service configuration](docs/anthos/README.md) + +### Google Cloud test configuration + +[Google Cloud service configuration](docs/gc/README.md) ## Deployment * Data-Lake Indexer Google Cloud Endpoints on App Engine Flex environment * Edit the app.yaml * Open the [app.yaml](indexer/src/main/appengine/app.yaml) file in editor, and replace the YOUR-PROJECT-ID `GOOGLE_CLOUD_PROJECT` line with Google Cloud Platform project Id. Also update `AUTHORIZE_API`, `CRON_JOB_IP`, `LEGAL_HOSTNAME`, `REGION` and `SECURITY_HTTPS_CERTIFICATE_TRUST` based on your deployment - + * Deploy + ```sh mvn appengine:deploy -pl org.opengroup.osdu.indexer:indexer -amd ``` * If you wish to deploy the search service without running tests + ```sh mvn appengine:deploy -pl org.opengroup.osdu.indexer:indexer -amd -DskipTests ``` or -* Google Documentation: https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-appengine + +* Google Documentation: <https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-appengine> #### Memory Store (Redis Instance) Setup @@ -179,23 +202,25 @@ The Redis instance must be created under the same region with the App Engine app ``` ## Entitlements groups + Storage service account should have entitlements groups listed below: -- service.entitlements.user -- users -- service.schema-service.viewers -- service.storage.admin -- service.search.admin +* service.entitlements.user +* users +* service.schema-service.viewers +* service.storage.admin +* service.search.admin ## Licence + Copyright © Google LLC Copyright © EPAM Systems - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/provider/indexer-gcp/cloudbuild/Dockerfile.cloudbuild b/provider/indexer-gc/cloudbuild/Dockerfile.cloudbuild similarity index 100% rename from provider/indexer-gcp/cloudbuild/Dockerfile.cloudbuild rename to provider/indexer-gc/cloudbuild/Dockerfile.cloudbuild diff --git a/provider/indexer-gcp/cloudbuild/cloudbuild.yaml b/provider/indexer-gc/cloudbuild/cloudbuild.yaml similarity index 51% rename from provider/indexer-gcp/cloudbuild/cloudbuild.yaml rename to provider/indexer-gc/cloudbuild/cloudbuild.yaml index 1d0c9ba890efb3b13d71d7517e9ce2951f56eb00..61563cdfab89df5b11a8244e9f14614472fc013e 100644 --- a/provider/indexer-gcp/cloudbuild/cloudbuild.yaml +++ b/provider/indexer-gc/cloudbuild/cloudbuild.yaml @@ -15,17 +15,22 @@ # limitations under the License. steps: - - name: 'gcr.io/cloud-builders/docker' - args: [ - 'build', - '--build-arg', 'PROVIDER_NAME=${_PROVIDER_NAME}', - '--build-arg', 'PORT=${_PORT}', - '-t', 'gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GCP_SERVICE}-${_PROVIDER_NAME}:${_SHORT_SHA}', - '-t', 'gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GCP_SERVICE}-${_PROVIDER_NAME}:latest', - '-f', 'provider/${_GCP_SERVICE}-${_PROVIDER_NAME}/cloudbuild/Dockerfile.cloudbuild', - '.' - ] + - name: "gcr.io/cloud-builders/docker" + args: + [ + "build", + "--build-arg", + "PROVIDER_NAME=${_PROVIDER_NAME}", + "--build-arg", + "PORT=${_PORT}", + "-t", + "gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GC_SERVICE}-${_PROVIDER_NAME}:${_SHORT_SHA}", + "-t", + "gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GC_SERVICE}-${_PROVIDER_NAME}:latest", + "-f", + "provider/${_GC_SERVICE}-${_PROVIDER_NAME}/cloudbuild/Dockerfile.cloudbuild", + ".", + ] images: - - 'gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GCP_SERVICE}-${_PROVIDER_NAME}' - + - "gcr.io/$PROJECT_ID/${_APPLICATION_NAME}/${_GC_SERVICE}-${_PROVIDER_NAME}" diff --git a/provider/indexer-gc/docs/anthos/README.md b/provider/indexer-gc/docs/anthos/README.md new file mode 100644 index 0000000000000000000000000000000000000000..70276024394e1452e3380c89cefc0e2603ea66df --- /dev/null +++ b/provider/indexer-gc/docs/anthos/README.md @@ -0,0 +1,256 @@ +## Service Configuration for Anthos + +## Environment variables: + +Define the following environment variables. + +Must have: + +| name | value | description | sensitive? | source | +|----------------------------------------------|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------| +| `SPRING_PROFILES_ACTIVE` | ex `anthos` | Spring profile that activate default configuration for Google Cloud environment | false | - | +| `OPENID_PROVIDER_CLIENT_ID` | `*****` | Client id that represents this service and serves to request tokens, example `workload-identity-legal` | yes | - | +| `OPENID_PROVIDER_CLIENT_SECRET` | `*****` | This client secret that serves to request tokens | yes | - | +| `OPENID_PROVIDER_URL` | `https://keycloack.com/auth/realms/master` | URL of OpenID Connect provider, it will be used as `<OpenID URL> + /.well-known/openid-configuration` to auto configure endpoint for token request | no | - | +| `<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>` | ex `user` | Elasticsearch user, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | yes | - | +| `<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>` | ex `password` | Elasticsearch password, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | false | - | + +Defined in default application property file but possible to override: + +| name | value | description | sensitive? | source | +|------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------|------------|-------------------------------------| +| `LOG_PREFIX` | `service` | Logging prefix | no | - | +| `LOG_LEVEL` | `****` | Logging level | no | - | +| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | +| `REDIS_SEARCH_HOST` | ex `127.0.0.1` | Redis host | no | | +| `REDIS_SEARCH_PORT` | ex `6379` | Redis host port | no | | +| `REDIS_SEARCH_PASSWORD` | ex `*****` | Redis host password | yes | | +| `REDIS_SEARCH_WITH_SSL` | ex `true` or `false` | Redis host ssl config | no | | +| `REDIS_SEARCH_EXPIRATION` | ex `30` | Redis cache expiration in seconds | no | | +| `PARTITION_HOST` | ex `https://partition.com` | Partition host | no | output of infrastructure deployment | +| `ENTITLEMENTS_HOST` | ex `https://entitlements.com` | Entitlements host | no | output of infrastructure deployment | +| `STORAGE_HOST` | ex `https://storage.com` | Storage host | no | output of infrastructure deployment | +| `SCHEMA_BASE_HOST` | ex `https://schema.com` | Schema service host | no | output of infrastructure deployment | + +These variables define service behavior, and are used to switch between `anthos` or `gcp` environments, their overriding and usage in mixed mode was not tested. +Usage of spring profiles is preferred. + +| name | value | description | sensitive? | source | +|--------------------------|------------------------|---------------------------------------------------------------------------------------------------------------------------|------------|--------| +| `PARTITION_AUTH_ENABLED` | ex `true` or `false` | Disable or enable auth token provisioning for requests to Partition service | no | - | +| `OQMDRIVER` | `rabbitmq` or `pubsub` | Oqm driver mode that defines which message broker will be used | no | - | +| `SERVICE_TOKEN_PROVIDER` | `GCP` or `OPENID` | Service account token provider, `GCP` means use Google service account `OPEIND` means use OpenId provider like `Keycloak` | no | - | +| `RABBITMQ_RETRY_DELAY` | ex `20000` | Message retry interval after unsuccessful processing | no | - | +| `RABBITMQ_RETRY_LIMIT` | ex `5` | Number of retries to send a message after unsuccessful processing | no | - | + +### Properties set in Partition service: + +Note that properties can be set in Partition as `sensitive` in that case in property `value` should be present not value itself, but ENV variable name. +This variable should be present in environment of service that need that variable. + +Example: +``` + "elasticsearch.port": { + "sensitive": false, <- value not sensitive + "value": "9243" <- will be used as is. + }, + "elasticsearch.password": { + "sensitive": true, <- value is sensitive + "value": "ELASTIC_SEARCH_PASSWORD_OSDU" <- service consumer should have env variable ELASTIC_SEARCH_PASSWORD_OSDU with elastic search password + } +``` + + +## Elasticsearch configuration + +**prefix:** `elasticsearch` + +It can be overridden by: + +- through the Spring Boot property `elastic-search-properties-prefix` +- environment variable `ELASTIC_SEARCH_PROPERTIES_PREFIX` + +**Propertyset:** + +| Property | Description | +|------------------------|-------------| +| elasticsearch.host | server URL | +| elasticsearch.port | server port | +| elasticsearch.user | username | +| elasticsearch.password | password | + +<details><summary>Example of a definition for a single tenant</summary></details> + +``` + +curl -L -X PATCH 'http://partition.com/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ + "properties": { + "elasticsearch.host": { + "sensitive": false, + "value": "elastic.us-central1.gc.cloud.es.io" + }, + "elasticsearch.port": { + "sensitive": false, + "value": "9243" + }, + "elasticsearch.user": { + "sensitive": true, + "value": "<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) + }, + "elasticsearch.password": { + "sensitive": true, + "value": "<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) + } + } +}' + +``` + +### For OQM RabbitMQ + +**prefix:** `oqm.rabbitmq` +It can be overridden by: + +- through the Spring Boot property `oqm.rabbitmq.partition-properties-prefix` +- environment variable `OQM_RABBITMQ_PARTITION_PROPERTIES_PREFIX`` + +**Propertyset** (for two types of connection: messaging and admin operations): + +| Property | Description | +|-----------------------------|------------------------| +| oqm.rabbitmq.amqp.host | messaging hostnameorIP | +| oqm.rabbitmq.amqp.port | - port | +| oqm.rabbitmq.amqp.path | - path | +| oqm.rabbitmq.amqp.username | - username | +| oqm.rabbitmq.amqp.password | - password | +| oqm.rabbitmq.admin.schema | admin host schema | +| oqm.rabbitmq.admin.host | - host name | +| oqm.rabbitmq.admin.port | - port | +| oqm.rabbitmq.admin.path | - path | +| oqm.rabbitmq.admin.username | - username | +| oqm.rabbitmq.admin.password | - password | + +<details><summary>Example of a single tenant definition</summary> + +``` + +curl -L -X PATCH 'https://dev.osdu.club/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ + "properties": { + "oqm.rabbitmq.amqp.host": { + "sensitive": false, + "value": "localhost" + }, + "oqm.rabbitmq.amqp.port": { + "sensitive": false, + "value": "5672" + }, + "oqm.rabbitmq.amqp.path": { + "sensitive": false, + "value": "" + }, + "oqm.rabbitmq.amqp.username": { + "sensitive": false, + "value": "guest" + }, + "oqm.rabbitmq.amqp.password": { + "sensitive": true, + "value": "guest" + }, + + "oqm.rabbitmq.admin.schema": { + "sensitive": false, + "value": "http" + }, + "oqm.rabbitmq.admin.host": { + "sensitive": false, + "value": "localhost" + }, + "oqm.rabbitmq.admin.port": { + "sensitive": false, + "value": "9002" + }, + "oqm.rabbitmq.admin.path": { + "sensitive": false, + "value": "/api" + }, + "oqm.rabbitmq.admin.username": { + "sensitive": false, + "value": "guest" + }, + "oqm.rabbitmq.admin.password": { + "sensitive": true, + "value": "guest" + } + } +}' + +``` + +</details> + +#### Exchanges and queues configuration + +RabbitMq should have exchanges and queues with names and configs: + +| EXCHANGE NAME | EXCHANGE CONFIG | Target queue name | Target queue config | +|----------------------------------|-----------------------------------------------------------------------------|---------------------------|----------------------------------------------------------------------| +| indexing-progress | `Type fanout` <br/>`durable: true` | (Consumer not implemented) | (Consumer not implemented) | +| records-changed | `Type fanout` <br/>`durable: true` | indexer-records-changed | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | +| indexer-records-changed-exchange | `Type x-delayed-message` <br/>`durable: true`<br/>`x-delayed-type: fanout` | indexer-records-changed | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | +| reprocess | `Type fanout` <br/>`durable: true` | indexer-reprocess | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | +| indexer-reprocess-exchange | `Type x-delayed-message` <br/>`durable: true`<br/>`x-delayed-type: fanout` | indexer-reprocess | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | +| schema-changed | `Type fanout` <br/>`durable: true` | indexer-schema-changed | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | +| indexer-schema-changed-exchange | `Type x-delayed-message` <br/>`durable: true`<br/>`x-delayed-type: fanout` | indexer-schema-changed | `x-delivery-limit: 5`<br/>`x-queue-type: quorum`<br/>`durable: true` | + +## Keycloak configuration + +[Keycloak service accounts setup](https://www.keycloak.org/docs/latest/server_admin/#_service_accounts) + +Configure Clients. One Client per OSDU service. Set them “confidential”. + + + +Each Client has embedded Service Account (SA) option. Enable SAs for Clients, make “Authorization enabled”: + + + +Add `partition-and-entitlements` scope to `Default Client Scopes` and generate Keys. + +Give `client-id` and `client-secret` to services, which should be authorized within the platform. + +### Running E2E Tests + +You will need to have the following environment variables defined. + +| name | value | description | sensitive? | source | +|--------------------------------------|-----------------------------------------------------------------|---------------------------------------------------------------------------------------------------|-----------------------------------------|-------------------------------------| +| `ELASTIC_PASSWORD` | `********` | Password for Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_USER_NAME` | `********` | User name for Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_HOST` | ex `elastic.domain.com` | Host Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_PORT` | ex `9243` | Port Elasticsearch | yes | output of infrastructure deployment | +| `INDEXER_HOST` | ex `https://os-indexer-dot-opendes.appspot.com/api/indexer/v2/` | Indexer API endpoint | no | output of infrastructure deployment | +| `ENTITLEMENTS_DOMAIN` | ex `opendes-gcp.projects.com` | OSDU R2 to run tests under | no | - | +| `OTHER_RELEVANT_DATA_COUNTRIES` | ex `US` | valid legal tag with a other relevant data countries | no | - | +| `LEGAL_TAG` | ex `opendes-demo-legaltag` | valid legal tag with a other relevant data countries from `DEFAULT_OTHER_RELEVANT_DATA_COUNTRIES` | no | - | +| `DEFAULT_DATA_PARTITION_ID_TENANT1` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | +| `DEFAULT_DATA_PARTITION_ID_TENANT2` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | +| `SEARCH_HOST` | ex `http://localhost:8080/api/search/v2/` | Endpoint of search service | no | - | +| `STORAGE_HOST` | ex `http://os-storage-dot-opendes.appspot.com/api/storage/v2/` | Storage API endpoint | no | output of infrastructure deployment | +| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | +| `TEST_OPENID_PROVIDER_CLIENT_ID` | `********` | Client Id for `$INTEGRATION_TESTER` | yes | -- | +| `TEST_OPENID_PROVIDER_CLIENT_SECRET` | `********` | | Client secret for `$INTEGRATION_TESTER` | -- | +| `TEST_OPENID_PROVIDER_URL` | `https://keycloak.com/auth/realms/osdu` | OpenID provider url | yes | -- | + +**Entitlements configuration for integration accounts** + +| INTEGRATION_TESTER | NO_DATA_ACCESS_TESTER | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------| +| users<br/>users.datalake.ops<br/>service.storage.creator<br/>service.entitlements.user<br/>service.search.user<br/>service.search.admin<br/>data.test1<br/>data.integration.test<br/>users@{tenant1}@{domain}.com | | + +Execute following command to build code and run all the integration tests: + +```bash +# Note: this assumes that the environment variables for integration tests as outlined +# above are already exported in your environment. +$ (cd testing/indexer-test-anthos/ && mvn clean test) +``` diff --git a/provider/indexer-gcp/docs/anthos/pics/client.png b/provider/indexer-gc/docs/anthos/pics/client.png similarity index 100% rename from provider/indexer-gcp/docs/anthos/pics/client.png rename to provider/indexer-gc/docs/anthos/pics/client.png diff --git a/provider/indexer-gcp/docs/anthos/pics/rabbit.PNG b/provider/indexer-gc/docs/anthos/pics/rabbit.PNG similarity index 100% rename from provider/indexer-gcp/docs/anthos/pics/rabbit.PNG rename to provider/indexer-gc/docs/anthos/pics/rabbit.PNG diff --git a/provider/indexer-gcp/docs/anthos/pics/sa.png b/provider/indexer-gc/docs/anthos/pics/sa.png similarity index 100% rename from provider/indexer-gcp/docs/anthos/pics/sa.png rename to provider/indexer-gc/docs/anthos/pics/sa.png diff --git a/provider/indexer-gc/docs/gc/README.md b/provider/indexer-gc/docs/gc/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7c390dea4b1046123997f174c8f41165c90c53e4 --- /dev/null +++ b/provider/indexer-gc/docs/gc/README.md @@ -0,0 +1,190 @@ +## Service Configuration for Google Cloud + +## Environment variables + +Define the following environment variables. + +Must have: + +| name | value | description | sensitive? | source | +|----------------------------------------------|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|---------------------------------------------------| +| `SPRING_PROFILES_ACTIVE` | ex `gcp` | Spring profile that activate default configuration for Google Cloud environment | false | - | +| `<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>` | ex `user` | Elasticsearch user, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | yes | - | +| `<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>` | ex `password` | Elasticsearch password, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | false | - | + +Defined in default application property file but possible to override: + +| name | value | description | sensitive? | source | +|------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------|------------|--------------------------------------------------------------| +| `LOG_PREFIX` | `service` | Logging prefix | no | - | +| `LOG_LEVEL` | `****` | Logging level | no | - | +| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | +| `REDIS_SEARCH_HOST` | ex `127.0.0.1` | Redis host | no | | +| `REDIS_SEARCH_PORT` | ex `6379` | Redis host port | no | | +| `REDIS_SEARCH_PASSWORD` | ex `*****` | Redis host password | yes | | +| `REDIS_SEARCH_WITH_SSL` | ex `true` or `false` | Redis host ssl config | no | | +| `REDIS_SEARCH_EXPIRATION` | ex `30` | Redis cache expiration in seconds | no | | +| `PARTITION_HOST` | ex `https://partition.com` | Partition host | no | output of infrastructure deployment | +| `ENTITLEMENTS_HOST` | ex `https://entitlements.com` | Entitlements host | no | output of infrastructure deployment | +| `STORAGE_HOST` | ex `https://storage.com` | Storage host | no | output of infrastructure deployment | +| `INDEXER_QUEUE_HOST` | ex `http://indexer-queue/api/indexer-queue/v1/_dps/task-handlers/enqueue` | Indexer-Queue host endpoint used for reprocessing tasks | no | output of infrastructure deployment | +| `SCHEMA_BASE_HOST` | ex `https://schema.com` | Schema service host | no | output of infrastructure deployment | +| `GOOGLE_APPLICATION_CREDENTIALS` | ex `/path/to/directory/service-key.json` | Service account credentials, you only need this if running locally | yes | <https://console.cloud.google.com/iam-admin/serviceaccounts> | + +These variables define service behavior, and are used to switch between `Reference` or `Google Cloud` environments, their overriding and usage in mixed mode was not tested. +Usage of spring profiles is preferred. + +| name | value | description | sensitive? | source | +|--------------------------|------------------------|---------------------------------------------------------------------------------------------------------------------------|------------|--------| +| `PARTITION_AUTH_ENABLED` | ex `true` or `false` | Disable or enable auth token provisioning for requests to Partition service | no | - | +| `OQMDRIVER` | `rabbitmq` or `pubsub` | Oqm driver mode that defines which message broker will be used | no | - | +| `SERVICE_TOKEN_PROVIDER` | `GCP` or `OPENID` | Service account token provider, `GCP` means use Google service account `OPEIND` means use OpenId provider like `Keycloak` | no | - | + +## Pubsub configuration + +Pubsub should have topics and subscribers with names and configs: + +| TOPIC NAME | Subscription name | Subscription config | +|-----------------------------|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| indexing-progress | (Consumer not implemented) | (Consumer not implemented) | +| records-changed | indexer-records-changed | `Maximum delivery attempts: 10`<br/>`Retry policy: Retry after exponential backoff delay`<br/>`Minimum backoff duration: 0 seconds`<br/>`Maximum backoff duration: 30 seconds`<br/>`Grant forwarding permissions for dead letter` | +| records-changed-dead-letter | (Consumer not implemented) | (Consumer not implemented) | +| reprocess | indexer-reprocess | `Maximum delivery attempts: 5`<br/>`Retry policy: Retry after exponential backoff delay`<br/>`Minimum backoff duration: 10 seconds`<br/>`Maximum backoff duration: 600 seconds`<br/>`Grant forwarding permissions for dead letter` | +| reprocess-dead-letter | (Consumer not implemented) | (Consumer not implemented) | +| schema-changed | indexer-schema-changed | `Maximum delivery attempts: 5`<br/>`Retry policy: Retry after exponential backoff delay`<br/>`Minimum backoff duration: 10 seconds`<br/>`Maximum backoff duration: 600 seconds`<br/>`Grant forwarding permissions for dead letter` | +| schema-changed-dead-letter | (Consumer not implemented) | (Consumer not implemented) | + +### Additional throughput configuration for PubSub subscription consumer via Partition service + +It is possible, but not necessary to adjust consumer throughput via Partition service, there are 3 levels of consumers: + +*MIN* - for mildly consumers, defaults(streams = 1, threads = 2, outstanding elements = 20) +*MID* - for consumers with the average load, defaults(streams = 2, threads = 2, outstanding elements = 40) +*MAX* - for maximum loaded consumers, defaults(streams = 2, threads = 5, outstanding elements = 100) + +https://community.opengroup.org/osdu/platform/system/lib/cloud/gcp/oqm/-/blob/master/src/main/java/org/opengroup/osdu/core/gcp/oqm/driver/pubsub/config/PsThroughputConfiguration.java + +``` + "max.sub.parallel.streams": { + "sensitive": false, + "value": 2 + }, + "max.sub.thread.per.stream": { + "sensitive": false, + "value": 5 + }, + "max.sub.max.outstanding.elements": { + "sensitive": true, + "value": 100 + } +``` + + +### Properties set in Partition service + +Note that properties can be set in Partition as `sensitive` in that case in property `value` should be present not value itself, but ENV variable name. +This variable should be present in environment of service that need that variable. + +Example: + +``` + "elasticsearch.port": { + "sensitive": false, <- value not sensitive + "value": "9243" <- will be used as is. + }, + "elasticsearch.password": { + "sensitive": true, <- value is sensitive + "value": "ELASTIC_SEARCH_PASSWORD_OSDU" <- service consumer should have env variable ELASTIC_SEARCH_PASSWORD_OSDU with elastic search password + } +``` + +There is no hardcode in services, all behaviour defined by sensitivity of property. + +## Elasticsearch configuration + +**prefix:** `elasticsearch` + +It can be overridden by: + +- through the Spring Boot property `elastic-search-properties-prefix` +- environment variable `ELASTIC_SEARCH_PROPERTIES_PREFIX` + +**Propertyset:** + +| Property | Description | +|------------------------|-------------| +| elasticsearch.host | server URL | +| elasticsearch.port | server port | +| elasticsearch.user | username | +| elasticsearch.password | password | + +<details><summary>Example of a definition for a single tenant</summary></details> + +``` + +curl -L -X PATCH 'http://partition.com/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ + "properties": { + "elasticsearch.host": { + "sensitive": false, + "value": "elastic.us-central1.gc.cloud.es.io" + }, + "elasticsearch.port": { + "sensitive": false, + "value": "9243" + }, + "elasticsearch.user": { + "sensitive": true, + "value": "<USER_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) + }, + "elasticsearch.password": { + "sensitive": true, + "value": "<PASSWORD_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) + } + } +}' + +``` + +## Google cloud service account configuration + +TBD + +| Required roles | +|----------------| +| - | + +### Running E2E Tests + +You will need to have the following environment variables defined. + +| name | value | description | sensitive? | source | +|-------------------------------------|----------------------------------------------------------------|---------------------------------------------------------------------------------------------------|------------|------------------------------------------------------------| +| `ELASTIC_PASSWORD` | `********` | Password for Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_USER_NAME` | `********` | User name for Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_HOST` | ex `elastic.domain.com` | Host Elasticsearch | yes | output of infrastructure deployment | +| `ELASTIC_PORT` | ex `9243` | Port Elasticsearch | yes | output of infrastructure deployment | +| `GCLOUD_PROJECT` | ex `opendes` | Google Cloud Project Id | no | output of infrastructure deployment | +| `INDEXER_HOST` | ex `https://os-indexer-dot-opendes.appspot.com/api/indexer/v2/` | Indexer API endpoint | no | output of infrastructure deployment | +| `ENTITLEMENTS_DOMAIN` | ex `opendes-gc.projects.com` | OSDU R2 to run tests under | no | - | +| `OTHER_RELEVANT_DATA_COUNTRIES` | ex `US` | valid legal tag with a other relevant data countries | no | - | +| `LEGAL_TAG` | ex `opendes-demo-legaltag` | valid legal tag with a other relevant data countries from `DEFAULT_OTHER_RELEVANT_DATA_COUNTRIES` | no | - | +| `DEFAULT_DATA_PARTITION_ID_TENANT1` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | +| `DEFAULT_DATA_PARTITION_ID_TENANT2` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | +| `SEARCH_INTEGRATION_TESTER` | `********` | Service account for API calls. Note: this user must have entitlements configured already | yes | <https://console.cloud.google.com/iam-admin/serviceaccounts> | +| `SEARCH_HOST` | ex `http://localhost:8080/api/search/v2/` | Endpoint of search service | no | - | +| `STORAGE_HOST` | ex `http://os-storage-dot-opendes.appspot.com/api/storage/v2/` | Storage API endpoint | no | output of infrastructure deployment | +| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | + +**Entitlements configuration for integration accounts** + +| INTEGRATION_TESTER | NO_DATA_ACCESS_TESTER | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------| +| users<br/>users.datalake.ops<br/>service.storage.creator<br/>service.entitlements.user<br/>service.search.user<br/>service.search.admin<br/>data.test1<br/>data.integration.test<br/>users@{tenant1}@{domain}.com | + +Execute following command to build code and run all the integration tests: + +```bash +# Note: this assumes that the environment variables for integration tests as outlined +# above are already exported in your environment. +$ (cd testing/indexer-test-gc/ && mvn clean test) +``` diff --git a/provider/indexer-gcp/pom.xml b/provider/indexer-gc/pom.xml similarity index 92% rename from provider/indexer-gcp/pom.xml rename to provider/indexer-gc/pom.xml index c8468d34562aa542c8d4f14ab1a1e47a057fc021..48d5ee51792ed554536e3772c4379f31f48898f3 100644 --- a/provider/indexer-gcp/pom.xml +++ b/provider/indexer-gc/pom.xml @@ -5,26 +5,30 @@ <parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>indexer-gcp</artifactId> - <version>0.18.0-SNAPSHOT</version> - <name>indexer-gcp</name> - <description>Indexer Service GCP App Engine</description> + <artifactId>indexer-gc</artifactId> + <version>0.20.0-SNAPSHOT</version> + <name>indexer-gc</name> + <description>Indexer Service Google Cloud</description> <packaging>jar</packaging> + <properties> + <os-core-common.version>0.19.0-rc3</os-core-common.version> + </properties> + <dependencies> <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> - <version>0.15.0</version> + <version>0.19.0-rc7</version> </dependency> <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <!-- excluded due to runtime conflict with latest core-lib-gcp transient dependencies --> <exclusions> <exclusion> @@ -138,6 +142,7 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-maven-plugin.version}</version> <executions> <execution> <goals> @@ -146,7 +151,7 @@ <configuration> <classifier>spring-boot</classifier> <mainClass> - org.opengroup.osdu.indexer.IndexerGcpApplication + org.opengroup.osdu.indexer.provider.gcp.IndexerGcpApplication </mainClass> </configuration> </execution> diff --git a/provider/indexer-gcp/src/main/appengine/app.yaml b/provider/indexer-gc/src/main/appengine/app.yaml similarity index 100% rename from provider/indexer-gcp/src/main/appengine/app.yaml rename to provider/indexer-gc/src/main/appengine/app.yaml diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/IndexerGcpApplication.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/IndexerGcpApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..418959415ebd132ccc18f9c7089169a91f09be3e --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/IndexerGcpApplication.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp; + +import org.opengroup.osdu.indexer.provider.gcp.indexing.config.CustomContextConfiguration; +import org.opengroup.osdu.indexer.provider.gcp.web.config.WebAppMainContextConfiguration; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +@SpringBootConfiguration +public class IndexerGcpApplication { + + public static void main(String[] args) { + SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(IndexerGcpApplication.class) + .sources(IndexerGcpApplication.class) + .web(WebApplicationType.NONE) + .child(CustomContextConfiguration.class) + .web(WebApplicationType.NONE) + .child(WebAppMainContextConfiguration.class) + .web(WebApplicationType.SERVLET); + + ConfigurableApplicationContext context = springApplicationBuilder.run(args); + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/AttributesCache.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/AttributesCache.java similarity index 56% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/AttributesCache.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/AttributesCache.java index 0f66e377bb331e53a55b16c5cfceae4895dd9684..9b909930bc2dc49700f69e917e1ef4feaf71a444 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/AttributesCache.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/AttributesCache.java @@ -1,36 +1,38 @@ -// Copyright 2017-2019, Schlumberger -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.opengroup.osdu.indexer.cache; +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.cache; +import java.util.Set; +import javax.inject.Inject; import org.opengroup.osdu.core.common.cache.RedisCache; import org.opengroup.osdu.core.common.provider.interfaces.IAttributesCache; import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; import org.springframework.stereotype.Component; -import javax.inject.Inject; -import java.util.Set; - @Component -public class AttributesCache implements IAttributesCache<String,Set>, AutoCloseable { +public class AttributesCache implements IAttributesCache<String, Set>, AutoCloseable { private RedisCache<String, Set> cache; @Inject public AttributesCache(final IndexerConfigurationProperties properties) { cache = new RedisCache(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - properties.getElasticCacheExpiration() * 60, String.class, Boolean.class); + properties.getElasticCacheExpiration() * 60, String.class, Boolean.class); } @Override @@ -57,4 +59,4 @@ public class AttributesCache implements IAttributesCache<String,Set>, AutoClosea public void close() { this.cache.close(); } -} \ No newline at end of file +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/CacheConfig.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/CacheConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7db632b473b5e2c83ef93f662163b7c29b944d15 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/CacheConfig.java @@ -0,0 +1,91 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.cache; + +import lombok.RequiredArgsConstructor; +import org.opengroup.osdu.core.common.cache.RedisCache; +import org.opengroup.osdu.core.common.model.search.ClusterSettings; +import org.opengroup.osdu.core.common.provider.interfaces.IElasticCredentialsCache; +import org.opengroup.osdu.core.common.provider.interfaces.IIndexCache; +import org.opengroup.osdu.core.gcp.cache.RedisCacheBuilder; +import org.opengroup.osdu.indexer.provider.gcp.common.di.GcpConfigurationProperties; +import org.opengroup.osdu.indexer.provider.interfaces.ISchemaCache; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class CacheConfig { + + @Bean + public ISchemaCache fieldTypeMappingCache(RedisCache<String, String> schemaCache) { + return new SchemaCache(schemaCache); + } + + @Bean + public RedisCache<String, String> schemaCache(GcpConfigurationProperties appProperties) { + RedisCacheBuilder<String, String> cacheBuilder = new RedisCacheBuilder<>(); + return cacheBuilder.buildRedisCache( + appProperties.getRedisSearchHost(), + Integer.parseInt(appProperties.getRedisSearchPort()), + appProperties.getRedisSearchPassword(), + appProperties.getRedisSearchExpiration(), + appProperties.getRedisSearchWithSsl(), + String.class, + String.class + ); + } + + @Bean + public IElasticCredentialsCache<String, ClusterSettings> elasticCredentialsCache(RedisCache<String, ClusterSettings> elasticCache) { + return new ElasticCredentialsCache(elasticCache); + } + + @Bean + public RedisCache<String, ClusterSettings> elasticCache(GcpConfigurationProperties gcpAppServiceConfig) { + RedisCacheBuilder<String, ClusterSettings> cacheBuilder = new RedisCacheBuilder<>(); + return cacheBuilder.buildRedisCache( + gcpAppServiceConfig.getRedisSearchHost(), + Integer.parseInt(gcpAppServiceConfig.getRedisSearchPort()), + gcpAppServiceConfig.getRedisSearchPassword(), + gcpAppServiceConfig.getRedisSearchExpiration(), + gcpAppServiceConfig.getRedisSearchWithSsl(), + String.class, + ClusterSettings.class + ); + } + + @Bean + public IIndexCache cursorCache(RedisCache<String, Boolean> redisCache) { + return new IndexCache(redisCache); + } + + @Bean + public RedisCache<String, Boolean> redisCache(GcpConfigurationProperties gcpAppServiceConfig) { + RedisCacheBuilder<String, Boolean> cacheBuilder = new RedisCacheBuilder<>(); + return cacheBuilder.buildRedisCache( + gcpAppServiceConfig.getRedisSearchHost(), + Integer.parseInt(gcpAppServiceConfig.getRedisSearchPort()), + gcpAppServiceConfig.getRedisSearchPassword(), + gcpAppServiceConfig.getRedisSearchExpiration(), + gcpAppServiceConfig.getRedisSearchWithSsl(), + String.class, + Boolean.class + ); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/ElasticCredentialsCache.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/ElasticCredentialsCache.java new file mode 100644 index 0000000000000000000000000000000000000000..ab5af737b666b656c27b62ac6d3ea836a0e7516b --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/ElasticCredentialsCache.java @@ -0,0 +1,64 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.cache; + +import com.lambdaworks.redis.RedisException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.cache.RedisCache; +import org.opengroup.osdu.core.common.model.search.ClusterSettings; +import org.opengroup.osdu.core.common.provider.interfaces.IElasticCredentialsCache; + +@Slf4j +@RequiredArgsConstructor +public class ElasticCredentialsCache implements IElasticCredentialsCache<String, ClusterSettings>, AutoCloseable { + + private final RedisCache<String, ClusterSettings> cache; + + @Override + public void put(String key, ClusterSettings value) { + this.cache.put(key, value); + } + + @Override + public ClusterSettings get(String key) { + try { + return this.cache.get(key); + } catch (RedisException ex) { + //In case the format of cache changes then clean the cache + log.error("Unable to get value from Redis, trying to clean up by key.", ex); + this.cache.delete(key); + return null; + } + } + + @Override + public void delete(String s) { + this.cache.delete(s); + } + + @Override + public void clearAll() { + this.cache.clearAll(); + } + + @Override + public void close() { + this.cache.close(); + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/IndexCache.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/IndexCache.java similarity index 69% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/IndexCache.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/IndexCache.java index 7f7911db5d70cf5a5c34c77c828fa67e68adbc8d..e47c951dd7c4d7aadf9c2983cb0212bed7c20a39 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/IndexCache.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/IndexCache.java @@ -15,24 +15,16 @@ limitations under the License. */ -package org.opengroup.osdu.indexer.cache; +package org.opengroup.osdu.indexer.provider.gcp.common.cache; +import lombok.RequiredArgsConstructor; import org.opengroup.osdu.core.common.cache.RedisCache; import org.opengroup.osdu.core.common.provider.interfaces.IIndexCache; -import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; -import org.springframework.stereotype.Component; -import javax.inject.Inject; - -@Component +@RequiredArgsConstructor public class IndexCache implements IIndexCache<String, Boolean>, AutoCloseable { - private RedisCache<String, Boolean> cache; - @Inject - public IndexCache(final IndexerConfigurationProperties properties) { - cache = new RedisCache<>(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - properties.getElasticCacheExpiration() * 60, String.class, Boolean.class); - } + private final RedisCache<String, Boolean> cache; @Override public void close() throws Exception { diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/SchemaCache.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/SchemaCache.java similarity index 69% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/SchemaCache.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/SchemaCache.java index 0ee20756541b14b4c8a6d94fb153317722c233df..48d76fabf2aa7a35c8c5d81c87148f97193cb7d5 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/SchemaCache.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/cache/SchemaCache.java @@ -15,24 +15,16 @@ limitations under the License. */ -package org.opengroup.osdu.indexer.cache; +package org.opengroup.osdu.indexer.provider.gcp.common.cache; +import lombok.RequiredArgsConstructor; import org.opengroup.osdu.core.common.cache.RedisCache; -import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; import org.opengroup.osdu.indexer.provider.interfaces.ISchemaCache; -import org.springframework.stereotype.Component; -import javax.inject.Inject; - -@Component +@RequiredArgsConstructor public class SchemaCache implements ISchemaCache<String, String>, AutoCloseable { - private RedisCache<String, String> cache; - @Inject - public SchemaCache(final IndexerConfigurationProperties properties) { - cache = new RedisCache<>(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - properties.getElasticCacheExpiration() * 60, String.class, String.class); - } + private final RedisCache<String, String> cache; @Override public void close() throws Exception { diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfig.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/ElasticSearchConfig.java similarity index 90% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfig.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/ElasticSearchConfig.java index 0f9cc1f4d3ea4319c729af434fd5710203b30141..9ef3bc8585f45297d42a54f4a51863e893ec3133 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfig.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/ElasticSearchConfig.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.opengroup.osdu.indexer.di; +package org.opengroup.osdu.indexer.provider.gcp.common.di; import org.opengroup.osdu.core.common.partition.IPartitionProvider; import org.opengroup.osdu.core.common.provider.interfaces.IElasticRepository; @@ -28,7 +28,7 @@ import org.springframework.context.annotation.Configuration; public class ElasticSearchConfig { @Bean - public IElasticRepository elasticRepository(ElasticSearchConfigurationProperties properties, + public IElasticRepository elasticRepository(GcpConfigurationProperties properties, IPartitionProvider partitionProvider, IPartitionPropertyResolver propertyResolver) { return new ElasticSearchDestinationResolver(properties.getElasticsearchPropertiesPrefix(), partitionProvider, propertyResolver); } diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/EntitlementsClientFactory.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/EntitlementsClientFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..24f9cc19ff4f51d87bac4f31608eea9b0bb50ca7 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/EntitlementsClientFactory.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.di; + +import org.opengroup.osdu.core.common.entitlements.EntitlementsAPIConfig; +import org.opengroup.osdu.core.common.entitlements.EntitlementsFactory; +import org.opengroup.osdu.core.common.entitlements.IEntitlementsFactory; +import org.opengroup.osdu.core.common.http.json.HttpResponseBodyMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.AbstractFactoryBean; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +@Component +@Lazy +public class EntitlementsClientFactory extends AbstractFactoryBean<IEntitlementsFactory> { + + @Value("${AUTHORIZE_API}") + private String authorizeApi; + + @Value("${AUTHORIZE_API_KEY:}") + private String authorizeApiKey; + + @Autowired + private HttpResponseBodyMapper mapper; + + @Override + protected IEntitlementsFactory createInstance() throws Exception { + + return new EntitlementsFactory(EntitlementsAPIConfig + .builder() + .rootUrl(authorizeApi) + .apiKey(authorizeApiKey) + .build(), + mapper); + } + + @Override + public Class<?> getObjectType() { + return IEntitlementsFactory.class; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/GcpConfigurationProperties.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/GcpConfigurationProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..2e651575e99ea4d4b7a6f1f7ec1c61f6cb7ed117 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/di/GcpConfigurationProperties.java @@ -0,0 +1,43 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.di; + +import lombok.Getter; +import lombok.Setter; +import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +@Primary +@Configuration +@ConfigurationProperties +@Getter +@Setter +public class GcpConfigurationProperties extends IndexerConfigurationProperties { + + private String elasticsearchPropertiesPrefix = "elasticsearch"; + + private String redisGroupPassword; + private Integer redisGroupExpiration = 30; + private Boolean redisGroupWithSsl = false; + + private String redisSearchPassword; + private Integer redisSearchExpiration = 60 * 60; + private Boolean redisSearchWithSsl = false; +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/package-info.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..391c0383a79f364f2ad3465bb3842abcc9d51dfc --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * This module is used to provide common bean configuration, for both web app context that serves user request, and non-web app context that process indexing + * events. + */ +package org.opengroup.osdu.indexer.provider.gcp.common; diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/JobStatusJsonSerializer.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/JobStatusJsonSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..01d88736ff10b20a61547db5931aa0b6868fad26 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/JobStatusJsonSerializer.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.publish; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import org.opengroup.osdu.core.common.model.indexer.JobStatus; +import org.springframework.stereotype.Component; + +@Component +public class JobStatusJsonSerializer implements JsonSerializer<JobStatus> { + + private final Gson gson = new Gson(); + + @Override + public JsonElement serialize(JobStatus src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject jsonObject = new JsonObject(); + jsonObject.add("recordsStatus", this.gson.toJsonTree(src.getStatusesList())); + jsonObject.add("debugInfo", this.gson.toJsonTree(src.getDebugInfos())); + return jsonObject; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/ReprocessingTaskPublisher.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/ReprocessingTaskPublisher.java new file mode 100644 index 0000000000000000000000000000000000000000..4caa625e53d6687f4362c6892182dae7f2676407 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/ReprocessingTaskPublisher.java @@ -0,0 +1,121 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.publish; + +import static org.opengroup.osdu.core.common.Constants.REINDEX_RELATIVE_URL; +import static org.opengroup.osdu.core.common.Constants.WORKER_RELATIVE_URL; + +import com.google.gson.Gson; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.search.RecordChangedMessages; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriver; +import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.core.gcp.oqm.model.OqmTopic; +import org.opengroup.osdu.indexer.provider.gcp.indexing.processing.IndexerMessagingConfigProperties; +import org.opengroup.osdu.indexer.util.IndexerQueueTaskBuilder; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Slf4j +@Primary +@Component +@RequiredArgsConstructor +public class ReprocessingTaskPublisher extends IndexerQueueTaskBuilder { + + private final Gson gson = new Gson(); + + private final OqmDriver driver; + + private final TenantInfo tenantInfo; + + private final IndexerMessagingConfigProperties properties; + + private OqmTopic reprocessOqmTopic; + + private OqmTopic recordsChangedTopic; + + @PostConstruct + public void setUp() { + reprocessOqmTopic = OqmTopic.builder().name(properties.getReprocessTopicName()).build(); + recordsChangedTopic = OqmTopic.builder().name(properties.getRecordsChangedTopicName()).build(); + } + + public void createWorkerTask(String payload, DpsHeaders headers) { + publishRecordsChangedTask(WORKER_RELATIVE_URL, payload, 0l, headers); + } + + public void createWorkerTask(String payload, Long countdownMillis, DpsHeaders headers) { + publishRecordsChangedTask(WORKER_RELATIVE_URL, payload, countdownMillis, headers); + } + + public void createReIndexTask(String payload, DpsHeaders headers) { + publishReindexTask(REINDEX_RELATIVE_URL, payload, 0l, headers); + } + + public void createReIndexTask(String payload, Long countdownMillis, DpsHeaders headers) { + publishReindexTask(REINDEX_RELATIVE_URL, payload, countdownMillis, headers); + } + + private void publishReindexTask(String url, String payload, Long countdownMillis, + DpsHeaders headers) { + OqmDestination oqmDestination = OqmDestination.builder().partitionId(headers.getPartitionId()) + .build(); + Map<String, String> attributes = getAttributesFromHeaders(headers); + OqmMessage oqmMessage = OqmMessage.builder().data(payload).attributes(attributes).build(); + log.info("Reprocessing task: {} ,has been published.", oqmMessage); + driver.publish(oqmMessage, reprocessOqmTopic, oqmDestination); + } + + private void publishRecordsChangedTask(String url, String payload, Long countdownMillis, + DpsHeaders headers) { + OqmDestination oqmDestination = OqmDestination.builder() + .partitionId(headers.getPartitionId()) + .build(); + + RecordChangedMessages recordChangedMessages = gson.fromJson(payload, + RecordChangedMessages.class); + + OqmMessage oqmMessage = OqmMessage.builder() + .id(headers.getCorrelationId()) + .data(recordChangedMessages.getData()) + .attributes(getAttributesFromHeaders(headers)) + .build(); + + log.info("Reprocessing task: {} ,has been published.", oqmMessage); + driver.publish(oqmMessage, recordsChangedTopic, oqmDestination); + } + + @NotNull + private Map<String, String> getAttributesFromHeaders(DpsHeaders headers) { + Map<String, String> attributes = new HashMap<>(); + attributes.put(DpsHeaders.USER_EMAIL, headers.getUserEmail()); + attributes.put(DpsHeaders.ACCOUNT_ID, this.tenantInfo.getName()); + attributes.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionIdWithFallbackToAccountId()); + headers.addCorrelationIdIfMissing(); + attributes.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + return attributes; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/StatusPublisherImpl.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/StatusPublisherImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..4551656f75da06d7f66f58004de9f0c4262c1352 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/publish/StatusPublisherImpl.java @@ -0,0 +1,76 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.common.publish; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonSerializer; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.indexer.JobStatus; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriver; +import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.core.gcp.oqm.model.OqmTopic; +import org.opengroup.osdu.indexer.provider.gcp.indexing.processing.IndexerMessagingConfigProperties; +import org.opengroup.osdu.indexer.provider.interfaces.IPublisher; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class StatusPublisherImpl implements IPublisher { + + private final OqmDriver driver; + private final IndexerMessagingConfigProperties properties; + private final JsonSerializer<JobStatus> statusJsonSerializer; + private OqmTopic oqmTopic; + private Gson gson; + + @PostConstruct + public void setUp() { + this.oqmTopic = OqmTopic.builder().name(properties.getStatusChangedTopicName()).build(); + this.gson = new GsonBuilder() + .registerTypeHierarchyAdapter(JobStatus.class, statusJsonSerializer) + .create(); + } + + @Override + public void publishStatusChangedTagsToTopic(DpsHeaders headers, JobStatus indexerBatchStatus) { + OqmDestination oqmDestination = + OqmDestination.builder().partitionId(headers.getPartitionId()).build(); + String json = this.gson.toJson(indexerBatchStatus); + + Map<String, String> attributes = getAttributes(headers); + OqmMessage oqmMessage = OqmMessage.builder().data(json).attributes(attributes).build(); + driver.publish(oqmMessage, oqmTopic, oqmDestination); + } + + private Map<String, String> getAttributes(DpsHeaders headers) { + Map<String, String> attributes = new HashMap<>(); + attributes.put(DpsHeaders.ACCOUNT_ID, headers.getPartitionIdWithFallbackToAccountId()); + attributes.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionIdWithFallbackToAccountId()); + headers.addCorrelationIdIfMissing(); + attributes.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + return attributes; + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/ServiceAccountJwtGcpClientImpl.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/util/ServiceAccountJwtGcpClientImpl.java similarity index 95% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/ServiceAccountJwtGcpClientImpl.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/util/ServiceAccountJwtGcpClientImpl.java index 0e3821c64259a8e8c8b894c646862c1ec7806b27..698046499b105c845ce0c4d3d780be56afc833e1 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/ServiceAccountJwtGcpClientImpl.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/common/util/ServiceAccountJwtGcpClientImpl.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.opengroup.osdu.indexer.util; +package org.opengroup.osdu.indexer.provider.gcp.common.util; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/CustomContextConfiguration.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/CustomContextConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..ce24926c2d575e63430649ce5d545f2e701b3b23 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/CustomContextConfiguration.java @@ -0,0 +1,71 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.config; + +import java.util.Arrays; +import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.indexer.IndexerApplication; +import org.opengroup.osdu.indexer.ServerletInitializer; +import org.opengroup.osdu.indexer.provider.gcp.web.config.WebAppMainContextConfiguration; +import org.opengroup.osdu.indexer.provider.gcp.web.security.GcpSecurityConfig; +import org.opengroup.osdu.indexer.swagger.SwaggerConfiguration; +import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.PropertySource; + +@Slf4j +@Configuration +@EnableConfigurationProperties +@PropertySource("classpath:application.properties") +@RequiredArgsConstructor +@ComponentScan( + value = {"org.opengroup.osdu"}, + excludeFilters = { + @ComponentScan.Filter( + type = FilterType.ASSIGNABLE_TYPE, + value = { + WebAppMainContextConfiguration.class, + IndexerApplication.class, + ServerletInitializer.class, + SwaggerConfiguration.class, + GcpSecurityConfig.class, + SecurityAutoConfiguration.class, + ManagementWebSecurityAutoConfiguration.class, + SecurityFilterAutoConfiguration.class + }) + }) +public class CustomContextConfiguration { + + private final ApplicationContext applicationContext; + + @PostConstruct + public void setUp() { + log.debug("Messaging context initialized with id: {}.", applicationContext.getId()); + log.debug("Messaging context status: {}.", applicationContext); + String[] allBeansNames = applicationContext.getBeanDefinitionNames(); + log.debug("Messaging context beans definitions: {}.", Arrays.toString(allBeansNames)); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/ScopeModifierPostProcessor.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/ScopeModifierPostProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..f1b4ce0b80bbbd86d947b2f486fd97238b30a22a --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/config/ScopeModifierPostProcessor.java @@ -0,0 +1,47 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.config; + +import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.indexer.provider.gcp.indexing.thread.ThreadScope; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class ScopeModifierPostProcessor implements BeanFactoryPostProcessor { + + public static final String SCOPE_THREAD = "scope_thread"; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { + factory.registerScope(SCOPE_THREAD, new ThreadScope()); + + for (String beanName : factory.getBeanDefinitionNames()) { + BeanDefinition beanDef = factory.getBeanDefinition(beanName); + if (Objects.equals(beanDef.getScope(), "request")) { + beanDef.setScope(SCOPE_THREAD); + log.debug("Scope has been overridden for bean: {}", beanDef.getBeanClassName()); + } + } + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/package-info.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..4cc667aa15649f7e9022b31c829f95078f479270 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/package-info.java @@ -0,0 +1,25 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * This module is used to override request scope bean configuration enforced by the common code, to untie indexing from the web environment and allow async task + * processing in a pulling manner. And configure non web context, which should not process user requests. + * <p> + * As a replacement for @RequestScope, ThreadScope is used, implementation based on SimpleThreadScope provided by Spring. Beans configuration provided by the + * common code is overriden with help of BeanFactoryPostProcessor. + * </p> + */ +package org.opengroup.osdu.indexer.provider.gcp.indexing; diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfigurationProperties.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerMessagingConfigProperties.java similarity index 72% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfigurationProperties.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerMessagingConfigProperties.java index 586ce1ab9e9127282066a2e0fddf651836d12f18..04dd82069daa7e9210566136573f81cc583bc1e1 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/ElasticSearchConfigurationProperties.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerMessagingConfigProperties.java @@ -15,18 +15,23 @@ * limitations under the License. */ -package org.opengroup.osdu.indexer.di; +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; -@Configuration -@ConfigurationProperties -@Getter @Setter -public class ElasticSearchConfigurationProperties { +@Getter +@ConfigurationProperties +@Configuration +public class IndexerMessagingConfigProperties { + + private String recordsChangedTopicName; + private String schemaChangedTopicName; + private String defaultRelativeIndexerWorkerUrl; + private String reprocessTopicName; + private String statusChangedTopicName; - private String elasticsearchPropertiesPrefix = "elasticsearch"; } diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiver.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..973372f431e5d29c333affcd43932736132dbe16 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiver.java @@ -0,0 +1,112 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import com.google.common.base.Strings; +import java.io.IOException; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.http.RequestStatus; +import org.opengroup.osdu.core.gcp.oqm.model.OqmAckReplier; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessageReceiver; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; +import org.opengroup.osdu.indexer.provider.gcp.indexing.thread.ThreadScopeContextHolder; + +@Slf4j +@RequiredArgsConstructor +public abstract class IndexerOqmMessageReceiver implements OqmMessageReceiver { + + protected final ThreadDpsHeaders dpsHeaders; + private final TokenProvider tokenProvider; + + @Override + public void receiveMessage(OqmMessage oqmMessage, OqmAckReplier oqmAckReplier) { + log.info("OQM message: {} - {} - {}", oqmMessage.getId(), oqmMessage.getData(), + oqmMessage.getAttributes()); + boolean acked = false; + try { + if (!validInput(oqmMessage)) { + log.warn("Not valid event payload, event will not be processed."); + oqmAckReplier.ack(); + return; + } + DpsHeaders headers = getHeaders(oqmMessage); + // Filling thread context required by the core services. + dpsHeaders.setThreadContext(headers.getHeaders()); + sendMessage(oqmMessage); + acked = true; + } catch (AppException appException) { + int statusCode = appException.getError().getCode(); + if (statusCode > 199 && statusCode < 300 && statusCode != RequestStatus.INVALID_RECORD) { + log.info( + "Event id : " + oqmMessage.getId() + ", was not processed, and will NOT be rescheduled.", + appException + ); + acked = true; + } else { + //It is possible to get both AppException with wrapped in original Exception or the original Exception without any wrapper + Exception exception = Optional.ofNullable(appException.getOriginalException()).orElse(appException); + log.warn( + "Event id : " + oqmMessage.getId() + ", was not processed, and will BE rescheduled.", + exception + ); + } + } catch (Exception exception) { + log.error( + "Event id : " + oqmMessage.getId() + ", was not processed, and will BE rescheduled.", + exception + ); + } finally { + if (!acked) { + oqmAckReplier.nack(); + } else { + oqmAckReplier.ack(); + } + // Cleaning thread context after processing is finished and the thread dies out. + ThreadScopeContextHolder.currentThreadScopeAttributes().clear(); + } + } + + private boolean validInput(OqmMessage oqmMessage) { + boolean isValid = true; + if (Strings.isNullOrEmpty(oqmMessage.getData()) || oqmMessage.getData().equals("{}")) { + log.warn("Message body is empty, message id: {}, attributes: {}", oqmMessage.getId(), oqmMessage.getAttributes()); + isValid = false; + } + if (oqmMessage.getAttributes() == null || oqmMessage.getAttributes().size() == 0) { + log.warn("Attribute map not found, message id: {}, attributes: {}", oqmMessage.getId(), oqmMessage.getAttributes()); + isValid = false; + } + return isValid; + } + + protected abstract void sendMessage(OqmMessage oqmMessage) throws Exception; + + @NotNull + private DpsHeaders getHeaders(OqmMessage oqmMessage) { + DpsHeaders headers = DpsHeaders.createFromMap(oqmMessage.getAttributes()); + headers.getHeaders().put("authorization", "Bearer " + tokenProvider.getIdToken()); + return headers; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/OqmSubscriberManager.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/OqmSubscriberManager.java new file mode 100644 index 0000000000000000000000000000000000000000..b7f6bfd7d5687e1f663db57b5f64d6a13bc7cd10 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/OqmSubscriberManager.java @@ -0,0 +1,104 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.Nullable; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriver; +import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessageReceiver; +import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscriber; +import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscriberThroughput; +import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscription; +import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscriptionQuery; +import org.opengroup.osdu.core.gcp.oqm.model.OqmTopic; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +@RequiredArgsConstructor +public class OqmSubscriberManager { + + private final OqmDriver driver; + + private OqmSubscription getOrCreateSubscriptionForTenant(TenantInfo tenantInfo, String topicName, String subscriptionName) { + log.info("OQM: provisioning tenant {}:", tenantInfo.getDataPartitionId()); + log.info("OQM: check for topic {} existence:", topicName); + OqmTopic topic = driver.getTopic(topicName, getDestination(tenantInfo)) + .orElse(null); + if (topic == null) { + log.info("OQM: check for topic {} existence: ABSENT. Skipped", topicName); + throw new RuntimeException(); + } + + log.info("OQM: check for topic {} existence: PRESENT", topicName); + OqmSubscription subscription = getSubscription(tenantInfo, topic, subscriptionName); + + if (subscription == null) { + subscription = createSubscription(tenantInfo, topic, subscriptionName); + } else { + log.info("OQM: check for subscription {} existence: PRESENT", subscriptionName); + } + log.info("OQM: provisioning tenant {}: COMPLETED.", tenantInfo.getDataPartitionId()); + return subscription; + } + + @Nullable + private OqmSubscription getSubscription(TenantInfo tenantInfo, OqmTopic topic, String subscriptionName) { + log.info("OQM: check for subscription {} existence:", subscriptionName); + OqmSubscriptionQuery query = OqmSubscriptionQuery.builder() + .namePrefix(subscriptionName) + .subscriberable(true) + .build(); + return driver + .listSubscriptions(topic, query, getDestination(tenantInfo)).stream() + .findAny() + .orElse(null); + } + + private OqmSubscription createSubscription(TenantInfo tenantInfo, OqmTopic topic, String subscriptionName) { + log.info("OQM: check for subscription {} existence: ABSENT. Will create.", subscriptionName); + OqmSubscription request = OqmSubscription.builder() + .topic(topic) + .name(subscriptionName) + .build(); + return driver.createAndGetSubscription(request, getDestination(tenantInfo)); + } + + public void registerSubscriber(TenantInfo tenantInfo, String topicName, String subscriptionName, OqmMessageReceiver messageReceiver, OqmSubscriberThroughput throughput) { + OqmSubscription subscriptionForTenant = getOrCreateSubscriptionForTenant(tenantInfo, topicName, subscriptionName); + log.info("OQM: registering Subscriber for subscription {}", subscriptionName); + OqmDestination destination = getDestination(tenantInfo); + + OqmSubscriber subscriber = OqmSubscriber.builder() + .subscription(subscriptionForTenant) + .messageReceiver(messageReceiver) + .throughput(throughput) + .build(); + driver.subscribe(subscriber, destination); + log.info("OQM: provisioning subscription {}: Subscriber REGISTERED.", subscriptionName); + } + + private OqmDestination getDestination(TenantInfo tenantInfo) { + return OqmDestination.builder() + .partitionId(tenantInfo.getDataPartitionId()) + .build(); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiver.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..9589701a4f7b2f030a8b35750a6cef822b694500 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiver.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import java.time.LocalDateTime; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.indexer.JobStatus; +import org.opengroup.osdu.core.common.model.search.RecordChangedMessages; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.api.RecordIndexerApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; +import org.springframework.http.ResponseEntity; + +@Slf4j +public class RecordsChangedMessageReceiver extends IndexerOqmMessageReceiver { + + private final RecordIndexerApi recordIndexerApi; + + public RecordsChangedMessageReceiver(ThreadDpsHeaders dpsHeaders, TokenProvider tokenProvider, + RecordIndexerApi recordIndexerApi) { + super(dpsHeaders, tokenProvider); + this.recordIndexerApi = recordIndexerApi; + } + + @Override + protected void sendMessage(OqmMessage oqmMessage) throws Exception { + RecordChangedMessages indexWorkerRequestBody = getIndexWorkerRequestBody(oqmMessage); + log.debug("Job message body: {}", indexWorkerRequestBody); + ResponseEntity<JobStatus> jobStatusResponse = recordIndexerApi.indexWorker( + indexWorkerRequestBody); + log.debug("Job status: {}", jobStatusResponse); + } + + private RecordChangedMessages getIndexWorkerRequestBody(OqmMessage request) { + RecordChangedMessages recordChangedMessages = new RecordChangedMessages(); + recordChangedMessages.setMessageId(dpsHeaders.getCorrelationId()); + recordChangedMessages.setData(request.getData()); + recordChangedMessages.setAttributes(request.getAttributes()); + recordChangedMessages.setPublishTime(LocalDateTime.now().toString()); + return recordChangedMessages; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiver.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..ccfe7a214004595ffdc9b29026a095d65db33015 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.indexer.RecordReindexRequest; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.api.ReindexApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; +import org.springframework.http.ResponseEntity; + +@Slf4j +public class RepressorMessageReceiver extends IndexerOqmMessageReceiver { + + private final Gson gson = new Gson(); + private final ReindexApi reindexApi; + + public RepressorMessageReceiver(ThreadDpsHeaders dpsHeaders, TokenProvider tokenProvider, + ReindexApi reindexApi) { + super(dpsHeaders, tokenProvider); + this.reindexApi = reindexApi; + } + + @Override + protected void sendMessage(OqmMessage oqmMessage) throws Exception { + RecordReindexRequest reindexBody = getReindexBody(oqmMessage); + log.debug("Reindex job message body: {}", reindexBody); + ResponseEntity<?> reindexResponse = reindexApi.reindex(reindexBody, false); + log.debug("Reindex job status: {}", reindexResponse); + } + + private RecordReindexRequest getReindexBody(OqmMessage request) { + return this.gson.fromJson(request.getData(), RecordReindexRequest.class); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/SchemaChangedMessageReceiver.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/SchemaChangedMessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..cde2d8954c08e47f5b0e62f86ebbb732578044de --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/SchemaChangedMessageReceiver.java @@ -0,0 +1,59 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import com.google.gson.Gson; +import java.io.IOException; +import java.time.LocalDateTime; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.indexer.SchemaChangedMessages; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.api.RecordIndexerApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; +import org.springframework.http.ResponseEntity; + +@Slf4j +public class SchemaChangedMessageReceiver extends IndexerOqmMessageReceiver { + + private final RecordIndexerApi recordIndexerApi; + private final Gson gson = new Gson(); + + public SchemaChangedMessageReceiver(ThreadDpsHeaders dpsHeaders, TokenProvider tokenProvider, + RecordIndexerApi recordIndexerApi) { + super(dpsHeaders, tokenProvider); + this.recordIndexerApi = recordIndexerApi; + } + + @Override + protected void sendMessage(OqmMessage oqmMessage) throws Exception { + SchemaChangedMessages schemaChangedMessage = getSchemaWorkerRequestBody(oqmMessage); + log.debug("Schema changed job message body: {}", schemaChangedMessage); + ResponseEntity<?> schemaChangeResponse = recordIndexerApi.schemaWorker(schemaChangedMessage); + log.debug("Schema changed job status: {}", schemaChangeResponse); + } + + private SchemaChangedMessages getSchemaWorkerRequestBody(OqmMessage oqmMessage) { + SchemaChangedMessages schemaChangedMessages = new SchemaChangedMessages(); + schemaChangedMessages.setMessageId(dpsHeaders.getCorrelationId()); + schemaChangedMessages.setData(oqmMessage.getData()); + schemaChangedMessages.setAttributes(oqmMessage.getAttributes()); + schemaChangedMessages.setPublishTime(LocalDateTime.now().toString()); + return schemaChangedMessages; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/TenantSubscriberConfiguration.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/TenantSubscriberConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..9d3a7789d585a6575073719655c6bb2251e343a2 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/TenantSubscriberConfiguration.java @@ -0,0 +1,92 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import java.util.Collection; +import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscriberThroughput; +import org.opengroup.osdu.indexer.api.RecordIndexerApi; +import org.opengroup.osdu.indexer.api.ReindexApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; +import org.springframework.stereotype.Component; + +/** + * Subscription configuration class. + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class TenantSubscriberConfiguration { + + private static final String SUBSCRIPTION_PREFIX = "indexer-"; + private final IndexerMessagingConfigProperties properties; + private final OqmSubscriberManager subscriberManager; + private final ITenantFactory tenantInfoFactory; + private final TokenProvider tokenProvider; + private final ThreadDpsHeaders headers; + private final RecordIndexerApi recordIndexerApi; + private final ReindexApi reindexApi; + + /** + * Tenant configurations provided by the Partition service will be used to configure subscribers. If tenants use the same message broker(The same RabbitMQ + * instance, or the same GCP project Pub/Sub) then only one subscriber in this broker will be used. + */ + @PostConstruct + void postConstruct() { + log.info("OqmSubscriberManager provisioning STARTED"); + String recordsChangedTopicName = properties.getRecordsChangedTopicName(); + String reprocessTopicName = properties.getReprocessTopicName(); + String schemaChangedTopicName = properties.getSchemaChangedTopicName(); + + Collection<TenantInfo> tenantInfos = tenantInfoFactory.listTenantInfo(); + + for (TenantInfo tenantInfo : tenantInfos) { + subscriberManager.registerSubscriber( + tenantInfo, + recordsChangedTopicName, + getSubscriptionName(recordsChangedTopicName), + new RecordsChangedMessageReceiver(headers, tokenProvider, recordIndexerApi), + OqmSubscriberThroughput.MAX + ); + subscriberManager.registerSubscriber( + tenantInfo, + reprocessTopicName, + getSubscriptionName(reprocessTopicName), + new RepressorMessageReceiver(headers, tokenProvider, reindexApi), + OqmSubscriberThroughput.MIN + ); + subscriberManager.registerSubscriber( + tenantInfo, + schemaChangedTopicName, + getSubscriptionName(schemaChangedTopicName), + new SchemaChangedMessageReceiver(headers, tokenProvider, recordIndexerApi), + OqmSubscriberThroughput.MIN + ); + } + log.info("OqmSubscriberManager provisioning COMPLETED"); + } + + private String getSubscriptionName(String topicName) { + return SUBSCRIPTION_PREFIX + topicName; + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/scope/ThreadDpsHeaders.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/scope/ThreadDpsHeaders.java new file mode 100644 index 0000000000000000000000000000000000000000..3e9f007ceb7c5ab75f6c1dfcb40cc53ad8648c51 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/scope/ThreadDpsHeaders.java @@ -0,0 +1,45 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.scope; + +import static org.springframework.context.annotation.ScopedProxyMode.TARGET_CLASS; + +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.indexer.provider.gcp.indexing.config.ScopeModifierPostProcessor; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Slf4j +@Primary +@Component +@Scope(value = ScopeModifierPostProcessor.SCOPE_THREAD, proxyMode = TARGET_CLASS) +@RequiredArgsConstructor +public class ThreadDpsHeaders extends DpsHeaders { + + private final TokenProvider tokenProvider; + + public void setThreadContext(Map<String, String> headers) { + this.put(DpsHeaders.AUTHORIZATION, "Bearer " + tokenProvider.getIdToken()); + this.addFromMap(headers); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScope.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScope.java new file mode 100644 index 0000000000000000000000000000000000000000..c2e5fef7361b8477f2fc606b7025d9ccd21769d8 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScope.java @@ -0,0 +1,72 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.thread; + +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.config.Scope; + +@Slf4j +public class ThreadScope implements Scope { + + public Object get(String name, ObjectFactory<?> factory) { + log.trace("Get bean:{} with factory: {} current Thread: {}", name, factory, + Thread.currentThread().getName()); + Object result = null; + Map<String, Object> hBeans = ThreadScopeContextHolder.currentThreadScopeAttributes() + .getBeanMap(); + if (!hBeans.containsKey(name)) { + result = factory.getObject(); + log.trace( + "No bean in context with name: {} factory provisioning result is: {} current Thread: {}", + name, result, Thread.currentThread().getName()); + hBeans.put(name, result); + } else { + result = hBeans.get(name); + } + + return result; + } + + public Object remove(String name) { + log.trace("Removing bean : {} current Thread: {}", name, Thread.currentThread().getName()); + Object result = null; + Map<String, Object> hBeans = ThreadScopeContextHolder.currentThreadScopeAttributes() + .getBeanMap(); + if (hBeans.containsKey(name)) { + result = hBeans.get(name); + hBeans.remove(name); + } + + return result; + } + + public void registerDestructionCallback(String name, Runnable callback) { + ThreadScopeContextHolder.currentThreadScopeAttributes().registerRequestDestructionCallback(name, callback); + } + + public Object resolveContextualObject(String key) { + return null; + } + + public String getConversationId() { + return Thread.currentThread().getName(); + } +} + diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeAttributes.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeAttributes.java new file mode 100644 index 0000000000000000000000000000000000000000..7a9ac113c207b536d3b5df147dd3e22771b35583 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeAttributes.java @@ -0,0 +1,60 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.thread; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.NonNull; + +@Slf4j +@RequiredArgsConstructor +public class ThreadScopeAttributes { + + protected final Map<String, Object> hBeans = new HashMap(); + protected final Map<String, Runnable> hRequestDestructionCallbacks = new LinkedHashMap(); + + protected final Map<String, Object> getBeanMap() { + return this.hBeans; + } + + protected final void registerRequestDestructionCallback( + @NonNull String name, @NonNull Runnable callback) { + log.trace("Registering callback for: {} on runnable: {}", name, callback); + this.hRequestDestructionCallbacks.put(name, callback); + } + + public final void clear() { + this.processDestructionCallbacks(); + this.hBeans.clear(); + } + + private void processDestructionCallbacks() { + for (Map.Entry<String, Runnable> mapEntry : this.hRequestDestructionCallbacks.entrySet()) { + Runnable callback = mapEntry.getValue(); + log.trace( + "Performing destruction callback for: {} on thread: {}", + mapEntry.getKey(), + Thread.currentThread().getName()); + callback.run(); + } + this.hRequestDestructionCallbacks.clear(); + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeContextHolder.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeContextHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..24d7c2ef69103f9181a620ac7e88bcd1f464cb26 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/indexing/thread/ThreadScopeContextHolder.java @@ -0,0 +1,49 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.thread; + +public class ThreadScopeContextHolder { + + private static final ThreadLocal<ThreadScopeAttributes> threadScopeAttributesHolder = + new InheritableThreadLocal<ThreadScopeAttributes>() { + @Override + protected ThreadScopeAttributes initialValue() { + return new ThreadScopeAttributes(); + } + }; + + private ThreadScopeContextHolder() { + } + + public static ThreadScopeAttributes getThreadScopeAttributes() { + return threadScopeAttributesHolder.get(); + } + + public static void setThreadScopeAttributes(ThreadScopeAttributes accessor) { + threadScopeAttributesHolder.set(accessor); + } + + public static ThreadScopeAttributes currentThreadScopeAttributes() throws IllegalStateException { + ThreadScopeAttributes accessor = threadScopeAttributesHolder.get(); + if (accessor == null) { + throw new IllegalStateException("No thread scoped attributes."); + } else { + return accessor; + } + } +} diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/config/WebAppMainContextConfiguration.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/config/WebAppMainContextConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..ffb314b7e171ffed3fd0d6093a58106f98aa22c1 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/config/WebAppMainContextConfiguration.java @@ -0,0 +1,75 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.web.config; + +import java.util.Arrays; +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.http.DpsHeaderFactory; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.indexer.IndexerApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.PropertySource; +import org.springframework.web.context.annotation.RequestScope; + +@Slf4j +@Configuration +@EnableAutoConfiguration +@PropertySource("classpath:application.properties") +@RequiredArgsConstructor +@ComponentScan( + value = {"org.opengroup.osdu"}, + excludeFilters = { + @ComponentScan.Filter( + type = FilterType.ASSIGNABLE_TYPE, + value = { + IndexerApplication.class + }), + @ComponentScan.Filter( + type = FilterType.REGEX, + pattern = {"org\\.opengroup\\.osdu\\.indexer\\.provider\\.gcp\\.indexing\\..*"} + ) + } +) +public class WebAppMainContextConfiguration { + + private final ApplicationContext applicationContext; + + @PostConstruct + public void setUp() { + log.debug("Main web app context initialized with id: {}.", applicationContext.getId()); + log.debug("Main web app context status: {}.", applicationContext); + String[] allBeansNames = applicationContext.getBeanDefinitionNames(); + log.debug("Main web app context beans definitions: {}.", Arrays.toString(allBeansNames)); + } + + @Primary + @Bean + @RequestScope + public DpsHeaders dpsHeaders(HttpServletRequest request) { + return new DpsHeaderFactory(request); + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/TenantInfoService.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/di/TenantInfoService.java similarity index 56% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/TenantInfoService.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/di/TenantInfoService.java index 84b3ca3597ebb4a046ce39c2d9588f56f6bc4e7c..07570f46ccc0e0026684b08913feeb148cfb2344 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/TenantInfoService.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/di/TenantInfoService.java @@ -1,9 +1,8 @@ -package org.opengroup.osdu.indexer.di; +package org.opengroup.osdu.indexer.provider.gcp.web.di; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; - import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.tenant.TenantInfo; import org.opengroup.osdu.core.common.multitenancy.ITenantInfoService; @@ -15,19 +14,19 @@ import org.springframework.web.context.annotation.RequestScope; @Component public class TenantInfoService implements ITenantInfoService { - @Inject - private ITenantFactory tenantFactory; + @Inject + private ITenantFactory tenantFactory; - @Inject - private DpsHeaders headers; + @Inject + private DpsHeaders headers; - @Override - public TenantInfo getTenantInfo() { - return tenantFactory.getTenantInfo(headers.getPartitionId()); - } + @Override + public TenantInfo getTenantInfo() { + return tenantFactory.getTenantInfo(headers.getPartitionId()); + } - @Override - public List<TenantInfo> getAllTenantInfos() { - return new ArrayList<>(tenantFactory.listTenantInfo()); - } -} \ No newline at end of file + @Override + public List<TenantInfo> getAllTenantInfos() { + return new ArrayList<>(tenantFactory.listTenantInfo()); + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/middleware/IndexFilter.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/middleware/IndexFilter.java similarity index 91% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/middleware/IndexFilter.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/middleware/IndexFilter.java index 525ccfa928b56f1bd5d08402621a8ffb331cedd5..2ff2b6ba6137c89f1e9381be873dc430ad69edc4 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/middleware/IndexFilter.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/middleware/IndexFilter.java @@ -15,9 +15,22 @@ limitations under the License. */ -package org.opengroup.osdu.indexer.middleware; +package org.opengroup.osdu.indexer.provider.gcp.web.middleware; import com.google.common.base.Strings; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import javax.inject.Inject; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import lombok.extern.java.Log; import org.apache.http.HttpStatus; import org.opengroup.osdu.core.common.http.ResponseHeaders; @@ -29,15 +42,6 @@ import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; -import javax.inject.Inject; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - @Log @Component public class IndexFilter implements Filter { @@ -60,7 +64,7 @@ public class IndexFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { + throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; String uri = httpRequest.getRequestURI().toLowerCase(); @@ -75,7 +79,7 @@ public class IndexFilter implements Filter { } filterChain.doFilter(servletRequest, servletResponse); - + HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; Map<String, List<Object>> standardHeaders = ResponseHeaders.STANDARD_RESPONSE_HEADERS; for (Map.Entry<String, List<Object>> header : standardHeaders.entrySet()) { @@ -92,7 +96,9 @@ public class IndexFilter implements Filter { } private void checkWorkerApiAccess(IRequestInfo requestInfo) { - if (requestInfo.isTaskQueueRequest()) return; + if (requestInfo.isTaskQueueRequest()) { + return; + } throw AppException.createForbidden("invalid user agent, AppEngine Task Queue only"); } diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/package-info.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..45e225e75466a19c067498cbfb312e058771dcda --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * This module is used to keep minimum required bean configuration in the web environment required for request processing. All beans will be placed in a + * separate context. + */ +package org.opengroup.osdu.indexer.provider.gcp.web; diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/security/GcpSecurityConfig.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/security/GcpSecurityConfig.java similarity index 87% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/security/GcpSecurityConfig.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/security/GcpSecurityConfig.java index 47b42552ccdef36a19103027cdde783bd4d50359..c4242b232c3987150cf85697fed184c983189065 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/security/GcpSecurityConfig.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/security/GcpSecurityConfig.java @@ -15,7 +15,7 @@ limitations under the License. */ -package org.opengroup.osdu.indexer.security; +package org.opengroup.osdu.indexer.provider.gcp.web.security; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; @@ -33,15 +33,15 @@ public class GcpSecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.httpBasic().disable() - .csrf().disable(); //disable default authN. AuthN handled by endpoints proxy + .csrf().disable(); //disable default authN. AuthN handled by endpoints proxy } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/api-docs") - .antMatchers("/info") - .antMatchers("/swagger"); + .antMatchers("/info") + .antMatchers("/swagger"); } } diff --git a/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/AppExceptionHandler.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/AppExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..a766de2693d24cbc2ac119796e198d2881692363 --- /dev/null +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/AppExceptionHandler.java @@ -0,0 +1,58 @@ +package org.opengroup.osdu.indexer.provider.gcp.web.util; + +import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +@Slf4j +public class AppExceptionHandler { + + @ExceptionHandler(AppException.class) + public ResponseEntity<Object> handleAppExceptions(AppException e) { + return this.getErrorResponse(e); + } + + private ResponseEntity<Object> getErrorResponse(AppException e) { + + String exceptionMsg = Objects.nonNull(e.getOriginalException()) + ? e.getOriginalException().getMessage() + : e.getError().getMessage(); + + Integer errorCode = e.getError().getCode(); + + if (errorCode > 499) { + log.error(exceptionMsg, e.getOriginalException()); + } else { + log.warn(exceptionMsg, e.getOriginalException()); + } + + HttpStatus status = Objects.nonNull(HttpStatus.resolve(errorCode)) + ? HttpStatus.resolve(errorCode) + : resolveNotSupportedStatus(errorCode); + + return new ResponseEntity<>(e.getError(), status); + } + + //Currently not all codes provided from core can be resolved by HttpStatus + //example org.opengroup.osdu.core.common.model.http.RequestStatus have not supported by HttpStatus codes + private HttpStatus resolveNotSupportedStatus(int statusCode) { + if (statusCode > 99 && statusCode < 200) { + return HttpStatus.CONTINUE; + } + if (statusCode > 199 && statusCode < 300) { + return HttpStatus.NO_CONTENT; + } + if (statusCode > 299 && statusCode < 400) { + return HttpStatus.MULTIPLE_CHOICES; + } + if (statusCode > 399 && statusCode < 500) { + return HttpStatus.BAD_REQUEST; + } + return HttpStatus.INTERNAL_SERVER_ERROR; + } +} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/RequestInfoImpl.java b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/RequestInfoImpl.java similarity index 97% rename from provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/RequestInfoImpl.java rename to provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/RequestInfoImpl.java index 360f576f68021a2fdb398db4d5c368284069bc2e..af047854e9a9ae254379650685d70c8b6b02cc72 100644 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/RequestInfoImpl.java +++ b/provider/indexer-gc/src/main/java/org/opengroup/osdu/indexer/provider/gcp/web/util/RequestInfoImpl.java @@ -15,7 +15,7 @@ limitations under the License. */ -package org.opengroup.osdu.indexer.util; +package org.opengroup.osdu.indexer.provider.gcp.web.util; import static org.opengroup.osdu.core.common.model.http.DpsHeaders.AUTHORIZATION; @@ -38,12 +38,10 @@ import org.opengroup.osdu.core.common.provider.interfaces.IRequestInfo; import org.opengroup.osdu.core.gcp.model.CloudTaskHeaders; import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; import org.springframework.stereotype.Component; -import org.springframework.web.context.annotation.RequestScope; @Log @Component -@RequestScope public class RequestInfoImpl implements IRequestInfo { @Inject diff --git a/provider/indexer-gcp/src/main/resources/application-anthos.properties b/provider/indexer-gc/src/main/resources/application-anthos.properties similarity index 75% rename from provider/indexer-gcp/src/main/resources/application-anthos.properties rename to provider/indexer-gc/src/main/resources/application-anthos.properties index 67e63d39f7862bed24f541b7594661665b2214b1..491a6ee820619c5ef157905ab94779d8580a14e3 100644 --- a/provider/indexer-gcp/src/main/resources/application-anthos.properties +++ b/provider/indexer-gc/src/main/resources/application-anthos.properties @@ -4,3 +4,5 @@ partition-auth-enabled=false openid.provider-url= openid.provider-client-id= openid.provider-client-secret= +rabbitmq-retry-delay=20000 +rabbitmq-retry-limit=5 diff --git a/provider/indexer-gcp/src/main/resources/application-gcp.properties b/provider/indexer-gc/src/main/resources/application-gcp.properties similarity index 100% rename from provider/indexer-gcp/src/main/resources/application-gcp.properties rename to provider/indexer-gc/src/main/resources/application-gcp.properties diff --git a/provider/indexer-gcp/src/main/resources/application.properties b/provider/indexer-gc/src/main/resources/application.properties similarity index 79% rename from provider/indexer-gcp/src/main/resources/application.properties rename to provider/indexer-gc/src/main/resources/application.properties index bc53e7b9fc9bb11dcc343aad82aa59188d1a2137..721d5d180b4acc19d9ac61a0c525a5683980c8c4 100644 --- a/provider/indexer-gcp/src/main/resources/application.properties +++ b/provider/indexer-gc/src/main/resources/application.properties @@ -4,7 +4,7 @@ server.servlet.contextPath=/api/indexer/v2 #log config LOG_PREFIX=indexer -logging.level.org.springframework.web=${LOG_LEVEL:DEBUG} +logging.level.org.springframework=${LOG_LEVEL:DEBUG} #jvm config JAVA_OPTS=-Xms3072m -Xmx3072m @@ -14,9 +14,6 @@ JAVA_GC_OPTS=-XX:+UseG1GC -XX:+UseStringDeduplication -XX:InitiatingHeapOccupanc schema-cache-expiration=60 index-cache-expiration=60 elastic-cache-expiration=1440 -cursor-cache-expiration=60 -# Kinds Cache expiration 2*24*60 -kinds-cache-expiration=2880 # Attributes Cache expiration 2*24*60 attributes-cache-expiration=2880 kinds-redis-database=1 @@ -30,9 +27,6 @@ security.https.certificate.trust=false storage-records-by-kind-batch-size=20 storage-records-batch-size=20 -REDIS_GROUP_PORT=6379 -REDIS_GROUP_HOST=redis-cache-groups - REDIS_SEARCH_PORT=6379 REDIS_SEARCH_HOST=redis-cache-search @@ -56,6 +50,8 @@ SCHEMA_BASE_HOST=http://schema SCHEMA_PATH=/api/schema-service/v1/schema SCHEMA_HOST=${SCHEMA_BASE_HOST}${SCHEMA_PATH} -INDEXER_QUEUE_BASE_HOST=http://indexer-queue -INDEXER_QUEUE_PATH=/api/indexer-queue/v1/_dps/task-handlers/enqueue -INDEXER_QUEUE_HOST=${INDEXER_QUEUE_BASE_HOST}${INDEXER_QUEUE_PATH} +records-changed-topic-name=records-changed +schema-changed-topic-name=schema-changed +reprocess-topic-name=reprocess +status-changed-topic-name=indexing-progress + diff --git a/provider/indexer-gcp/src/main/resources/logback.xml b/provider/indexer-gc/src/main/resources/logback.xml similarity index 95% rename from provider/indexer-gcp/src/main/resources/logback.xml rename to provider/indexer-gc/src/main/resources/logback.xml index 3d4fbc039ba4367897cba9a478d4ed44a2059b76..cdfa2e625e54da4cfb64929655942bfd3b739cbb 100644 --- a/provider/indexer-gcp/src/main/resources/logback.xml +++ b/provider/indexer-gc/src/main/resources/logback.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> - <logger name="org.opengroup.osdu" level="DEBUG"/> + <logger name="org.opengroup.osdu" level="${LOG_LEVEL}"/> <springProfile name="local"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ddda259b30974da2e4495a3db0f023cc2abc57c1 --- /dev/null +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java @@ -0,0 +1,91 @@ +/* + * Copyright 2020-2022 Google LLC + * Copyright 2020-2022 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.middleware; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.indexer.provider.gcp.web.middleware.IndexFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Collections; + +@RunWith(MockitoJUnitRunner.class) +public class IndexFilterTest { + + @InjectMocks private IndexFilter indexFilter; + + @Mock private DpsHeaders dpsHeaders; + + @Test + public void shouldSetCorrectResponseHeaders() throws IOException, ServletException { + HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class); + HttpServletResponse httpServletResponse = Mockito.mock(HttpServletResponse.class); + FilterChain filterChain = Mockito.mock(FilterChain.class); + Mockito.when(httpServletRequest.getRequestURI()).thenReturn("https://test.com"); + Mockito.when(httpServletRequest.getMethod()).thenReturn("POST"); + Mockito.when(dpsHeaders.getCorrelationId()).thenReturn("correlation-id-value"); + + indexFilter.doFilter(httpServletRequest, httpServletResponse, filterChain); + + Mockito.verify(httpServletResponse) + .addHeader("Access-Control-Allow-Origin", Collections.singletonList("*").toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Access-Control-Allow-Headers", + Collections.singletonList( + "origin, content-type, accept, authorization, data-partition-id, correlation-id, appkey") + .toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Access-Control-Allow-Methods", + Collections.singletonList("GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH").toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Access-Control-Allow-Credentials", Collections.singletonList("true").toString()); + Mockito.verify(httpServletResponse) + .addHeader("X-Frame-Options", Collections.singletonList("DENY").toString()); + Mockito.verify(httpServletResponse) + .addHeader("X-XSS-Protection", Collections.singletonList("1; mode=block").toString()); + Mockito.verify(httpServletResponse) + .addHeader("X-Content-Type-Options", Collections.singletonList("nosniff").toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Cache-Control", + Collections.singletonList("no-cache, no-store, must-revalidate").toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Content-Security-Policy", Collections.singletonList("default-src 'self'").toString()); + Mockito.verify(httpServletResponse) + .addHeader( + "Strict-Transport-Security", + Collections.singletonList("max-age=31536000; includeSubDomains").toString()); + Mockito.verify(httpServletResponse) + .addHeader("Expires", Collections.singletonList("0").toString()); + Mockito.verify(httpServletResponse).addHeader("correlation-id", "correlation-id-value"); + Mockito.verify(filterChain).doFilter(httpServletRequest, httpServletResponse); + } +} diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiverTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiverTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9ca74b0822616d47ec3fd4f285598e0e071c2e19 --- /dev/null +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/IndexerOqmMessageReceiverTest.java @@ -0,0 +1,77 @@ +/* + * Copyright 2020-2023 Google LLC + * Copyright 2020-2023 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.junit.Before; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.FromDataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.gcp.oqm.model.OqmAckReplier; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; + +@RunWith(Theories.class) +public class IndexerOqmMessageReceiverTest { + + protected ThreadDpsHeaders dpsHeaders = Mockito.mock(ThreadDpsHeaders.class); + + protected TokenProvider tokenProvider = Mockito.mock(TokenProvider.class); + + protected OqmAckReplier ackReplier = Mockito.mock(OqmAckReplier.class); + + protected IndexerOqmMessageReceiver receiver; + + @Before + public void setUp(){ + IndexerOqmMessageReceiver indexerOqmMessageReceiver = new IndexerOqmMessageReceiver( + dpsHeaders, tokenProvider) { + @Override + protected void sendMessage(OqmMessage oqmMessage) throws Exception { + //do nothing + } + }; + receiver = Mockito.spy(indexerOqmMessageReceiver); + } + + @DataPoints("NOT_VALID_EVENTS") + public static List<String> notValidEvents() { + return ImmutableList.of( + "/test-events/empty-data-event.json", + "/test-events/empty-attributes-event.json" + ); + } + + @Theory + public void shouldNotConsumeNotValidEvent(@FromDataPoints("NOT_VALID_EVENTS") String fileName) + throws Exception { + OqmMessage oqmMessage = ReadFromFileUtil.readEventFromFile(fileName); + receiver.receiveMessage(oqmMessage, ackReplier); + verify(ackReplier).ack(); + verify(receiver, never()).sendMessage(any()); + } +} diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/ReadFromFileUtil.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/ReadFromFileUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6a44900e75b9eea3e002cfe09d61c3aaf84a059d --- /dev/null +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/ReadFromFileUtil.java @@ -0,0 +1,38 @@ +/* + * Copyright 2020-2023 Google LLC + * Copyright 2020-2023 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import com.google.gson.Gson; +import com.google.gson.stream.JsonReader; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; + +public class ReadFromFileUtil { + + private final static Gson gson = new Gson(); + + public static OqmMessage readEventFromFile(String filename) { + InputStream resourceAsStream = ReadFromFileUtil.class.getResourceAsStream(filename); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resourceAsStream)); + JsonReader reader = new JsonReader(bufferedReader); + return gson.fromJson(reader, OqmMessage.class); + } + +} diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiverTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiverTest.java new file mode 100644 index 0000000000000000000000000000000000000000..72540d02f6fce90d93bb9997740d56d993c9f416 --- /dev/null +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RecordsChangedMessageReceiverTest.java @@ -0,0 +1,69 @@ +/* + * Copyright 2020-2023 Google LLC + * Copyright 2020-2023 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import static org.mockito.Mockito.verify; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.junit.Before; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.FromDataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.gcp.oqm.model.OqmAckReplier; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.api.RecordIndexerApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; + +@RunWith(Theories.class) +public class RecordsChangedMessageReceiverTest { + + protected ThreadDpsHeaders dpsHeaders = Mockito.mock(ThreadDpsHeaders.class); + + protected TokenProvider tokenProvider = Mockito.mock(TokenProvider.class); + + protected OqmAckReplier ackReplier = Mockito.mock(OqmAckReplier.class); + + private RecordIndexerApi recordIndexerApi = Mockito.mock(RecordIndexerApi.class); + + private RecordsChangedMessageReceiver receiver; + + @Before + public void setUp() { + receiver = new RecordsChangedMessageReceiver(dpsHeaders, tokenProvider, recordIndexerApi); + } + + @DataPoints("VALID_EVENTS") + public static List<String> validEvents() { + return ImmutableList.of( + "/test-events/storage-index-event.json" + ); + } + + @Theory + public void shouldReceiveValidEvent( + @FromDataPoints("VALID_EVENTS") String fileName) throws Exception { + OqmMessage oqmMessage = ReadFromFileUtil.readEventFromFile(fileName); + receiver.receiveMessage(oqmMessage, ackReplier); + verify(ackReplier).ack(); + } +} diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiverTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiverTest.java new file mode 100644 index 0000000000000000000000000000000000000000..be752140196c8601cd17d2271dc1b2baef4411ef --- /dev/null +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/provider/gcp/indexing/processing/RepressorMessageReceiverTest.java @@ -0,0 +1,69 @@ +/* + * Copyright 2020-2023 Google LLC + * Copyright 2020-2023 EPAM Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opengroup.osdu.indexer.provider.gcp.indexing.processing; + +import static org.mockito.Mockito.verify; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.junit.Before; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.FromDataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.opengroup.osdu.core.auth.TokenProvider; +import org.opengroup.osdu.core.gcp.oqm.model.OqmAckReplier; +import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; +import org.opengroup.osdu.indexer.api.ReindexApi; +import org.opengroup.osdu.indexer.provider.gcp.indexing.scope.ThreadDpsHeaders; + +@RunWith(Theories.class) +public class RepressorMessageReceiverTest { + + protected ThreadDpsHeaders dpsHeaders = Mockito.mock(ThreadDpsHeaders.class); + + protected TokenProvider tokenProvider = Mockito.mock(TokenProvider.class); + + protected OqmAckReplier ackReplier = Mockito.mock(OqmAckReplier.class); + + private ReindexApi reindexApi = Mockito.mock(ReindexApi.class); + + private RepressorMessageReceiver receiver; + + @Before + public void setUp() { + receiver = new RepressorMessageReceiver(dpsHeaders, tokenProvider, reindexApi); + } + + @DataPoints("VALID_EVENTS") + public static List<String> validEvents() { + return ImmutableList.of( + "/test-events/reindex-event.json" + ); + } + + @Theory + public void shouldReceiveValidEvent( + @FromDataPoints("VALID_EVENTS") String fileName) throws Exception { + OqmMessage oqmMessage = ReadFromFileUtil.readEventFromFile(fileName); + receiver.receiveMessage(oqmMessage, ackReplier); + verify(ackReplier).ack(); + } +} diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/CronServiceImplTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/CronServiceImplTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/CronServiceImplTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/CronServiceImplTest.java diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceTest.java diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/IndexCopyServiceImplTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/IndexCopyServiceImplTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/IndexCopyServiceImplTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/IndexCopyServiceImplTest.java diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceTest.java diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceTest.java similarity index 100% rename from provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceTest.java rename to provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceTest.java diff --git a/provider/indexer-gcp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/provider/indexer-gc/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker similarity index 100% rename from provider/indexer-gcp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker rename to provider/indexer-gc/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/provider/indexer-gc/src/test/resources/test-events/empty-attributes-event.json b/provider/indexer-gc/src/test/resources/test-events/empty-attributes-event.json new file mode 100644 index 0000000000000000000000000000000000000000..dedbede7da290e9f474b6541c3047cc9ec83a28a --- /dev/null +++ b/provider/indexer-gc/src/test/resources/test-events/empty-attributes-event.json @@ -0,0 +1,5 @@ +{ + "id": "6523155266469533", + "data": "{\"url\":\"/api/indexer/v2/_dps/task-handlers/reindex-worker\",\"message\":\"{\\\"kind\\\":\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\",\\\"cursor\\\":\\\"12345\\\\u003d\\\\u003d\\\"}\",\"initialDelayMillis\":30000}", + "attributes": {} +} diff --git a/provider/indexer-gc/src/test/resources/test-events/empty-data-event.json b/provider/indexer-gc/src/test/resources/test-events/empty-data-event.json new file mode 100644 index 0000000000000000000000000000000000000000..e81f8e0413a527bbc627f4cbe5fc851fcd5a6eb7 --- /dev/null +++ b/provider/indexer-gc/src/test/resources/test-events/empty-data-event.json @@ -0,0 +1,11 @@ +{ + "id": "6524321148950995", + "data": "", + "attributes": { + "correlation-id": "fbe4a2b4-b3be-48f6-bc2a-b7dc068bce62", + "account-id": "osdu", + "data-partition-id": "osdu", + "user": "gcp-integration-tester@nice-etching-277309.iam.gserviceaccount.com", + "googclient_deliveryattempt": "1" + } +} diff --git a/provider/indexer-gc/src/test/resources/test-events/indexer-reprocess-event.json b/provider/indexer-gc/src/test/resources/test-events/indexer-reprocess-event.json new file mode 100644 index 0000000000000000000000000000000000000000..3ec3b31acdc096613cd564aac0b2238d638bfc00 --- /dev/null +++ b/provider/indexer-gc/src/test/resources/test-events/indexer-reprocess-event.json @@ -0,0 +1,11 @@ +{ + "id": "6524321148950995", + "data": "{\"url\":\"/api/indexer/v2/_dps/task-handlers/index-worker\",\"message\":\"{\\\"data\\\":\\\"[{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AgencyTrust\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AmendingWorkingInterestClarification\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AssetSaleAndPurchase\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AssetSalePurchase\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AssignmentNovation\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:AssignmentNovationAmending\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:CommonStreamOperating\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:Concession\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:ConfidentialDisclosure\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:Confidentiality\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:ConstructionOwnershipOperating\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:ConsultantBusinessDevelopment\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:ContractWellOperating\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:CrossConveyedPooling\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:CrossconveyedPooling\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:DataExchange\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:DataLicence\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:DataPurchase\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:DataRoom\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"},{\\\\\\\"id\\\\\\\":\\\\\\\"osdu:reference-data--AgreementType:DataSubscription\\\\\\\",\\\\\\\"kind\\\\\\\":\\\\\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\\\\\",\\\\\\\"op\\\\\\\":\\\\\\\"create\\\\\\\"}]\\\",\\\"attributes\\\":{\\\"correlation-id\\\":\\\"fbe4a2b4-b3be-48f6-bc2a-b7dc068bce62\\\",\\\"data-partition-id\\\":\\\"osdu\\\"}}\",\"initialDelayMillis\":30000}", + "attributes": { + "correlation-id": "fbe4a2b4-b3be-48f6-bc2a-b7dc068bce62", + "account-id": "osdu", + "data-partition-id": "osdu", + "user": "gcp-integration-tester@nice-etching-277309.iam.gserviceaccount.com", + "googclient_deliveryattempt": "1" + } +} diff --git a/provider/indexer-gc/src/test/resources/test-events/reindex-event.json b/provider/indexer-gc/src/test/resources/test-events/reindex-event.json new file mode 100644 index 0000000000000000000000000000000000000000..601e981be59935f99ad32a2bda99aab324fa5654 --- /dev/null +++ b/provider/indexer-gc/src/test/resources/test-events/reindex-event.json @@ -0,0 +1,11 @@ +{ + "id": "6523155266469533", + "data": "{\"url\":\"/api/indexer/v2/_dps/task-handlers/reindex-worker\",\"message\":\"{\\\"kind\\\":\\\"osdu:wks:reference-data--AgreementType:1.0.0\\\",\\\"cursor\\\":\\\"12345\\\\u003d\\\\u003d\\\"}\",\"initialDelayMillis\":30000}", + "attributes": { + "data-partition-id": "osdu", + "account-id": "osdu", + "correlation-id": "46086b67-541a-449e-ae75-5e52659a775c", + "user": "gcp-integration-tester@nice-etching-277309.iam.gserviceaccount.com", + "googclient_deliveryattempt": "1" + } +} diff --git a/provider/indexer-gc/src/test/resources/test-events/storage-index-event.json b/provider/indexer-gc/src/test/resources/test-events/storage-index-event.json new file mode 100644 index 0000000000000000000000000000000000000000..c84a1e28fe3f5b0fba11c25b06e0e46ce1051baa --- /dev/null +++ b/provider/indexer-gc/src/test/resources/test-events/storage-index-event.json @@ -0,0 +1,11 @@ +{ + "id": "6405379623020546", + "data": "[{\"id\":\"osdu:query:3b4ee153-48c4-4026-955a-59644ddaf3110\",\"kind\":\"osdu:ds:query:1.0.1670526387956\",\"op\":\"create\"}]", + "attributes": { + "account-id": "osdu", + "data-partition-id": "osdu", + "user": "gcp-integration-tester@nice-etching-277309.iam.gserviceaccount.com", + "correlation-id": "c4e8b544-ad55-44e0-a6c8-90afb25aaad9", + "googclient_deliveryattempt": "1" + } +} diff --git a/provider/indexer-gcp/azure-build.yml b/provider/indexer-gcp/azure-build.yml deleted file mode 100644 index 5e9afc90215791c3178ddecdbb3bec7d8be4f216..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/azure-build.yml +++ /dev/null @@ -1,48 +0,0 @@ -# Maven -# Build your Java project and run tests with Apache Maven. -# Add steps that analyze code, save build artifacts, deploy, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/java - -trigger: - branches: - include: - - master - paths: - exclude: - - README.md - - .gitignore - -pool: - name: dps-build - demands: maven - -steps: -- task: Maven@3 - displayName: 'build, test, code coverage' - inputs: - mavenPomFile: 'pom.xml' - options: '--settings ./indexer-core/maven/settings.xml -DVSTS_FEED_TOKEN=$(VSTS_FEED_TOKEN) -U' - testResultsFiles: '**/*/TEST-*.xml' - codeCoverageToolOption: JaCoCo - goals: 'install' - -- task: Maven@3 - displayName: 'build, test, code coverage' - inputs: - mavenPomFile: 'pom.xml' - options: '--settings ./provider/indexer-gcp/maven/settings.xml -DVSTS_FEED_TOKEN=$(VSTS_FEED_TOKEN) -P indexer-gcp' - testResultsFiles: '**/*/TEST-*.xml' - codeCoverageToolOption: JaCoCo - goals: 'package' - -- task: ShellScript@2 - displayName: 'Bash Script: Stage artifacts' - inputs: - scriptPath: 'provider/indexer-gcp/scripts/stage-artifacts.sh' - args: '$(Build.ArtifactStagingDirectory)' - -- task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: drop' - inputs: - PathtoPublish: '$(build.artifactstagingdirectory)' - condition: succeededOrFailed() diff --git a/provider/indexer-gcp/docs/anthos/README.md b/provider/indexer-gcp/docs/anthos/README.md deleted file mode 100644 index 00a46a783f1d9cbea3c9121ae2d7f7e044d34dde..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/docs/anthos/README.md +++ /dev/null @@ -1,248 +0,0 @@ -## Service Configuration for Anthos - -## Environment variables: - -Define the following environment variables. - -Must have: - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `SPRING_PROFILES_ACTIVE` | ex `anthos` | Spring profile that activate default configuration for GCP environment | false | - | -| `OPENID_PROVIDER_CLIENT_ID` | `*****` | Client id that represents this service and serves to request tokens, example `workload-identity-legal` |yes| - | -| `OPENID_PROVIDER_CLIENT_SECRET` | `*****` | This client secret that serves to request tokens| yes | - | -| `OPENID_PROVIDER_URL` | `https://keycloack.com/auth/realms/master` | URL of OpenID Connect provider, it will be used as `<OpenID URL> + /.well-known/openid-configuration` to auto configure endpoint for token request | no | - | -| `<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>` | ex `user` | Elasticsearch user, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | yes | - | -| `<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>` | ex `password` | Elasticsearch password, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | false | - | - -Defined in default application property file but possible to override: - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `LOG_PREFIX` | `service` | Logging prefix | no | - | -| `LOG_LEVEL` | `****` | Logging level | no | - | -| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | -| `REDIS_SEARCH_HOST` | ex `127.0.0.1` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_SEARCH_PORT` | ex `6379` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_GROUP_HOST` | ex `127.0.0.1` | Redis host for groups | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_GROUP_PORT` | ex `6379` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `PARTITION_HOST` | ex `https://partition.com` | Partition host | no | output of infrastructure deployment | -| `ENTITLEMENTS_HOST` | ex `https://entitlements.com` | Entitlements host | no | output of infrastructure deployment | -| `STORAGE_HOST` | ex `https://storage.com` | Storage host | no | output of infrastructure deployment | -| `INDEXER_QUEUE_HOST` | ex `http://indexer-queue/api/indexer-queue/v1/_dps/task-handlers/enqueue` | Indexer-Queue host endpoint used for reprocessing tasks| no | output of infrastructure deployment | -| `SCHEMA_BASE_HOST` | ex `https://schema.com` | Schema service host | no | output of infrastructure deployment | - -These variables define service behavior, and are used to switch between `anthos` or `gcp` environments, their overriding and usage in mixed mode was not tested. -Usage of spring profiles is preferred. - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `PARTITION_AUTH_ENABLED` | ex `true` or `false` | Disable or enable auth token provisioning for requests to Partition service | no | - | -| `OQMDRIVER` | `rabbitmq` or `pubsub` | Oqm driver mode that defines which message broker will be used | no | - | -| `SERVICE_TOKEN_PROVIDER` | `GCP` or `OPENID` |Service account token provider, `GCP` means use Google service account `OPEIND` means use OpenId provider like `Keycloak` | no | - | - -### Properties set in Partition service: - -Note that properties can be set in Partition as `sensitive` in that case in property `value` should be present not value itself, but ENV variable name. -This variable should be present in environment of service that need that variable. - -Example: -``` - "elasticsearch.port": { - "sensitive": false, <- value not sensitive - "value": "9243" <- will be used as is. - }, - "elasticsearch.password": { - "sensitive": true, <- value is sensitive - "value": "ELASTIC_SEARCH_PASSWORD_OSDU" <- service consumer should have env variable ELASTIC_SEARCH_PASSWORD_OSDU with elastic search password - } -``` - - -## Elasticsearch configuration - -**prefix:** `elasticsearch` - -It can be overridden by: - -- through the Spring Boot property `elastic-search-properties-prefix` -- environment variable `ELASTIC_SEARCH_PROPERTIES_PREFIX` - -**Propertyset:** - -| Property | Description | -| --- | --- | -| elasticsearch.host | server URL | -| elasticsearch.port | server port | -| elasticsearch.user | username | -| elasticsearch.password | password | - -<details><summary>Example of a definition for a single tenant</summary></details> - -``` - -curl -L -X PATCH 'http://partition.com/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ - "properties": { - "elasticsearch.host": { - "sensitive": false, - "value": "elastic.us-central1.gcp.cloud.es.io" - }, - "elasticsearch.port": { - "sensitive": false, - "value": "9243" - }, - "elasticsearch.user": { - "sensitive": true, - "value": "<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) - }, - "elasticsearch.password": { - "sensitive": true, - "value": "<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) - } - } -}' - -``` - -### For OQM RabbitMQ - -**prefix:** `oqm.rabbitmq` -It can be overridden by: - -- through the Spring Boot property `oqm.rabbitmq.partition-properties-prefix` -- environment variable `OQM_RABBITMQ_PARTITION_PROPERTIES_PREFIX`` - -**Propertyset** (for two types of connection: messaging and admin operations): - -| Property | Description | -| --- | --- | -| oqm.rabbitmq.amqp.host | messaging hostnameorIP | -| oqm.rabbitmq.amqp.port | - port | -| oqm.rabbitmq.amqp.path | - path | -| oqm.rabbitmq.amqp.username | - username | -| oqm.rabbitmq.amqp.password | - password | -| oqm.rabbitmq.admin.schema | admin host schema | -| oqm.rabbitmq.admin.host | - host name | -| oqm.rabbitmq.admin.port | - port | -| oqm.rabbitmq.admin.path | - path | -| oqm.rabbitmq.admin.username | - username | -| oqm.rabbitmq.admin.password | - password | - -<details><summary>Example of a single tenant definition</summary> - -``` - -curl -L -X PATCH 'https://dev.osdu.club/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ - "properties": { - "oqm.rabbitmq.amqp.host": { - "sensitive": false, - "value": "localhost" - }, - "oqm.rabbitmq.amqp.port": { - "sensitive": false, - "value": "5672" - }, - "oqm.rabbitmq.amqp.path": { - "sensitive": false, - "value": "" - }, - "oqm.rabbitmq.amqp.username": { - "sensitive": false, - "value": "guest" - }, - "oqm.rabbitmq.amqp.password": { - "sensitive": true, - "value": "guest" - }, - - "oqm.rabbitmq.admin.schema": { - "sensitive": false, - "value": "http" - }, - "oqm.rabbitmq.admin.host": { - "sensitive": false, - "value": "localhost" - }, - "oqm.rabbitmq.admin.port": { - "sensitive": false, - "value": "9002" - }, - "oqm.rabbitmq.admin.path": { - "sensitive": false, - "value": "/api" - }, - "oqm.rabbitmq.admin.username": { - "sensitive": false, - "value": "guest" - }, - "oqm.rabbitmq.admin.password": { - "sensitive": true, - "value": "guest" - } - } -}' - -``` - -</details> - -#### Exchanges and queues configuration - -At RabbitMq should be created exchange with name: - -**name:** `indexing-progress` - - - -## Keycloak configuration - -[Keycloak service accounts setup](https://www.keycloak.org/docs/latest/server_admin/#_service_accounts) - -Configure Clients. One Client per OSDU service. Set them “confidential”. - - - -Each Client has embedded Service Account (SA) option. Enable SAs for Clients, make “Authorization enabled”: - - - -Add `partition-and-entitlements` scope to `Default Client Scopes` and generate Keys. - -Give `client-id` and `client-secret` to services, which should be authorized within the platform. - -### Running E2E Tests - -You will need to have the following environment variables defined. - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `ELASTIC_PASSWORD` | `********` | Password for Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_USER_NAME` | `********` | User name for Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_HOST` | ex `elastic.domain.com` | Host Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_PORT` | ex `9243` | Port Elasticsearch | yes | output of infrastructure deployment | -| `INDEXER_HOST` | ex `https://os-indexer-dot-opendes.appspot.com/api/indexer/v2/` | Indexer API endpoint | no | output of infrastructure deployment | -| `ENTITLEMENTS_DOMAIN` | ex `opendes-gcp.projects.com` | OSDU R2 to run tests under | no | - | -| `OTHER_RELEVANT_DATA_COUNTRIES` | ex `US` | valid legal tag with a other relevant data countries | no | - | -| `LEGAL_TAG` | ex `opendes-demo-legaltag` | valid legal tag with a other relevant data countries from `DEFAULT_OTHER_RELEVANT_DATA_COUNTRIES` | no | - | -| `DEFAULT_DATA_PARTITION_ID_TENANT1` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | -| `DEFAULT_DATA_PARTITION_ID_TENANT2` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | -| `SEARCH_HOST` | ex `http://localhost:8080/api/search/v2/` | Endpoint of search service | no | - | -| `STORAGE_HOST` | ex `http://os-storage-dot-opendes.appspot.com/api/storage/v2/` | Storage API endpoint | no | output of infrastructure deployment | -| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | -| `TEST_OPENID_PROVIDER_CLIENT_ID` | `********` | Client Id for `$INTEGRATION_TESTER` | yes | -- | -| `TEST_OPENID_PROVIDER_CLIENT_SECRET` | `********` | | Client secret for `$INTEGRATION_TESTER` | -- | -| `TEST_OPENID_PROVIDER_URL` | `https://keycloak.com/auth/realms/osdu` | OpenID provider url | yes | -- | - -**Entitlements configuration for integration accounts** - -| INTEGRATION_TESTER | NO_DATA_ACCESS_TESTER | -| --- | --- | -| users<br/>users.datalake.ops<br/>service.storage.creator<br/>service.entitlements.user<br/>service.search.user<br/>service.search.admin<br/>data.test1<br/>data.integration.test<br/>users@{tenant1}@{domain}.com | - -Execute following command to build code and run all the integration tests: - -```bash -# Note: this assumes that the environment variables for integration tests as outlined -# above are already exported in your environment. -$ (cd testing/indexer-test-anthos/ && mvn clean test) -``` diff --git a/provider/indexer-gcp/docs/gcp/README.md b/provider/indexer-gcp/docs/gcp/README.md deleted file mode 100644 index c10d82b8d7b3f694f3c05a0df52b4cd3693e6f5c..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/docs/gcp/README.md +++ /dev/null @@ -1,155 +0,0 @@ -## Service Configuration for GCP - -## Environment variables: - -Define the following environment variables. - -Must have: - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `GOOGLE_AUDIENCES` | ex `*****.apps.googleusercontent.com` | Client ID for getting access to cloud resources | yes | https://console.cloud.google.com/apis/credentials | -| `SPRING_PROFILES_ACTIVE` | ex `gcp` | Spring profile that activate default configuration for GCP environment | false | - | -| `<ELASTICSEARCH_USER_ENV_VARIABLE_NAME>` | ex `user` | Elasticsearch user, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | yes | - | -| `<ELASTICSEARCH_PASSWORD_ENV_VARIABLE_NAME>` | ex `password` | Elasticsearch password, name of that variable not defined at the service level, the name will be received through partition service. Each tenant can have it's own ENV name value, and it must be present in ENV of Indexer service, see [Partition properties set](#Properties-set-in-Partition-service) | false | - | - -Defined in default application property file but possible to override: - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `LOG_PREFIX` | `service` | Logging prefix | no | - | -| `LOG_LEVEL` | `****` | Logging level | no | - | -| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | -| `REDIS_SEARCH_HOST` | ex `127.0.0.1` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_SEARCH_PORT` | ex `6379` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_GROUP_HOST` | ex `127.0.0.1` | Redis host for groups | no | https://console.cloud.google.com/memorystore/redis/instances | -| `REDIS_GROUP_PORT` | ex `6379` | Redis host for search | no | https://console.cloud.google.com/memorystore/redis/instances | -| `PARTITION_HOST` | ex `https://partition.com` | Partition host | no | output of infrastructure deployment | -| `ENTITLEMENTS_HOST` | ex `https://entitlements.com` | Entitlements host | no | output of infrastructure deployment | -| `STORAGE_HOST` | ex `https://storage.com` | Storage host | no | output of infrastructure deployment | -| `INDEXER_QUEUE_HOST` | ex `http://indexer-queue/api/indexer-queue/v1/_dps/task-handlers/enqueue` | Indexer-Queue host endpoint used for reprocessing tasks | no | output of infrastructure deployment | -| `SCHEMA_BASE_HOST` | ex `https://schema.com` | Schema service host | no | output of infrastructure deployment | -| `GOOGLE_APPLICATION_CREDENTIALS` | ex `/path/to/directory/service-key.json` | Service account credentials, you only need this if running locally | yes | https://console.cloud.google.com/iam-admin/serviceaccounts | - -These variables define service behavior, and are used to switch between `anthos` or `gcp` environments, their overriding and usage in mixed mode was not tested. -Usage of spring profiles is preferred. - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `PARTITION_AUTH_ENABLED` | ex `true` or `false` | Disable or enable auth token provisioning for requests to Partition service | no | - | -| `OQMDRIVER` | `rabbitmq` or `pubsub` | Oqm driver mode that defines which message broker will be used | no | - | -| `SERVICE_TOKEN_PROVIDER` | `GCP` or `OPENID` |Service account token provider, `GCP` means use Google service account `OPEIND` means use OpenId provider like `Keycloak` | no | - | - -## Pubsub configuration: - -At Pubsub should be created topic with name: - -**name:** `indexing-progress` - -### Properties set in Partition service: - -Note that properties can be set in Partition as `sensitive` in that case in property `value` should be present not value itself, but ENV variable name. -This variable should be present in environment of service that need that variable. - -Example: -``` - "elasticsearch.port": { - "sensitive": false, <- value not sensitive - "value": "9243" <- will be used as is. - }, - "elasticsearch.password": { - "sensitive": true, <- value is sensitive - "value": "ELASTIC_SEARCH_PASSWORD_OSDU" <- service consumer should have env variable ELASTIC_SEARCH_PASSWORD_OSDU with elastic search password - } -``` - -There is no hardcode in services, all behaviour defined by sensitivity of property. - -## Elasticsearch configuration - -**prefix:** `elasticsearch` - -It can be overridden by: - -- through the Spring Boot property `elastic-search-properties-prefix` -- environment variable `ELASTIC_SEARCH_PROPERTIES_PREFIX` - -**Propertyset:** - -| Property | Description | -| --- | --- | -| elasticsearch.host | server URL | -| elasticsearch.port | server port | -| elasticsearch.user | username | -| elasticsearch.password | password | - -<details><summary>Example of a definition for a single tenant</summary></details> - -``` - -curl -L -X PATCH 'http://partition.com/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ - "properties": { - "elasticsearch.host": { - "sensitive": false, - "value": "elastic.us-central1.gcp.cloud.es.io" - }, - "elasticsearch.port": { - "sensitive": false, - "value": "9243" - }, - "elasticsearch.user": { - "sensitive": true, - "value": "<USER_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) - }, - "elasticsearch.password": { - "sensitive": true, - "value": "<PASSWORD_ENV_VARIABLE_NAME>" <- (Not actual value, just name of env variable) - } - } -}' - -``` - -## Google cloud service account configuration : -TBD - -| Required roles | -| --- | -| - | - -### Running E2E Tests - -You will need to have the following environment variables defined. - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `ELASTIC_PASSWORD` | `********` | Password for Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_USER_NAME` | `********` | User name for Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_HOST` | ex `elastic.domain.com` | Host Elasticsearch | yes | output of infrastructure deployment | -| `ELASTIC_PORT` | ex `9243` | Port Elasticsearch | yes | output of infrastructure deployment | -| `GCLOUD_PROJECT` | ex `opendes` | Google Cloud Project Id| no | output of infrastructure deployment | -| `INDEXER_HOST` | ex `https://os-indexer-dot-opendes.appspot.com/api/indexer/v2/` | Indexer API endpoint | no | output of infrastructure deployment | -| `ENTITLEMENTS_DOMAIN` | ex `opendes-gcp.projects.com` | OSDU R2 to run tests under | no | - | -| `INTEGRATION_TEST_AUDIENCE` | `********` | client application ID | yes | https://console.cloud.google.com/apis/credentials | -| `OTHER_RELEVANT_DATA_COUNTRIES` | ex `US` | valid legal tag with a other relevant data countries | no | - | -| `LEGAL_TAG` | ex `opendes-demo-legaltag` | valid legal tag with a other relevant data countries from `DEFAULT_OTHER_RELEVANT_DATA_COUNTRIES` | no | - | -| `DEFAULT_DATA_PARTITION_ID_TENANT1` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | -| `DEFAULT_DATA_PARTITION_ID_TENANT2` | ex `opendes` | HTTP Header 'Data-Partition-ID' | no | - | -| `SEARCH_INTEGRATION_TESTER` | `********` | Service account for API calls. Note: this user must have entitlements configured already | yes | https://console.cloud.google.com/iam-admin/serviceaccounts | -| `SEARCH_HOST` | ex `http://localhost:8080/api/search/v2/` | Endpoint of search service | no | - | -| `STORAGE_HOST` | ex `http://os-storage-dot-opendes.appspot.com/api/storage/v2/` | Storage API endpoint | no | output of infrastructure deployment | -| `SECURITY_HTTPS_CERTIFICATE_TRUST` | ex `false` | Elastic client connection uses TrustSelfSignedStrategy(), if it is 'true' | false | output of infrastructure deployment | - -**Entitlements configuration for integration accounts** - -| INTEGRATION_TESTER | NO_DATA_ACCESS_TESTER | -| --- | --- | -| users<br/>users.datalake.ops<br/>service.storage.creator<br/>service.entitlements.user<br/>service.search.user<br/>service.search.admin<br/>data.test1<br/>data.integration.test<br/>users@{tenant1}@{domain}.com | - -Execute following command to build code and run all the integration tests: - -```bash -# Note: this assumes that the environment variables for integration tests as outlined -# above are already exported in your environment. -$ (cd testing/indexer-test-gcp/ && mvn clean test) -``` diff --git a/provider/indexer-gcp/kubernetes/deployments/deployment-os-indexer-service.yml b/provider/indexer-gcp/kubernetes/deployments/deployment-os-indexer-service.yml deleted file mode 100644 index 1a3a52456e0320876016f26a3d1f8cd1b914d6df..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/kubernetes/deployments/deployment-os-indexer-service.yml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: os-indexer-service - labels: - app: os-indexer-service -spec: - ports: - - name: http - port: 80 - targetPort: 8080 - selector: - app: os-indexer-service ---- -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: os-indexer-service -spec: - replicas: 1 - template: - metadata: - labels: - app: os-indexer-service - version: v1 - spec: - containers: - - name: os-indexer-app - envFrom: - - configMapRef: - name: os-service-config - image: gcr.io/opendes/os-indexer-app - imagePullPolicy: Always - ports: - - containerPort: 8080 diff --git a/provider/indexer-gcp/scripts/config.sh b/provider/indexer-gcp/scripts/config.sh deleted file mode 100644 index 102b1bc9b5e86f5a8d93cc5697a7dd0739fbeb5e..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/scripts/config.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -if [ "$PROJECT_ID" = "" ] -then - export PROJECT_ID=$(gcloud config get-value project) -fi diff --git a/provider/indexer-gcp/scripts/deploy.sh b/provider/indexer-gcp/scripts/deploy.sh deleted file mode 100644 index fce3deef9e7edc096071c60393b4844e65153057..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/scripts/deploy.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -# deploy script - -# Exit as soon as a command fails -set -e - -SCRIPTS_DIR=$(dirname $0) -DROP_DIR=$(dirname $SCRIPTS_DIR) - -# Go to drop directory -cd $DROP_DIR -# convert to full path -DROP_DIR=`pwd` -echo "Current working directory: $DROP_DIR" - -DEPLOY_DIR=$DROP_DIR/deploy - -if [ -s $DEPLOY_DIR ]; then - rm -rf $DEPLOY_DIR/* -else - mkdir $DEPLOY_DIR -fi - -DEPLOY_SCRIPTS_DIR=$DEPLOY_DIR/scripts - -mkdir -p $DEPLOY_SCRIPTS_DIR - -echo "Copy artifacts to folder: $DEPLOY_DIR" -cp $DROP_DIR/app.yaml $DEPLOY_DIR -cp $DROP_DIR/indexer-gcp-*.jar $DEPLOY_DIR -cp $DROP_DIR/testing.zip $DEPLOY_DIR -cp $DROP_DIR/scripts/* $DEPLOY_SCRIPTS_DIR -chmod a+x $DEPLOY_SCRIPTS_DIR/*.sh - -# Go to deploy directory -cd $DEPLOY_DIR -echo "Current working directory: $DEPLOY_DIR" - -source $DEPLOY_SCRIPTS_DIR/config.sh - -echo "Deploying to gcp" -$DEPLOY_SCRIPTS_DIR/deploy2gcp.sh -echo "Deployed to gcp" \ No newline at end of file diff --git a/provider/indexer-gcp/scripts/deploy2gcp.sh.tmpl b/provider/indexer-gcp/scripts/deploy2gcp.sh.tmpl deleted file mode 100644 index b3f5589121c6763544d3a2528b479a157bf5fd94..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/scripts/deploy2gcp.sh.tmpl +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash - -# Exit as soon as a command fails -set -e - -{{$definitionName := getenv "BUILD_DEFINITIONNAME" -}} -{{$sourceBranchName := getenv "BUILD_SOURCEBRANCHNAME" -}} -{{$buildNumber := getenv "BUILD_BUILDNUMBER" -}} - -BUILD_DEFINITIONNAME={{$definitionName}} -BUILD_SOURCEBRANCHNAME={{$sourceBranchName}} -BUILD_BUILDNUMBER={{$buildNumber}} - -SCRIPTS_DIR=$(dirname $0) -DEPLOY_DIR=$(dirname $SCRIPTS_DIR) - -# Go to deploy directory -cd $DEPLOY_DIR -# convert to full path -DEPLOY_DIR=`pwd` -echo "Current working directory: $DEPLOY_DIR" - -source $SCRIPTS_DIR/config.sh - -echo "This script will deploy the app to $PROJECT_ID" - -if [ "$REGION" = "" ] -then - REGION=$(gcloud config get-value compute/region) -fi - -echo "Environment" -echo " Project = $PROJECT_ID" -echo " Compute zone = $CLOUDSDK_COMPUTE_ZONE" -echo " Build definition = $BUILD_DEFINITIONNAME" -echo " Source branch = $BUILD_SOURCEBRANCHNAME" -echo " Build number = $BUILD_BUILDNUMBER" -echo " Directory = $DEPLOY_DIR" - -VERSION_NUMBER=$BUILD_BUILDNUMBER -VERSION_NUMBER=$(echo "$VERSION_NUMBER" | tr _ - | tr . - | tr '[:upper:]' '[:lower:]') - -count=$(gcloud app services list --project $PROJECT_ID | grep os-indexer | wc -l) -if [ $count -gt 0 ]; then - CURRENT_VERSION=$(gcloud app services describe os-indexer --project $PROJECT_ID --format=json | jq --raw-output '.split.allocations | keys[0]') -else - CURRENT_VERSION="" -fi - -echo "Current version = $CURRENT_VERSION" -echo "Version to be deployed = $VERSION_NUMBER" - -if [ "$VERSION_NUMBER" != "$CURRENT_VERSION" -o "$BUILD_FORCE_DEPLOY" = "true" ] -then - SERVICE_NAME="os-indexer" - # If the version $VERSION_NUMBER already exists, but not serving traffic, gcloud app deploy will fail. In this case, simply start that version and migrate traffic to it - doesVersionExist=`gcloud app versions list --service=$SERVICE_NAME --project=$PROJECT_ID | grep $VERSION_NUMBER | wc -l` - if [ "$doesVersionExist" -eq "1" ] - then - echo "Starting version $VERSION_NUMBER" - gcloud app versions start $VERSION_NUMBER --service=$SERVICE_NAME --project=$PROJECT_ID --quiet - echo "Migrating all traffic to version $VERSION_NUMBER" - gcloud app services set-traffic $SERVICE_NAME --splits $VERSION_NUMBER=1 --project=$PROJECT_ID --quiet - else - export INDEXER_HOSTNAME="os-indexer-dot-$PROJECT_ID.appspot.com" - - echo "Replacing GOOGLE_CLOUD_PROJECT_PLACE_HOLDER with $PROJECT_ID" - sed -i "s|GOOGLE_CLOUD_PROJECT_PLACE_HOLDER|$PROJECT_ID|g" app.yaml - sed -i -e "s|AUTHORIZE_API_VAR|$AUTHORIZE_API|g" app.yaml - sed -i -e "s|CRON_JOB_IP_VAR|$CRON_JOB_IP|g" app.yaml - sed -i -e "s|LEGAL_HOSTNAME_VAR|$LEGAL_HOSTNAME|g" app.yaml - sed -i -e "s|REGION_VAR|$REGION|g" app.yaml - sed -i -e "s|ENVIRONMENT|$ENVIRONMENT|g" app.yaml - - echo "Content of app.yaml:" - cat app.yaml - - echo "Deploying $INDEXER_HOSTNAME service" - gcloud app deploy --project=$PROJECT_ID --version=$VERSION_NUMBER app.yaml - echo "$INDEXER_HOSTNAME service deployed successfully" - - fi -else - echo "Not deploying the application because $VERSION_NUMBER is already deployed and force deploy flag is not set to true" -fi diff --git a/provider/indexer-gcp/scripts/stage-artifacts.sh b/provider/indexer-gcp/scripts/stage-artifacts.sh deleted file mode 100644 index 33e36f2c3a6430017f35f40f27f49acb7590fe55..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/scripts/stage-artifacts.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -# Exit as soon as a command fails -set -e - -if [ ! $# = 1 ]; then - echo "Usage: $0 dir" - exit 1 -fi - -STAGE_DIR=$1 - -cd $BUILD_REPOSITORY_LOCALPATH/provider/indexer-gcp/scripts - -source ./config.sh - -#apply gomplate to deploy2gcp.sh.tmpl -gomplate -f ./deploy2gcp.sh.tmpl -o ./deploy2gcp.sh -chmod a+x ./*.sh -echo "Contents of deploy2gcp.sh:" -cat ./deploy2gcp.sh - -cd .. - -# Upload all build and deploy scripts as artifacts -cp -R ./scripts $STAGE_DIR -# Upload the build generated .jar file as an artifact -cp ./target/indexer-gcp-*-spring-boot.jar $STAGE_DIR - -echo "Staging deployment artifacts to folder: $STAGE_DIR" -cp ./src/main/appengine/app.yaml $STAGE_DIR - -# set current directory back to build repo root -cd $BUILD_REPOSITORY_LOCALPATH - -# Zip integration tests and upload it as artifact -pushd testing -zip -r testing.zip * -cp testing.zip $STAGE_DIR -popd - diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/IndexerGcpApplication.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/IndexerGcpApplication.java deleted file mode 100644 index 6ee70305369eba6f03ef966ce1d442f336eaa87b..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/IndexerGcpApplication.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright 2020 Google LLC - Copyright 2020 EPAM Systems, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package org.opengroup.osdu.indexer; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@SpringBootApplication(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class }) -@Configuration -@ComponentScan({"org.opengroup.osdu"}) -public class IndexerGcpApplication { - - public static void main(String[] args) { - SpringApplication.run(IndexerGcpApplication.class, args); - } - -} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/ServletInitializer.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/ServletInitializer.java deleted file mode 100644 index dd76cbdb7cc7fa44954c59b4a0e69088dc532f55..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/ServletInitializer.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright 2020 Google LLC - Copyright 2020 EPAM Systems, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package org.opengroup.osdu.indexer; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -public class ServletInitializer extends SpringBootServletInitializer { - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(IndexerGcpApplication.class); - } -} - diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/ElasticCredentialsCache.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/ElasticCredentialsCache.java deleted file mode 100644 index 83ee124a964a148dcaba28b7b0e88d7c7a111b2f..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/ElasticCredentialsCache.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright 2020 Google LLC - Copyright 2020 EPAM Systems, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package org.opengroup.osdu.indexer.cache; - -import com.google.gson.Gson; -import java.util.Objects; -import javax.inject.Inject; -import org.opengroup.osdu.core.common.cache.RedisCache; -import org.opengroup.osdu.core.common.model.search.ClusterSettings; -import org.opengroup.osdu.core.common.provider.interfaces.IElasticCredentialsCache; -import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -public class ElasticCredentialsCache implements IElasticCredentialsCache<String, ClusterSettings>, AutoCloseable { - - private RedisCache<String, String> cache; - - @Inject - public ElasticCredentialsCache(final IndexerConfigurationProperties properties) { - this.cache = new RedisCache<>(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - properties.getElasticCacheExpiration() * 60, String.class, String.class); - } - - @Override - public void close() throws Exception { - this.cache.close(); - } - - @Override - public void put(String s, ClusterSettings o) { - String jsonSettings = new Gson().toJson(o); - this.cache.put(s, jsonSettings); - } - - @Override - public ClusterSettings get(String s) { - String jsonSettings = this.cache.get(s); - if (Objects.isNull(jsonSettings) || jsonSettings.isEmpty()) { - return null; - } - return new Gson().fromJson(jsonSettings, ClusterSettings.class); - } - - @Override - public void delete(String s) { - this.cache.delete(s); - } - - @Override - public void clearAll() { - this.cache.clearAll(); - } -} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/JwtCache.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/JwtCache.java deleted file mode 100644 index 4ba364f5bd4523a44e07f74ec5dcd18c10f4ed11..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/JwtCache.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2020 Google LLC - Copyright 2020 EPAM Systems, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package org.opengroup.osdu.indexer.cache; - -import org.opengroup.osdu.core.common.cache.RedisCache; -import org.opengroup.osdu.core.common.model.search.IdToken; -import org.opengroup.osdu.core.common.provider.interfaces.IJwtCache; -import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; - -@Component -public class JwtCache implements IJwtCache<String, IdToken>, AutoCloseable { - RedisCache<String, IdToken> cache; - - - // google service account id_token can be requested only for 1 hr - private static final int EXPIRED_AFTER = 59; - @Inject - public JwtCache(final IndexerConfigurationProperties properties) { - cache = new RedisCache<>(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - EXPIRED_AFTER * 60, String.class, IdToken.class); - } - - @Override - public void close() throws Exception { - this.cache.close(); - } - - @Override - public void put(String s, IdToken o) { - this.cache.put(s, o); - } - - @Override - public IdToken get(String s) { - return this.cache.get(s); - } - - @Override - public void delete(String s) { - this.cache.delete(s); - } - - @Override - public void clearAll() { - this.cache.clearAll(); - } -} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/KindsCache.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/KindsCache.java deleted file mode 100644 index e20d2f3ca240d33b44cc3bb9261593cae657f8ee..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/cache/KindsCache.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2020 Google LLC - Copyright 2020 EPAM Systems, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package org.opengroup.osdu.indexer.cache; - -import org.opengroup.osdu.core.common.cache.RedisCache; -import org.opengroup.osdu.core.common.provider.interfaces.IKindsCache; -import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; -import java.util.Set; - -@Component -public class KindsCache implements IKindsCache<String, Set>, AutoCloseable { - private RedisCache<String, Set> cache; - - @Inject - public KindsCache(final IndexerConfigurationProperties properties) { - cache = new RedisCache<>(properties.getRedisSearchHost(), Integer.parseInt(properties.getRedisSearchPort()), - properties.getKindsCacheExpiration() * 60, - properties.getKindsRedisDatabase(), String.class, Set.class); - } - - @Override - public void close() throws Exception { - this.cache.close(); - } - - @Override - public void put(String s, Set o) { - this.cache.put(s, o); - } - - @Override - public Set get(String s) { - return this.cache.get(s); - } - - @Override - public void delete(String s) { - this.cache.delete(s); - } - - @Override - public void clearAll() { - this.cache.clearAll(); - } -} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java deleted file mode 100644 index 37e23c94763621e6b06123f2e51cdfd74f7f1507..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2017-2019, Schlumberger -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.opengroup.osdu.indexer.di; - -import org.opengroup.osdu.core.common.entitlements.EntitlementsAPIConfig; -import org.opengroup.osdu.core.common.entitlements.EntitlementsFactory; -import org.opengroup.osdu.core.common.entitlements.IEntitlementsFactory; -import org.opengroup.osdu.core.common.http.json.HttpResponseBodyMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.beans.factory.config.AbstractFactoryBean; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; -import org.springframework.web.context.annotation.RequestScope; - -@Component -@RequestScope -@Lazy -public class EntitlementsClientFactory extends AbstractFactoryBean<IEntitlementsFactory> { - - @Value("${AUTHORIZE_API}") - private String authorizeApi; - - @Value("${AUTHORIZE_API_KEY:}") - private String authorizeApiKey; - - @Autowired - private HttpResponseBodyMapper mapper; - - @Override - protected IEntitlementsFactory createInstance() throws Exception { - - return new EntitlementsFactory(EntitlementsAPIConfig - .builder() - .rootUrl(authorizeApi) - .apiKey(authorizeApiKey) - .build(), - mapper); - } - - @Override - public Class<?> getObjectType() { - return IEntitlementsFactory.class; - } -} \ No newline at end of file diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/publish/PublisherImpl.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/publish/PublisherImpl.java deleted file mode 100644 index 2a35a96f5684f9e0c1227d549c0419da067c8118..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/publish/PublisherImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2017-2019, Schlumberger -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.opengroup.osdu.indexer.publish; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import java.util.HashMap; -import java.util.Map; -import lombok.RequiredArgsConstructor; -import lombok.extern.java.Log; -import org.opengroup.osdu.core.common.model.http.DpsHeaders; -import org.opengroup.osdu.core.common.model.indexer.JobStatus; -import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriver; -import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; -import org.opengroup.osdu.core.gcp.oqm.model.OqmMessage; -import org.opengroup.osdu.core.gcp.oqm.model.OqmTopic; -import org.opengroup.osdu.indexer.provider.interfaces.IPublisher; -import org.springframework.stereotype.Component; -import org.springframework.web.context.annotation.RequestScope; - -@Log -@Component -@RequestScope -@RequiredArgsConstructor -public class PublisherImpl implements IPublisher { - - private static final String TOPIC_ID = "indexing-progress"; - - private final OqmDriver driver; - - private final OqmTopic oqmTopic = OqmTopic.builder().name(TOPIC_ID).build(); - - @Override - public void publishStatusChangedTagsToTopic(DpsHeaders headers, JobStatus indexerBatchStatus) { - OqmDestination oqmDestination = OqmDestination.builder().partitionId(headers.getPartitionId()) - .build(); - String json = generatePubSubMessage(indexerBatchStatus); - - Map<String, String> attributes = getAttributes(headers); - OqmMessage oqmMessage = OqmMessage.builder().data(json).attributes(attributes).build(); - driver.publish(oqmMessage, oqmTopic, oqmDestination); - } - - private Map<String, String> getAttributes(DpsHeaders headers) { - Map<String, String> attributes = new HashMap<>(); - attributes.put(DpsHeaders.ACCOUNT_ID, headers.getPartitionIdWithFallbackToAccountId()); - attributes.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionIdWithFallbackToAccountId()); - headers.addCorrelationIdIfMissing(); - attributes.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); - return attributes; - } - - private String generatePubSubMessage(JobStatus jobStatus) { - Gson gson = new GsonBuilder().create(); - JsonElement statusChangedTagsJson = gson.toJsonTree(jobStatus, JobStatus.class); - return statusChangedTagsJson.toString(); - } -} \ No newline at end of file diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/AppExceptionHandler.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/AppExceptionHandler.java deleted file mode 100644 index ebfe87ef077c4bbb244a1b68ba94d9138bfc0753..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/AppExceptionHandler.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.opengroup.osdu.indexer.util; - -import java.util.Objects; -import lombok.extern.slf4j.Slf4j; -import org.opengroup.osdu.core.common.model.http.AppException; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; - -@ControllerAdvice -@Slf4j -public class AppExceptionHandler { - - @ExceptionHandler(AppException.class) - public ResponseEntity<Object> handleAppExceptions(AppException e) { - return this.getErrorResponse(e); - } - - private ResponseEntity<Object> getErrorResponse(AppException e) { - - String exceptionMsg = Objects.nonNull(e.getOriginalException()) - ? e.getOriginalException().getMessage() - : e.getError().getMessage(); - - Integer errorCode = e.getError().getCode(); - - if (errorCode > 499) { - log.error(exceptionMsg, e.getOriginalException()); - } else { - log.warn(exceptionMsg, e.getOriginalException()); - } - - HttpStatus status = Objects.nonNull(HttpStatus.resolve(errorCode)) - ? HttpStatus.resolve(errorCode) - : resolveNotSupportedStatus(errorCode); - - return new ResponseEntity<>(e.getError(), status); - } - - //Currently not all codes provided from core can be resolved by HttpStatus - //example org.opengroup.osdu.core.common.model.http.RequestStatus have not supported by HttpStatus codes - private HttpStatus resolveNotSupportedStatus(int statusCode) { - if (statusCode > 99 && statusCode < 200) { - return HttpStatus.CONTINUE; - } - if (statusCode > 199 && statusCode < 300) { - return HttpStatus.NO_CONTENT; - } - if (statusCode > 299 && statusCode < 400) { - return HttpStatus.MULTIPLE_CHOICES; - } - if (statusCode > 399 && statusCode < 500) { - return HttpStatus.BAD_REQUEST; - } - return HttpStatus.INTERNAL_SERVER_ERROR; - } -} diff --git a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/DpsHeaderFactoryGcp.java b/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/DpsHeaderFactoryGcp.java deleted file mode 100644 index 75b7b744f9e26ce7fb58315ccb14c28b34eef42a..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/main/java/org/opengroup/osdu/indexer/util/DpsHeaderFactoryGcp.java +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2017-2019, Schlumberger -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.opengroup.osdu.indexer.util; - -import java.util.Collections; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.servlet.http.HttpServletRequest; -import javax.inject.Inject; - -import com.google.common.base.Strings; -import org.opengroup.osdu.core.common.model.http.DpsHeaders; - -import org.opengroup.osdu.core.gcp.model.CloudTaskHeaders; -import org.opengroup.osdu.core.gcp.util.TraceIdExtractor; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; -import org.springframework.web.context.annotation.RequestScope; - -@Component -@RequestScope -@Primary -public class DpsHeaderFactoryGcp extends DpsHeaders { - - @Inject - public DpsHeaderFactoryGcp(HttpServletRequest request) { - - Map<String, String> headers = Collections - .list(request.getHeaderNames()) - .stream() - .collect(Collectors.toMap(h -> h, request::getHeader)); - - String traceContext = headers.get(CloudTaskHeaders.CLOUD_TRACE_CONTEXT); - - if(!Strings.isNullOrEmpty(traceContext)){ - headers.put(CloudTaskHeaders.TRACE_ID, TraceIdExtractor.getTraceId(traceContext)); - } - - this.addFromMap(headers); - - // Add Correlation ID if missing - this.addCorrelationIdIfMissing(); - } -} \ No newline at end of file diff --git a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java b/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java deleted file mode 100644 index bd698e00c523ed700c606dd08e9547db85221ba8..0000000000000000000000000000000000000000 --- a/provider/indexer-gcp/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.opengroup.osdu.indexer.middleware; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; -import org.opengroup.osdu.core.common.model.http.DpsHeaders; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.util.Collections; - -@RunWith(MockitoJUnitRunner.class) -public class IndexFilterTest { - - @InjectMocks - private IndexFilter indexFilter; - - @Mock - private DpsHeaders dpsHeaders; - - @Test - public void shouldSetCorrectResponseHeaders() throws IOException, ServletException { - HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class); - HttpServletResponse httpServletResponse = Mockito.mock(HttpServletResponse.class); - FilterChain filterChain = Mockito.mock(FilterChain.class); - Mockito.when(httpServletRequest.getRequestURI()).thenReturn("https://test.com"); - Mockito.when(httpServletRequest.getMethod()).thenReturn("POST"); - Mockito.when(dpsHeaders.getCorrelationId()).thenReturn("correlation-id-value"); - - indexFilter.doFilter(httpServletRequest, httpServletResponse, filterChain); - - Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Origin", Collections.singletonList("*").toString()); - Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Headers", Collections.singletonList("origin, content-type, accept, authorization, data-partition-id, correlation-id, appkey").toString()); - Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Methods", Collections.singletonList("GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH").toString()); - Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Credentials", Collections.singletonList("true").toString()); - Mockito.verify(httpServletResponse).addHeader("X-Frame-Options", Collections.singletonList("DENY").toString()); - Mockito.verify(httpServletResponse).addHeader("X-XSS-Protection", Collections.singletonList("1; mode=block").toString()); - Mockito.verify(httpServletResponse).addHeader("X-Content-Type-Options", Collections.singletonList("nosniff").toString()); - Mockito.verify(httpServletResponse).addHeader("Cache-Control", Collections.singletonList("no-cache, no-store, must-revalidate").toString()); - Mockito.verify(httpServletResponse).addHeader("Content-Security-Policy", Collections.singletonList("default-src 'self'").toString()); - Mockito.verify(httpServletResponse).addHeader("Strict-Transport-Security", Collections.singletonList("max-age=31536000; includeSubDomains").toString()); - Mockito.verify(httpServletResponse).addHeader("Expires", Collections.singletonList("0").toString()); - Mockito.verify(httpServletResponse).addHeader("correlation-id", "correlation-id-value"); - Mockito.verify(filterChain).doFilter(httpServletRequest, httpServletResponse); - } -} diff --git a/provider/indexer-ibm/pom.xml b/provider/indexer-ibm/pom.xml index edb6132ee5f712855426b945c3129cb409aee428..787b45c6de6af106eb6b1f4e708b903bbffd5dbc 100644 --- a/provider/indexer-ibm/pom.xml +++ b/provider/indexer-ibm/pom.xml @@ -21,7 +21,7 @@ <parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-service</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -31,11 +31,11 @@ <packaging>jar</packaging> <properties> - <tomcat.embed.core.version>9.0.67</tomcat.embed.core.version> + <tomcat.embed.core.version>9.0.68</tomcat.embed.core.version> <os-core-lib-ibm.version>0.16.0-rc1</os-core-lib-ibm.version> <spring-webmvc.version>5.3.22</spring-webmvc.version> - <jackson-databind.version>2.13.2.2</jackson-databind.version> - <jackson.version>2.13.2</jackson.version> + <jackson-databind.version>2.13.4.2</jackson-databind.version> + <jackson.version>2.13.4</jackson.version> </properties> <profiles> @@ -57,7 +57,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>io.netty</groupId> @@ -215,6 +215,7 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-maven-plugin.version}</version> <executions> <execution> <goals> diff --git a/provider/indexer-ibm/src/main/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceIBMImpl.java b/provider/indexer-ibm/src/main/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceIBMImpl.java index 6c2f6ce6b94811a0609bfb4913a8748e7a5c46f0..fc8e83cabb79c4e5f8992eecdaeed91e4924adc8 100644 --- a/provider/indexer-ibm/src/main/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceIBMImpl.java +++ b/provider/indexer-ibm/src/main/java/org/opengroup/osdu/indexer/service/ElasticSettingServiceIBMImpl.java @@ -6,13 +6,20 @@ package org.opengroup.osdu.indexer.service; import org.apache.http.HttpStatus; import org.opengroup.osdu.core.common.model.search.ClusterSettings; import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.multitenancy.ITenantInfoService; import org.opengroup.osdu.core.common.model.http.AppException; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.provider.interfaces.IElasticRepository; +import org.opengroup.osdu.indexer.config.IndexerConfigurationProperties; import org.opengroup.osdu.core.common.provider.interfaces.IElasticCredentialsCache; import org.opengroup.osdu.core.common.model.indexer.IElasticSettingService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import javax.inject.Inject; @Service @@ -27,6 +34,10 @@ public class ElasticSettingServiceIBMImpl implements IElasticSettingService { private IElasticCredentialsCache elasticCredentialCache; @Inject private JaxRsDpsLog logger; + @Inject + private javax.inject.Provider<ITenantInfoService> tenantInfoServiceProvider; + @Inject + private IndexerConfigurationProperties configurationProperties; @Override public ClusterSettings getElasticClusterInformation() { @@ -47,4 +58,34 @@ public class ElasticSettingServiceIBMImpl implements IElasticSettingService { this.elasticCredentialCache.put(cacheKey, clusterInfo); return clusterInfo; } + + @Override + public Map<String, ClusterSettings> getAllClustersSettings() { + List<TenantInfo> tenantInfos = tenantInfoServiceProvider.get().getAllTenantInfos(); + return tenantInfos.stream() + .collect(Collectors.toMap(TenantInfo::getDataPartitionId, + this::getClusterSettingsByTenantInfo)); + } + + private ClusterSettings getClusterSettingsByTenantInfo(TenantInfo tenantInfo) { + String cacheKey = String.format("%s-%s", configurationProperties.getGaeService(), + tenantInfo.getName()); + + ClusterSettings clusterInfo = (ClusterSettings) this.elasticCredentialCache.get(cacheKey); + if (clusterInfo != null) { + return clusterInfo; + } + + logger.warning(String.format("elastic-credential cache missed for tenant: %s", + tenantInfo.getName())); + + clusterInfo = this.elasticRepository.getElasticClusterSettings(tenantInfo); + if (clusterInfo == null) { + throw new AppException(HttpStatus.SC_NOT_FOUND, "Tenant not found", + "No information about the given tenant was found"); + } + + this.elasticCredentialCache.put(cacheKey, clusterInfo); + return clusterInfo; + } } diff --git a/testing/indexer-test-anthos/pom.xml b/testing/indexer-test-anthos/pom.xml index 234c6f0ba27d344dfcc101889336ae938c9bf456..1a521499d7790f7ea1e1df1a51cc8eebe957ff45 100644 --- a/testing/indexer-test-anthos/pom.xml +++ b/testing/indexer-test-anthos/pom.xml @@ -20,7 +20,7 @@ <parent> <artifactId>indexer-test</artifactId> <groupId>org.opengroup.osdu</groupId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> @@ -36,7 +36,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.nimbusds</groupId> diff --git a/testing/indexer-test-aws/pom.xml b/testing/indexer-test-aws/pom.xml index ac44e96ee93b4fea1677bc2e35a7e8f9acc4f938..5a33fa2c96c7f7e87e87e5ef13d18eef22b371f0 100644 --- a/testing/indexer-test-aws/pom.xml +++ b/testing/indexer-test-aws/pom.xml @@ -21,13 +21,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-aws</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> @@ -44,7 +44,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </dependency> <!-- AWS specific packages --> diff --git a/testing/indexer-test-azure/pom.xml b/testing/indexer-test-azure/pom.xml index d2c695eb174b725dd96288ae256399588b08bd2d..1f441ec059f5a65b4a6cc6764190e068b1cc20c9 100644 --- a/testing/indexer-test-azure/pom.xml +++ b/testing/indexer-test-azure/pom.xml @@ -21,13 +21,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-azure</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> @@ -46,7 +46,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> diff --git a/testing/indexer-test-azure/src/test/java/org/opengroup/osdu/util/AzureHTTPClient.java b/testing/indexer-test-azure/src/test/java/org/opengroup/osdu/util/AzureHTTPClient.java index 954f3acb24c7fde5fa13682a17f1eddc3eae7721..07a94a76e2443a0b3358e2169e237949b39054fc 100644 --- a/testing/indexer-test-azure/src/test/java/org/opengroup/osdu/util/AzureHTTPClient.java +++ b/testing/indexer-test-azure/src/test/java/org/opengroup/osdu/util/AzureHTTPClient.java @@ -14,10 +14,15 @@ package org.opengroup.osdu.util; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.WebResource; import lombok.ToString; import lombok.extern.java.Log; - +import javax.ws.rs.core.Response; +import java.net.SocketTimeoutException; +import java.util.Map; @Log @ToString public class AzureHTTPClient extends HTTPClient { @@ -35,4 +40,43 @@ public class AzureHTTPClient extends HTTPClient { } return token; } -} \ No newline at end of file + public ClientResponse send(String httpMethod, String url, String payLoad, Map<String, String> headers, String token) { + ClientResponse response; + System.out.println("in Azure send method"); + String correlationId = java.util.UUID.randomUUID().toString(); + log.info(String.format("Request correlation id: %s", correlationId)); + headers.put(HEADER_CORRELATION_ID, correlationId); + Client client = getClient(); + client.setReadTimeout(300000); + client.setConnectTimeout(300000); + log.info(String.format("httpMethod: %s", httpMethod)); + log.info(String.format("payLoad: %s", payLoad)); + log.info(String.format("headers: %s", headers)); + log.info(String.format("URL: %s", url)); + WebResource webResource = client.resource(url); + log.info("waiting on response in azure send"); + int retryCount = 2; + try{ + response = this.getClientResponse(httpMethod, payLoad, webResource, headers, token); + while (retryCount > 0) { + if (response.getStatusInfo().getFamily().equals(Response.Status.Family.valueOf("SERVER_ERROR"))) { + log.info(String.format("got resoponse : %s", response.getStatusInfo())); + Thread.sleep(5000); + log.info(String.format("Retrying --- ")); + response = this.getClientResponse(httpMethod, payLoad, webResource, headers, token); + } else + break; + retryCount--; + } + System.out.println("sending response from azure send method"); + return response; + } catch (Exception e) { + if (e.getCause() instanceof SocketTimeoutException) { + System.out.println("Retrying in case of socket timeout exception"); + return this.getClientResponse(httpMethod, payLoad, webResource, headers, token); + } + e.printStackTrace(); + throw new AssertionError("Error: Send request error", e); + } + } +} diff --git a/testing/indexer-test-core/pom.xml b/testing/indexer-test-core/pom.xml index 20f8cf62b36732ca93d9d17b775d68d9678f7af0..b1a4bb19f0985c899b10a85a162cd8b1ce0f6934 100644 --- a/testing/indexer-test-core/pom.xml +++ b/testing/indexer-test-core/pom.xml @@ -5,13 +5,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <properties> <maven.compiler.target>1.8</maven.compiler.target> diff --git a/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/Config.java b/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/Config.java index 1c16fb2c504355dd28c80c6337ee4a0cb954e625..247213e690389136eab11202e3fd38cfb6144bbc 100644 --- a/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/Config.java +++ b/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/Config.java @@ -16,8 +16,6 @@ public class Config { private static final String DEFAULT_DATA_PARTITION_ID_TENANT2 = ""; private static final String DEFAULT_SEARCH_INTEGRATION_TESTER = ""; - private static final String DEFAULT_TARGET_AUDIENCE = ""; - private static final String DEFAULT_LEGAL_TAG = ""; private static final String DEFAULT_OTHER_RELEVANT_DATA_COUNTRIES = ""; @@ -39,10 +37,6 @@ public class Config { return getEnvironmentVariableOrDefaultValue("LEGAL_TAG", DEFAULT_LEGAL_TAG); } - public static String getTargetAudience() { - return getEnvironmentVariableOrDefaultValue("INTEGRATION_TEST_AUDIENCE", DEFAULT_TARGET_AUDIENCE); - } - public static String getKeyValue() { return getEnvironmentVariableOrDefaultValue("SEARCH_INTEGRATION_TESTER", DEFAULT_SEARCH_INTEGRATION_TESTER); } diff --git a/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/HTTPClient.java b/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/HTTPClient.java index 1ce98c78a3710d279c9500d01a80e2ccaa0075f2..dde76bb8801939a4d148925d563181fcfde2ff35 100644 --- a/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/HTTPClient.java +++ b/testing/indexer-test-core/src/main/java/org/opengroup/osdu/util/HTTPClient.java @@ -24,11 +24,11 @@ public abstract class HTTPClient { private static Random random = new Random(); private final int MAX_ID_SIZE = 50; - private static final String HEADER_CORRELATION_ID = "correlation-id"; + protected static final String HEADER_CORRELATION_ID = "correlation-id"; public abstract String getAccessToken(); - private static Client getClient() { + protected static Client getClient() { TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { @@ -60,8 +60,8 @@ public abstract class HTTPClient { log.info(String.format("Request correlation id: %s", correlationId)); headers.put(HEADER_CORRELATION_ID, correlationId); Client client = getClient(); - client.setReadTimeout(180000); - client.setConnectTimeout(10000); + client.setReadTimeout(300000); + client.setConnectTimeout(300000); log.info("URL: = " + url); WebResource webResource = client.resource(url); response = this.getClientResponse(httpMethod, payLoad, webResource, headers, token); @@ -73,7 +73,7 @@ public abstract class HTTPClient { return response; } - private ClientResponse getClientResponse(String httpMethod, String requestBody, WebResource webResource, Map<String, String> headers, String token) { + protected ClientResponse getClientResponse(String httpMethod, String requestBody, WebResource webResource, Map<String, String> headers, String token) { final WebResource.Builder builder = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).header("Authorization", token); headers.forEach(builder::header); log.info("making request to datalake api"); @@ -91,4 +91,4 @@ public abstract class HTTPClient { currentHeaders.put("data-partition-id", value); return currentHeaders; } -} \ No newline at end of file +} diff --git a/testing/indexer-test-core/src/main/resources/testData/index_record_seismic_survey.json b/testing/indexer-test-core/src/main/resources/testData/index_record_seismic_survey.json index 1ea593090c11e3c1648a2ab8584c084bd18476ac..362a4468008c4f2bfad21ee37ec6d1077fadb33a 100644 --- a/testing/indexer-test-core/src/main/resources/testData/index_record_seismic_survey.json +++ b/testing/indexer-test-core/src/main/resources/testData/index_record_seismic_survey.json @@ -10,46220 +10,10256 @@ "coordinates": [ [ [ - 2058657, - 5960612 + 1151937, + 4843801 ], [ - 2058667, - 5960608 + 1151932, + 4843790 ], [ - 2058679, - 5960603 + 1151925, + 4843780 ], [ - 2058691, - 5960599 + 1151919, + 4843769 ], [ - 2058703, - 5960593 + 1151912, + 4843759 ], [ - 2058714, - 5960589 + 1151906, + 4843748 ], [ - 2058726, - 5960584 + 1151899, + 4843738 ], [ - 2058738, - 5960580 + 1151893, + 4843727 ], [ - 2058748, - 5960574 + 1151886, + 4843717 ], [ - 2058760, - 5960570 + 1151880, + 4843706 ], [ - 2058772, - 5960565 + 1151873, + 4843696 ], [ - 2058783, - 5960560 + 1151867, + 4843685 ], [ - 2058795, - 5960555 + 1151860, + 4843675 ], [ - 2058807, - 5960551 + 1151854, + 4843664 ], [ - 2058817, - 5960546 + 1151847, + 4843654 ], [ - 2058829, - 5960541 + 1151841, + 4843643 ], [ - 2058841, - 5960536 + 1151834, + 4843633 ], [ - 2058852, - 5960532 + 1151828, + 4843622 ], [ - 2058864, - 5960526 + 1151821, + 4843611 ], [ - 2058876, - 5960522 + 1151815, + 4843600 ], [ - 2058886, - 5960516 + 1151808, + 4843590 ], [ - 2058898, - 5960512 + 1151802, + 4843579 ], [ - 2058909, - 5960506 + 1151795, + 4843569 ], [ - 2058921, - 5960502 + 1151789, + 4843558 ], [ - 2058932, - 5960496 + 1151782, + 4843548 ], [ - 2058944, - 5960492 + 1151776, + 4843537 ], [ - 2058955, - 5960486 + 1151769, + 4843527 ], [ - 2058966, - 5960481 + 1151763, + 4843516 ], [ - 2058978, - 5960476 + 1151756, + 4843506 ], [ - 2058989, - 5960471 + 1151750, + 4843495 ], [ - 2059001, - 5960465 + 1151743, + 4843485 ], [ - 2059011, - 5960460 + 1151737, + 4843474 ], [ - 2059023, - 5960455 + 1151730, + 4843464 ], [ - 2059034, - 5960450 + 1151724, + 4843453 ], [ - 2059045, - 5960444 + 1151717, + 4843443 ], [ - 2059057, - 5960439 + 1151711, + 4843432 ], [ - 2059068, - 5960433 + 1151704, + 4843422 ], [ - 2059079, - 5960428 + 1151698, + 4843411 ], [ - 2059090, - 5960422 + 1151691, + 4843401 ], [ - 2059101, - 5960417 + 1151685, + 4843390 ], [ - 2059113, - 5960412 + 1151678, + 4843380 ], [ - 2059124, - 5960405 + 1151672, + 4843369 ], [ - 2059134, - 5960400 + 1151665, + 4843359 ], [ - 2059146, - 5960394 + 1151659, + 4843348 ], [ - 2059157, - 5960389 + 1151652, + 4843337 ], [ - 2059168, - 5960383 + 1151646, + 4843326 ], [ - 2059180, - 5960378 + 1151639, + 4843316 ], [ - 2059190, - 5960372 + 1151633, + 4843305 ], [ - 2059201, - 5960366 + 1151626, + 4843295 ], [ - 2059213, - 5960360 + 1151620, + 4843284 ], [ - 2059224, - 5960355 + 1151613, + 4843274 ], [ - 2059235, - 5960349 + 1151607, + 4843263 ], [ - 2059246, - 5960344 + 1151600, + 4843253 ], [ - 2059257, - 5960338 + 1151594, + 4843242 ], [ - 2059268, - 5960332 + 1151587, + 4843232 ], [ - 2059280, - 5960326 + 1151581, + 4843221 ], [ - 2059291, - 5960321 + 1151574, + 4843211 ], [ - 2059301, - 5960315 + 1151568, + 4843200 ], [ - 2059313, - 5960310 + 1151561, + 4843190 ], [ - 2059324, - 5960303 + 1151555, + 4843179 ], [ - 2059335, - 5960298 + 1151548, + 4843169 ], [ - 2059346, - 5960292 + 1151542, + 4843158 ], [ - 2059357, - 5960287 + 1151535, + 4843148 ], [ - 2059368, - 5960281 + 1151529, + 4843137 ], [ - 2059379, - 5960275 + 1151522, + 4843127 ], [ - 2059391, - 5960270 + 1151516, + 4843116 ], [ - 2059402, - 5960263 + 1151509, + 4843106 ], [ - 2059412, - 5960258 + 1151503, + 4843095 ], [ - 2059423, - 5960252 + 1151496, + 4843085 ], [ - 2059434, - 5960246 + 1151490, + 4843074 ], [ - 2059446, - 5960240 + 1151483, + 4843064 ], [ - 2059457, - 5960234 + 1151477, + 4843052 ], [ - 2059467, - 5960228 + 1151470, + 4843042 ], [ - 2059478, - 5960222 + 1151464, + 4843031 ], [ - 2059489, - 5960216 + 1151457, + 4843021 ], [ - 2059501, - 5960210 + 1151451, + 4843010 ], [ - 2059512, - 5960204 + 1151444, + 4843000 ], [ - 2059522, - 5960198 + 1151438, + 4842989 ], [ - 2059533, - 5960192 + 1151431, + 4842979 ], [ - 2059544, - 5960186 + 1151425, + 4842968 ], [ - 2059555, - 5960179 + 1151418, + 4842958 ], [ - 2059566, - 5960174 + 1151412, + 4842947 ], [ - 2059577, - 5960167 + 1151405, + 4842937 ], [ - 2059588, - 5960162 + 1151399, + 4842926 ], [ - 2059599, - 5960156 + 1151392, + 4842916 ], [ - 2059610, - 5960149 + 1151386, + 4842905 ], [ - 2059620, - 5960144 + 1151379, + 4842895 ], [ - 2059631, - 5960137 + 1151374, + 4842884 ], [ - 2059642, - 5960131 + 1151367, + 4842874 ], [ - 2059653, - 5960125 + 1151361, + 4842863 ], [ - 2059664, - 5960119 + 1151354, + 4842853 ], [ - 2059674, - 5960112 + 1151348, + 4842842 ], [ - 2059685, - 5960106 + 1151341, + 4842832 ], [ - 2059696, - 5960099 + 1151335, + 4842821 ], [ - 2059707, - 5960094 + 1151328, + 4842811 ], [ - 2059717, - 5960087 + 1151322, + 4842800 ], [ - 2059728, - 5960081 + 1151315, + 4842790 ], [ - 2059739, - 5960074 + 1151309, + 4842778 ], [ - 2059750, - 5960068 + 1151302, + 4842768 ], [ - 2059760, - 5960062 + 1151296, + 4842757 ], [ - 2059771, - 5960055 + 1151289, + 4842747 ], [ - 2059782, - 5960049 + 1151283, + 4842736 ], [ - 2059793, - 5960042 + 1151276, + 4842726 ], [ - 2059804, - 5960036 + 1151270, + 4842715 ], [ - 2059813, - 5960028 + 1151263, + 4842705 ], [ - 2059824, - 5960022 + 1151257, + 4842694 ], [ - 2059835, - 5960015 + 1151250, + 4842684 ], [ - 2059846, - 5960009 + 1151244, + 4842673 ], [ - 2059855, - 5960001 + 1151237, + 4842663 ], [ - 2059866, - 5959995 + 1151231, + 4842652 ], [ - 2059877, - 5959988 + 1151224, + 4842642 ], [ - 2059888, - 5959981 + 1151218, + 4842631 ], [ - 2059897, - 5959975 + 1151211, + 4842621 ], [ - 2059908, - 5959967 + 1151205, + 4842610 ], [ - 2059919, - 5959961 + 1151198, + 4842600 ], [ - 2059929, - 5959953 + 1151192, + 4842589 ], [ - 2059939, - 5959947 + 1151185, + 4842579 ], [ - 2059950, - 5959939 + 1151179, + 4842568 ], [ - 2059960, - 5959933 + 1151172, + 4842558 ], [ - 2059971, - 5959925 + 1151166, + 4842547 ], [ - 2059980, - 5959919 + 1151159, + 4842537 ], [ - 2059991, - 5959911 + 1151153, + 4842526 ], [ - 2060002, - 5959905 + 1151146, + 4842516 ], [ - 2060012, - 5959898 + 1151140, + 4842505 ], [ - 2060022, - 5959891 + 1151133, + 4842494 ], [ - 2060033, - 5959884 + 1151127, + 4842483 ], [ - 2060043, - 5959877 + 1151120, + 4842473 ], [ - 2060054, - 5959870 + 1151114, + 4842462 ], [ - 2060064, - 5959863 + 1151107, + 4842452 ], [ - 2060074, - 5959856 + 1151101, + 4842441 ], [ - 2060085, - 5959848 + 1151094, + 4842431 ], [ - 2060095, - 5959842 + 1151088, + 4842420 ], [ - 2060105, - 5959835 + 1151081, + 4842410 ], [ - 2060115, - 5959827 + 1151075, + 4842399 ], [ - 2060126, - 5959821 + 1151068, + 4842389 ], [ - 2060135, - 5959813 + 1151062, + 4842378 ], [ - 2060146, - 5959806 + 1151055, + 4842368 ], [ - 2060156, - 5959798 + 1151049, + 4842357 ], [ - 2060167, - 5959791 + 1151042, + 4842347 ], [ - 2060176, - 5959784 + 1151036, + 4842336 ], [ - 2060186, - 5959777 + 1151029, + 4842326 ], [ - 2060197, - 5959769 + 1151023, + 4842315 ], [ - 2060207, - 5959762 + 1151016, + 4842305 ], [ - 2060217, - 5959755 + 1151010, + 4842294 ], [ - 2060227, - 5959747 + 1151003, + 4842284 ], [ - 2060238, - 5959740 + 1150997, + 4842273 ], [ - 2060247, - 5959732 + 1150990, + 4842263 ], [ - 2060257, - 5959726 + 1150984, + 4842252 ], [ - 2060268, - 5959718 + 1150977, + 4842242 ], [ - 2060278, - 5959711 + 1150971, + 4842231 ], [ - 2060288, - 5959703 + 1150964, + 4842221 ], [ - 2060298, - 5959696 + 1150958, + 4842209 ], [ - 2060308, - 5959689 + 1150951, + 4842199 ], [ - 2060319, - 5959681 + 1150945, + 4842188 ], [ - 2060328, - 5959674 + 1150938, + 4842178 ], [ - 2060338, - 5959666 + 1150932, + 4842167 ], [ - 2060349, - 5959659 + 1150925, + 4842157 ], [ - 2060359, - 5959651 + 1150919, + 4842146 ], [ - 2060368, - 5959644 + 1150912, + 4842136 ], [ - 2060378, - 5959637 + 1150906, + 4842125 ], [ - 2060389, - 5959628 + 1150899, + 4842115 ], [ - 2060398, - 5959621 + 1150893, + 4842104 ], [ - 2060408, - 5959613 + 1150886, + 4842094 ], [ - 2060418, - 5959606 + 1150880, + 4842083 ], [ - 2060428, - 5959597 + 1150873, + 4842073 ], [ - 2060437, - 5959590 + 1150867, + 4842062 ], [ - 2060448, - 5959582 + 1150860, + 4842052 ], [ - 2060458, - 5959574 + 1150853, + 4842042 ], [ - 2060467, - 5959567 + 1150845, + 4842032 ], [ - 2060477, - 5959559 + 1150838, + 4842021 ], [ - 2060487, - 5959551 + 1150831, + 4842011 ], [ - 2060496, - 5959543 + 1150824, + 4842000 ], [ - 2060506, - 5959535 + 1150817, + 4841990 ], [ - 2060516, - 5959527 + 1150811, + 4841979 ], [ - 2060526, - 5959519 + 1150803, + 4841969 ], [ - 2060535, - 5959512 + 1150796, + 4841959 ], [ - 2060545, - 5959503 + 1150788, + 4841949 ], [ - 2060555, - 5959496 + 1150781, + 4841938 ], [ - 2060564, - 5959487 + 1150774, + 4841928 ], [ - 2060574, - 5959480 + 1150767, + 4841917 ], [ - 2060584, - 5959471 + 1150759, + 4841907 ], [ - 2060594, - 5959464 + 1150752, + 4841897 ], [ - 2060603, - 5959456 + 1150745, + 4841887 ], [ - 2060613, - 5959448 + 1150738, + 4841876 ], [ - 2060623, - 5959440 + 1150730, + 4841866 ], [ - 2060632, - 5959432 + 1150723, + 4841856 ], [ - 2060641, - 5959424 + 1150715, + 4841846 ], [ - 2060651, - 5959417 + 1150708, + 4841836 ], [ - 2060660, - 5959408 + 1150700, + 4841826 ], [ - 2060670, - 5959401 + 1150693, + 4841816 ], [ - 2060680, - 5959392 + 1150685, + 4841806 ], [ - 2060690, - 5959384 + 1150678, + 4841796 ], [ - 2060699, - 5959376 + 1150670, + 4841786 ], [ - 2060709, - 5959368 + 1150663, + 4841776 ], [ - 2060719, - 5959361 + 1150655, + 4841767 ], [ - 2060728, - 5959352 + 1150648, + 4841756 ], [ - 2060738, - 5959344 + 1150640, + 4841746 ], [ - 2060748, - 5959335 + 1150633, + 4841736 ], [ - 2060756, - 5959328 + 1150625, + 4841727 ], [ - 2060766, - 5959319 + 1150618, + 4841717 ], [ - 2060776, - 5959311 + 1150610, + 4841707 ], [ - 2060786, - 5959304 + 1150603, + 4841697 ], [ - 2060795, - 5959295 + 1150596, + 4841687 ], [ - 2060805, - 5959287 + 1150589, + 4841675 ], [ - 2060814, - 5959279 + 1150582, + 4841665 ], [ - 2060823, - 5959271 + 1150575, + 4841654 ], [ - 2060833, - 5959262 + 1150568, + 4841644 ], [ - 2060843, - 5959255 + 1150561, + 4841633 ], [ - 2060852, - 5959247 + 1150554, + 4841623 ], [ - 2060862, - 5959239 + 1150547, + 4841613 ], [ - 2060872, - 5959231 + 1150540, + 4841603 ], [ - 2060881, - 5959222 + 1150534, + 4841592 ], [ - 2060891, - 5959215 + 1150527, + 4841582 ], [ - 2060901, - 5959206 + 1150520, + 4841571 ], [ - 2060911, - 5959198 + 1150513, + 4841561 ], [ - 2060920, - 5959191 + 1150506, + 4841550 ], [ - 2060929, - 5959182 + 1150498, + 4841540 ], [ - 2060939, - 5959175 + 1150491, + 4841529 ], [ - 2060948, - 5959166 + 1150484, + 4841519 ], [ - 2060958, - 5959158 + 1150477, + 4841509 ], [ - 2060968, - 5959151 + 1150469, + 4841499 ], [ - 2060977, - 5959142 + 1150462, + 4841488 ], [ - 2060987, - 5959134 + 1150454, + 4841478 ], [ - 2060997, - 5959126 + 1150447, + 4841468 ], [ - 2061007, - 5959118 + 1150440, + 4841458 ], [ - 2061016, - 5959110 + 1150433, + 4841447 ], [ - 2061025, - 5959102 + 1150425, + 4841437 ], [ - 2061035, - 5959094 + 1150418, + 4841427 ], [ - 2061044, - 5959086 + 1150411, + 4841416 ], [ - 2061054, - 5959078 + 1150404, + 4841406 ], [ - 2061064, - 5959069 + 1150396, + 4841396 ], [ - 2061073, - 5959062 + 1150389, + 4841386 ], [ - 2061083, - 5959053 + 1150381, + 4841376 ], [ - 2061093, - 5959045 + 1150374, + 4841366 ], [ - 2061103, - 5959038 + 1150366, + 4841356 ], [ - 2061112, - 5959029 + 1150359, + 4841346 ], [ - 2061122, - 5959022 + 1150351, + 4841336 ], [ - 2061131, - 5959013 + 1150344, + 4841326 ], [ - 2061140, - 5959005 + 1150336, + 4841316 ], [ - 2061150, - 5958997 + 1150329, + 4841306 ], [ - 2061160, - 5958989 + 1150321, + 4841296 ], [ - 2061169, - 5958981 + 1150314, + 4841286 ], [ - 2061179, - 5958973 + 1150306, + 4841276 ], [ - 2061189, - 5958965 + 1150299, + 4841265 ], [ - 2061199, - 5958956 + 1150291, + 4841255 ], [ - 2061208, - 5958949 + 1150284, + 4841245 ], [ - 2061217, - 5958940 + 1150277, + 4841235 ], [ - 2061227, - 5958933 + 1150270, + 4841224 ], [ - 2061236, - 5958925 + 1150262, + 4841214 ], [ - 2061246, - 5958916 + 1150255, + 4841204 ], [ - 2061256, - 5958909 + 1150248, + 4841194 ], [ - 2061265, - 5958900 + 1150241, + 4841183 ], [ - 2061275, - 5958893 + 1150233, + 4841173 ], [ - 2061285, - 5958884 + 1150226, + 4841163 ], [ - 2061295, - 5958877 + 1150219, + 4841152 ], [ - 2061304, - 5958869 + 1150212, + 4841142 ], [ - 2061314, - 5958861 + 1150204, + 4841132 ], [ - 2061325, - 5958853 + 1150197, + 4841122 ], [ - 2061333, - 5958845 + 1150189, + 4841112 ], [ - 2061344, - 5958838 + 1150182, + 4841102 ], [ - 2061354, - 5958829 + 1150174, + 4841092 ], [ - 2061364, - 5958822 + 1150167, + 4841082 ], [ - 2061373, - 5958814 + 1150160, + 4841072 ], [ - 2061383, - 5958806 + 1150153, + 4841062 ], [ - 2061393, - 5958799 + 1150145, + 4841052 ], [ - 2061402, - 5958790 + 1150138, + 4841042 ], [ - 2061413, - 5958783 + 1150130, + 4841032 ], [ - 2061423, - 5958775 + 1150123, + 4841021 ], [ - 2061433, - 5958768 + 1150115, + 4841011 ], [ - 2061442, - 5958760 + 1150107, + 4841001 ], [ - 2061452, - 5958752 + 1150099, + 4840991 ], [ - 2061463, - 5958745 + 1150091, + 4840981 ], [ - 2061472, - 5958737 + 1150083, + 4840971 ], [ - 2061482, - 5958729 + 1150076, + 4840961 ], [ - 2061492, - 5958721 + 1150068, + 4840951 ], [ - 2061503, - 5958714 + 1150061, + 4840941 ], [ - 2061512, - 5958706 + 1150053, + 4840931 ], [ - 2061522, - 5958698 + 1150046, + 4840921 ], [ - 2061532, - 5958691 + 1150038, + 4840911 ], [ - 2061541, - 5958683 + 1150031, + 4840900 ], [ - 2061552, - 5958676 + 1150023, + 4840890 ], [ - 2061562, - 5958667 + 1150016, + 4840880 ], [ - 2061572, - 5958660 + 1150008, + 4840871 ], [ - 2061581, - 5958652 + 1150001, + 4840860 ], [ - 2061592, - 5958645 + 1149995, + 4840850 ], [ - 2061602, - 5958638 + 1149988, + 4840840 ], [ - 2061611, - 5958630 + 1149980, + 4840831 ], [ - 2061622, - 5958623 + 1149973, + 4840821 ], [ - 2061632, - 5958617 + 1149965, + 4840811 ], [ - 2061642, - 5958609 + 1149957, + 4840801 ], [ - 2061652, - 5958601 + 1149949, + 4840791 ], [ - 2061662, - 5958596 + 1149942, + 4840781 ], [ - 2061672, - 5958588 + 1149934, + 4840771 ], [ - 2061683, - 5958581 + 1149927, + 4840761 ], [ - 2061692, - 5958575 + 1149919, + 4840751 ], [ - 2061703, - 5958567 + 1149912, + 4840741 ], [ - 2061713, - 5958560 + 1149904, + 4840732 ], [ - 2061724, - 5958553 + 1149897, + 4840722 ], [ - 2061734, - 5958546 + 1149889, + 4840712 ], [ - 2061744, - 5958538 + 1149882, + 4840702 ], [ - 2061755, - 5958532 + 1149874, + 4840692 ], [ - 2061766, - 5958524 + 1149867, + 4840682 ], [ - 2061775, - 5958517 + 1149859, + 4840672 ], [ - 2061787, - 5958510 + 1149852, + 4840662 ], [ - 2061797, - 5958502 + 1149844, + 4840652 ], [ - 2061807, - 5958495 + 1149837, + 4840640 ], [ - 2061819, - 5958488 + 1149830, + 4840630 ], [ - 2061829, - 5958480 + 1149823, + 4840620 ], [ - 2061839, - 5958472 + 1149815, + 4840610 ], [ - 2061851, - 5958466 + 1149808, + 4840600 ], [ - 2061861, - 5958458 + 1149800, + 4840590 ], [ - 2061871, - 5958451 + 1149793, + 4840579 ], [ - 2061883, - 5958444 + 1149785, + 4840569 ], [ - 2061893, - 5958437 + 1149778, + 4840559 ], [ - 2061903, - 5958428 + 1149771, + 4840549 ], [ - 2061915, - 5958423 + 1149764, + 4840539 ], [ - 2061925, - 5958415 + 1149756, + 4840529 ], [ - 2061935, - 5958408 + 1149749, + 4840518 ], [ - 2061947, - 5958401 + 1149742, + 4840508 ], [ - 2061957, - 5958394 + 1149735, + 4840498 ], [ - 2061968, - 5958387 + 1149727, + 4840488 ], [ - 2061978, - 5958381 + 1149720, + 4840477 ], [ - 2061988, - 5958374 + 1149712, + 4840467 ], [ - 2061999, - 5958365 + 1149705, + 4840457 ], [ - 2062009, - 5958361 + 1149697, + 4840447 ], [ - 2062019, - 5958353 + 1149690, + 4840437 ], [ - 2062029, - 5958346 + 1149682, + 4840427 ], [ - 2062038, - 5958341 + 1149675, + 4840417 ], [ - 2062049, - 5958334 + 1149668, + 4840407 ], [ - 2062058, - 5958327 + 1149660, + 4840397 ], [ - 2062069, - 5958321 + 1149652, + 4840386 ], [ - 2062079, - 5958314 + 1149645, + 4840376 ], [ - 2062090, - 5958306 + 1149637, + 4840366 ], [ - 2062099, - 5958301 + 1149630, + 4840356 ], [ - 2062109, - 5958293 + 1149622, + 4840346 ], [ - 2062120, - 5958286 + 1149615, + 4840336 ], [ - 2062131, - 5958280 + 1149607, + 4840326 ], [ - 2062140, - 5958273 + 1149600, + 4840316 ], [ - 2062150, - 5958266 + 1149592, + 4840306 ], [ - 2062161, - 5958260 + 1149585, + 4840296 ], [ - 2062171, - 5958253 + 1149578, + 4840286 ], [ - 2062181, - 5958245 + 1149571, + 4840276 ], [ - 2062191, - 5958240 + 1149563, + 4840266 ], [ - 2062202, - 5958232 + 1149556, + 4840256 ], [ - 2062212, - 5958225 + 1149548, + 4840246 ], [ - 2062221, - 5958218 + 1149541, + 4840235 ], [ - 2062232, - 5958211 + 1149534, + 4840225 ], [ - 2062242, - 5958204 + 1149527, + 4840215 ], [ - 2062253, - 5958197 + 1149519, + 4840205 ], [ - 2062262, - 5958190 + 1149512, + 4840195 ], [ - 2062272, - 5958182 + 1149504, + 4840185 ], [ - 2062281, - 5958175 + 1149497, + 4840174 ], [ - 2062292, - 5958167 + 1149489, + 4840164 ], [ - 2062301, - 5958160 + 1149482, + 4840154 ], [ - 2062309, - 5958154 + 1149474, + 4840144 ], [ - 2062320, - 5958147 + 1149467, + 4840134 ], [ - 2062330, - 5958140 + 1149459, + 4840123 ], [ - 2062339, - 5958132 + 1149452, + 4840113 ], [ - 2062349, - 5958125 + 1149444, + 4840103 ], [ - 2062360, - 5958117 + 1149437, + 4840093 ], [ - 2062369, - 5958112 + 1149429, + 4840083 ], [ - 2062380, - 5958105 + 1149422, + 4840073 ], [ - 2062390, - 5958098 + 1149414, + 4840063 ], [ - 2062401, - 5958093 + 1149407, + 4840053 ], [ - 2062411, - 5958085 + 1149399, + 4840043 ], [ - 2062421, - 5958078 + 1149392, + 4840033 ], [ - 2062431, - 5958072 + 1149384, + 4840024 ], [ - 2062441, - 5958065 + 1149377, + 4840014 ], [ - 2062452, - 5958057 + 1149369, + 4840004 ], [ - 2062461, - 5958052 + 1149362, + 4839993 ], [ - 2062471, - 5958045 + 1149354, + 4839983 ], [ - 2062482, - 5958036 + 1149347, + 4839973 ], [ - 2062492, - 5958031 + 1149340, + 4839963 ], [ - 2062501, - 5958023 + 1149333, + 4839953 ], [ - 2062512, - 5958016 + 1149325, + 4839943 ], [ - 2062523, - 5958010 + 1149318, + 4839932 ], [ - 2062533, - 5958003 + 1149310, + 4839922 ], [ - 2062542, - 5957995 + 1149303, + 4839912 ], [ - 2062553, - 5957990 + 1149296, + 4839902 ], [ - 2062563, - 5957983 + 1149289, + 4839891 ], [ - 2062574, - 5957975 + 1149281, + 4839881 ], [ - 2062583, - 5957970 + 1149274, + 4839870 ], [ - 2062594, - 5957962 + 1149266, + 4839860 ], [ - 2062604, - 5957955 + 1149259, + 4839850 ], [ - 2062615, - 5957950 + 1149251, + 4839840 ], [ - 2062624, - 5957942 + 1149244, + 4839830 ], [ - 2062634, - 5957935 + 1149236, + 4839820 ], [ - 2062644, - 5957930 + 1149229, + 4839810 ], [ - 2062655, - 5957923 + 1149221, + 4839800 ], [ - 2062664, - 5957915 + 1149214, + 4839790 ], [ - 2062673, - 5957909 + 1149206, + 4839780 ], [ - 2062684, - 5957901 + 1149199, + 4839769 ], [ - 2062694, - 5957894 + 1149191, + 4839759 ], [ - 2062704, - 5957887 + 1149184, + 4839749 ], [ - 2062715, - 5957880 + 1149176, + 4839739 ], [ - 2062725, - 5957872 + 1149169, + 4839729 ], [ - 2062736, - 5957867 + 1149161, + 4839719 ], [ - 2062745, - 5957859 + 1149154, + 4839709 ], [ - 2062756, - 5957851 + 1149146, + 4839699 ], [ - 2062766, - 5957846 + 1149139, + 4839689 ], [ - 2062777, - 5957838 + 1149131, + 4839680 ], [ - 2062786, - 5957830 + 1149124, + 4839670 ], [ - 2062797, - 5957824 + 1149116, + 4839660 ], [ - 2062807, - 5957817 + 1149109, + 4839650 ], [ - 2062817, - 5957809 + 1149101, + 4839640 ], [ - 2062828, - 5957803 + 1149094, + 4839630 ], [ - 2062838, - 5957796 + 1149086, + 4839621 ], [ - 2062848, - 5957788 + 1149079, + 4839610 ], [ - 2062858, - 5957783 + 1149071, + 4839600 ], [ - 2062868, - 5957775 + 1149064, + 4839590 ], [ - 2062879, - 5957768 + 1149056, + 4839580 ], [ - 2062890, - 5957761 + 1149049, + 4839570 ], [ - 2062900, - 5957754 + 1149041, + 4839560 ], [ - 2062910, - 5957746 + 1149034, + 4839550 ], [ - 2062922, - 5957741 + 1149026, + 4839540 ], [ - 2062932, - 5957733 + 1149019, + 4839529 ], [ - 2062942, - 5957726 + 1149011, + 4839519 ], [ - 2062954, - 5957720 + 1149004, + 4839508 ], [ - 2062964, - 5957713 + 1148996, + 4839498 ], [ - 2062974, - 5957706 + 1148989, + 4839488 ], [ - 2062986, - 5957700 + 1148981, + 4839478 ], [ - 2062995, - 5957693 + 1148974, + 4839468 ], [ - 2063006, - 5957685 + 1148966, + 4839458 ], [ - 2063018, - 5957679 + 1148959, + 4839448 ], [ - 2063027, - 5957671 + 1148951, + 4839438 ], [ - 2063037, - 5957664 + 1148944, + 4839428 ], [ - 2063048, - 5957657 + 1148936, + 4839418 ], [ - 2063058, - 5957650 + 1148929, + 4839408 ], [ - 2063068, - 5957642 + 1148921, + 4839398 ], [ - 2063078, - 5957635 + 1148913, + 4839388 ], [ - 2063089, - 5957628 + 1148905, + 4839378 ], [ - 2063099, - 5957621 + 1148897, + 4839368 ], [ - 2063109, - 5957614 + 1148889, + 4839357 ], [ - 2063119, - 5957606 + 1148882, + 4839347 ], [ - 2063130, - 5957599 + 1148874, + 4839338 ], [ - 2063141, - 5957592 + 1148866, + 4839328 ], [ - 2063150, - 5957585 + 1148858, + 4839318 ], [ - 2063161, - 5957577 + 1148851, + 4839308 ], [ - 2063172, - 5957572 + 1148843, + 4839299 ], [ - 2063183, - 5957564 + 1148836, + 4839289 ], [ - 2063192, - 5957557 + 1148828, + 4839279 ], [ - 2063203, - 5957552 + 1148820, + 4839269 ], [ - 2063214, - 5957544 + 1148812, + 4839260 ], [ - 2063224, - 5957537 + 1148804, + 4839250 ], [ - 2063234, - 5957530 + 1148796, + 4839240 ], [ - 2063245, - 5957523 + 1148789, + 4839230 ], [ - 2063255, - 5957515 + 1148781, + 4839220 ], [ - 2063266, - 5957509 + 1148774, + 4839210 ], [ - 2063275, - 5957501 + 1148766, + 4839201 ], [ - 2063286, - 5957494 + 1148758, + 4839191 ], [ - 2063295, - 5957487 + 1148750, + 4839181 ], [ - 2063305, - 5957479 + 1148743, + 4839171 ], [ - 2063315, - 5957472 + 1148735, + 4839161 ], [ - 2063325, - 5957465 + 1148728, + 4839151 ], [ - 2063336, - 5957458 + 1148720, + 4839141 ], [ - 2063345, - 5957450 + 1148713, + 4839131 ], [ - 2063356, - 5957444 + 1148705, + 4839121 ], [ - 2063366, - 5957436 + 1148698, + 4839110 ], [ - 2063377, - 5957429 + 1148690, + 4839101 ], [ - 2063388, - 5957422 + 1148683, + 4839091 ], [ - 2063398, - 5957415 + 1148675, + 4839081 ], [ - 2063408, - 5957408 + 1148667, + 4839071 ], [ - 2063419, - 5957402 + 1148659, + 4839061 ], [ - 2063428, - 5957395 + 1148652, + 4839051 ], [ - 2063439, - 5957387 + 1148644, + 4839041 ], [ - 2063450, - 5957382 + 1148637, + 4839031 ], [ - 2063460, - 5957374 + 1148629, + 4839021 ], [ - 2063469, - 5957367 + 1148622, + 4839011 ], [ - 2063481, - 5957360 + 1148614, + 4839002 ], [ - 2063491, - 5957353 + 1148607, + 4838992 ], [ - 2063502, - 5957346 + 1148599, + 4838982 ], [ - 2063512, - 5957339 + 1148592, + 4838972 ], [ - 2063523, - 5957332 + 1148584, + 4838962 ], [ - 2063533, - 5957324 + 1148577, + 4838952 ], [ - 2063544, - 5957317 + 1148569, + 4838942 ], [ - 2063554, - 5957309 + 1148562, + 4838932 ], [ - 2063564, - 5957302 + 1148554, + 4838922 ], [ - 2063575, - 5957294 + 1148547, + 4838912 ], [ - 2063584, - 5957288 + 1148539, + 4838902 ], [ - 2063595, - 5957280 + 1148532, + 4838892 ], [ - 2063605, - 5957272 + 1148525, + 4838882 ], [ - 2063615, - 5957265 + 1148518, + 4838871 ], [ - 2063625, - 5957258 + 1148510, + 4838861 ], [ - 2063635, - 5957251 + 1148503, + 4838850 ], [ - 2063646, - 5957243 + 1148495, + 4838840 ], [ - 2063657, - 5957236 + 1148488, + 4838829 ], [ - 2063666, - 5957230 + 1148480, + 4838819 ], [ - 2063677, - 5957223 + 1148473, + 4838809 ], [ - 2063687, - 5957215 + 1148465, + 4838799 ], [ - 2063698, - 5957210 + 1148458, + 4838789 ], [ - 2063707, - 5957203 + 1148451, + 4838779 ], [ - 2063718, - 5957195 + 1148444, + 4838769 ], [ - 2063728, - 5957189 + 1148436, + 4838759 ], [ - 2063739, - 5957181 + 1148429, + 4838749 ], [ - 2063748, - 5957174 + 1148421, + 4838739 ], [ - 2063759, - 5957166 + 1148414, + 4838728 ], [ - 2063769, - 5957159 + 1148406, + 4838718 ], [ - 2063779, - 5957151 + 1148399, + 4838708 ], [ - 2063789, - 5957144 + 1148392, + 4838698 ], [ - 2063800, - 5957137 + 1148385, + 4838688 ], [ - 2063810, - 5957130 + 1148377, + 4838678 ], [ - 2063820, - 5957123 + 1148370, + 4838668 ], [ - 2063830, - 5957116 + 1148362, + 4838658 ], [ - 2063841, - 5957109 + 1148355, + 4838647 ], [ - 2063852, - 5957102 + 1148347, + 4838637 ], [ - 2063861, - 5957095 + 1148340, + 4838627 ], [ - 2063872, - 5957087 + 1148332, + 4838617 ], [ - 2063883, - 5957082 + 1148325, + 4838607 ], [ - 2063893, - 5957074 + 1148317, + 4838597 ], [ - 2063903, - 5957067 + 1148310, + 4838587 ], [ - 2063914, - 5957061 + 1148302, + 4838577 ], [ - 2063925, - 5957055 + 1148295, + 4838567 ], [ - 2063935, - 5957048 + 1148287, + 4838557 ], [ - 2063947, - 5957043 + 1148280, + 4838547 ], [ - 2063956, - 5957036 + 1148272, + 4838537 ], [ - 2063966, - 5957028 + 1148264, + 4838527 ], [ - 2063979, - 5957023 + 1148257, + 4838517 ], [ - 2063989, - 5957015 + 1148250, + 4838507 ], [ - 2063999, - 5957008 + 1148242, + 4838497 ], [ - 2064011, - 5957002 + 1148235, + 4838487 ], [ - 2064021, - 5956995 + 1148227, + 4838478 ], [ - 2064032, - 5956987 + 1148220, + 4838468 ], [ - 2064042, - 5956981 + 1148212, + 4838458 ], [ - 2064053, - 5956973 + 1148205, + 4838448 ], [ - 2064063, - 5956966 + 1148197, + 4838438 ], [ - 2064073, - 5956960 + 1148190, + 4838428 ], [ - 2064084, - 5956952 + 1148183, + 4838418 ], [ - 2064094, - 5956945 + 1148176, + 4838407 ], [ - 2064105, - 5956939 + 1148168, + 4838397 ], [ - 2064114, - 5956932 + 1148161, + 4838386 ], [ - 2064125, - 5956924 + 1148153, + 4838376 ], [ - 2064135, - 5956917 + 1148146, + 4838365 ], [ - 2064146, - 5956909 + 1148138, + 4838355 ], [ - 2064155, - 5956902 + 1148130, + 4838344 ], [ - 2064166, - 5956895 + 1148122, + 4838334 ], [ - 2064176, - 5956888 + 1148115, + 4838324 ], [ - 2064187, - 5956881 + 1148107, + 4838314 ], [ - 2064197, - 5956875 + 1148099, + 4838304 ], [ - 2064207, - 5956868 + 1148091, + 4838294 ], [ - 2064218, - 5956860 + 1148083, + 4838284 ], [ - 2064229, - 5956854 + 1148075, + 4838275 ], [ - 2064238, - 5956846 + 1148067, + 4838265 ], [ - 2064249, - 5956839 + 1148059, + 4838255 ], [ - 2064260, - 5956832 + 1148052, + 4838245 ], [ - 2064270, - 5956825 + 1148044, + 4838236 ], [ - 2064280, - 5956817 + 1148036, + 4838226 ], [ - 2064290, - 5956812 + 1148028, + 4838217 ], [ - 2064301, - 5956805 + 1148020, + 4838207 ], [ - 2064311, - 5956797 + 1148012, + 4838197 ], [ - 2064321, - 5956792 + 1148004, + 4838187 ], [ - 2064332, - 5956784 + 1147996, + 4838178 ], [ - 2064342, - 5956777 + 1147988, + 4838168 ], [ - 2064353, - 5956771 + 1147980, + 4838159 ], [ - 2064363, - 5956764 + 1147973, + 4838149 ], [ - 2064374, - 5956756 + 1147965, + 4838140 ], [ - 2064384, - 5956751 + 1147958, + 4838130 ], [ - 2064395, - 5956743 + 1147950, + 4838121 ], [ - 2064405, - 5956736 + 1147942, + 4838111 ], [ - 2064416, - 5956729 + 1147934, + 4838100 ], [ - 2064426, - 5956722 + 1147927, + 4838090 ], [ - 2064437, - 5956715 + 1147919, + 4838080 ], [ - 2064447, - 5956707 + 1147912, + 4838070 ], [ - 2064458, - 5956701 + 1147904, + 4838060 ], [ - 2064468, - 5956693 + 1147897, + 4838050 ], [ - 2064479, - 5956686 + 1147889, + 4838040 ], [ - 2064488, - 5956679 + 1147882, + 4838030 ], [ - 2064499, - 5956672 + 1147874, + 4838021 ], [ - 2064510, - 5956665 + 1147867, + 4838011 ], [ - 2064521, - 5956658 + 1147859, + 4838001 ], [ - 2064530, - 5956652 + 1147852, + 4837991 ], [ - 2064541, - 5956644 + 1147844, + 4837981 ], [ - 2064552, - 5956637 + 1147837, + 4837971 ], [ - 2064561, - 5956630 + 1147830, + 4837961 ], [ - 2064572, - 5956625 + 1147823, + 4837950 ], [ - 2064583, - 5956617 + 1147815, + 4837940 ], [ - 2064594, - 5956610 + 1147808, + 4837930 ], [ - 2064604, - 5956603 + 1147800, + 4837920 ], [ - 2064614, - 5956596 + 1147793, + 4837909 ], [ - 2064624, - 5956588 + 1147785, + 4837899 ], [ - 2064635, - 5956583 + 1147778, + 4837889 ], [ - 2064645, - 5956576 + 1147771, + 4837879 ], [ - 2064655, - 5956568 + 1147764, + 4837869 ], [ - 2064665, - 5956563 + 1147756, + 4837859 ], [ - 2064676, - 5956555 + 1147749, + 4837848 ], [ - 2064686, - 5956548 + 1147741, + 4837837 ], [ - 2064696, - 5956542 + 1147734, + 4837827 ], [ - 2064707, - 5956535 + 1147726, + 4837817 ], [ - 2064718, - 5956527 + 1147719, + 4837807 ], [ - 2064730, - 5956522 + 1147711, + 4837797 ], [ - 2064739, - 5956514 + 1147704, + 4837787 ], [ - 2064750, - 5956507 + 1147696, + 4837777 ], [ - 2064761, - 5956500 + 1147689, + 4837767 ], [ - 2064771, - 5956493 + 1147681, + 4837757 ], [ - 2064781, - 5956486 + 1147674, + 4837747 ], [ - 2064792, - 5956479 + 1147666, + 4837737 ], [ - 2064803, - 5956472 + 1147659, + 4837727 ], [ - 2064812, - 5956464 + 1147651, + 4837717 ], [ - 2064823, - 5956458 + 1147644, + 4837707 ], [ - 2064833, - 5956450 + 1147636, + 4837697 ], [ - 2064844, - 5956443 + 1147629, + 4837687 ], [ - 2064853, - 5956436 + 1147621, + 4837677 ], [ - 2064863, - 5956429 + 1147614, + 4837667 ], [ - 2064874, - 5956423 + 1147606, + 4837657 ], [ - 2064885, - 5956416 + 1147599, + 4837647 ], [ - 2064894, - 5956409 + 1147591, + 4837637 ], [ - 2064905, - 5956401 + 1147584, + 4837627 ], [ - 2064916, - 5956396 + 1147576, + 4837617 ], [ - 2064926, - 5956388 + 1147569, + 4837607 ], [ - 2064936, - 5956381 + 1147561, + 4837598 ], [ - 2064947, - 5956374 + 1147554, + 4837586 ], [ - 2064958, - 5956367 + 1147546, + 4837576 ], [ - 2064968, - 5956359 + 1147539, + 4837566 ], [ - 2064978, - 5956352 + 1147531, + 4837556 ], [ - 2064988, - 5956346 + 1147524, + 4837546 ], [ - 2064999, - 5956338 + 1147516, + 4837536 ], [ - 2065010, - 5956332 + 1147509, + 4837526 ], [ - 2065019, - 5956324 + 1147502, + 4837516 ], [ - 2065030, - 5956317 + 1147495, + 4837506 ], [ - 2065041, - 5956311 + 1147487, + 4837496 ], [ - 2065051, - 5956304 + 1147480, + 4837485 ], [ - 2065061, - 5956296 + 1147472, + 4837475 ], [ - 2065072, - 5956291 + 1147465, + 4837465 ], [ - 2065083, - 5956283 + 1147457, + 4837455 ], [ - 2065093, - 5956276 + 1147450, + 4837444 ], [ - 2065103, - 5956270 + 1147442, + 4837434 ], [ - 2065114, - 5956263 + 1147435, + 4837424 ], [ - 2065124, - 5956256 + 1147427, + 4837414 ], [ - 2065135, - 5956249 + 1147420, + 4837404 ], [ - 2065145, - 5956242 + 1147412, + 4837394 ], [ - 2065155, - 5956234 + 1147405, + 4837384 ], [ - 2065166, - 5956227 + 1147397, + 4837374 ], [ - 2065177, - 5956220 + 1147389, + 4837364 ], [ - 2065186, - 5956213 + 1147381, + 4837354 ], [ - 2065197, - 5956205 + 1147375, + 4837344 ], [ - 2065207, - 5956198 + 1147367, + 4837334 ], [ - 2065217, - 5956191 + 1147360, + 4837324 ], [ - 2065227, - 5956183 + 1147352, + 4837314 ], [ - 2065238, - 5956176 + 1147345, + 4837304 ], [ - 2065248, - 5956168 + 1147337, + 4837294 ], [ - 2065257, - 5956162 + 1147330, + 4837284 ], [ - 2065268, - 5956154 + 1147322, + 4837274 ], [ - 2065278, - 5956147 + 1147315, + 4837264 ], [ - 2065289, - 5956140 + 1147307, + 4837255 ], [ - 2065298, - 5956133 + 1147300, + 4837245 ], [ - 2065309, - 5956126 + 1147292, + 4837235 ], [ - 2065319, - 5956119 + 1147285, + 4837225 ], [ - 2065330, - 5956112 + 1147277, + 4837215 ], [ - 2065339, - 5956104 + 1147270, + 4837205 ], [ - 2065350, - 5956098 + 1147262, + 4837195 ], [ - 2065360, - 5956090 + 1147255, + 4837185 ], [ - 2065371, - 5956083 + 1147247, + 4837175 ], [ - 2065381, - 5956077 + 1147240, + 4837165 ], [ - 2065391, - 5956070 + 1147232, + 4837155 ], [ - 2065402, - 5956061 + 1147225, + 4837144 ], [ - 2065413, - 5956057 + 1147217, + 4837134 ], [ - 2065422, - 5956050 + 1147210, + 4837124 ], [ - 2065432, - 5956042 + 1147202, + 4837114 ], [ - 2065444, - 5956037 + 1147194, + 4837103 ], [ - 2065454, - 5956029 + 1147186, + 4837093 ], [ - 2065464, - 5956022 + 1147179, + 4837082 ], [ - 2065475, - 5956015 + 1147171, + 4837072 ], [ - 2065486, - 5956008 + 1147164, + 4837062 ], [ - 2065496, - 5956000 + 1147156, + 4837052 ], [ - 2065507, - 5955994 + 1147149, + 4837042 ], [ - 2065517, - 5955986 + 1147141, + 4837033 ], [ - 2065528, - 5955979 + 1147134, + 4837023 ], [ - 2065539, - 5955972 + 1147127, + 4837014 ], [ - 2065548, - 5955965 + 1147120, + 4837004 ], [ - 2065559, - 5955958 + 1147112, + 4836994 ], [ - 2065569, - 5955952 + 1147104, + 4836983 ], [ - 2065579, - 5955946 + 1147096, + 4836973 ], [ - 2065589, - 5955938 + 1147089, + 4836963 ], [ - 2065600, - 5955932 + 1147082, + 4836953 ], [ - 2065611, - 5955924 + 1147075, + 4836943 ], [ - 2065621, - 5955917 + 1147067, + 4836933 ], [ - 2065632, - 5955909 + 1147060, + 4836923 ], [ - 2065642, - 5955902 + 1147053, + 4836913 ], [ - 2065653, - 5955894 + 1147046, + 4836903 ], [ - 2065663, - 5955887 + 1147038, + 4836893 ], [ - 2065674, - 5955880 + 1147031, + 4836883 ], [ - 2065684, - 5955872 + 1147023, + 4836873 ], [ - 2065695, - 5955866 + 1147016, + 4836862 ], [ - 2065705, - 5955858 + 1147009, + 4836852 ], [ - 2065715, - 5955851 + 1147002, + 4836841 ], [ - 2065726, - 5955845 + 1146994, + 4836830 ], [ - 2065736, - 5955838 + 1146987, + 4836820 ], [ - 2065746, - 5955830 + 1146979, + 4836810 ], [ - 2065756, - 5955823 + 1146972, + 4836800 ], [ - 2065766, - 5955816 + 1146965, + 4836790 ], [ - 2065776, - 5955808 + 1146958, + 4836780 ], [ - 2065785, - 5955802 + 1146950, + 4836770 ], [ - 2065795, - 5955794 + 1146943, + 4836759 ], [ - 2065806, - 5955787 + 1146935, + 4836749 ], [ - 2065816, - 5955780 + 1146928, + 4836739 ], [ - 2065826, - 5955773 + 1146920, + 4836729 ], [ - 2065836, - 5955765 + 1146913, + 4836719 ], [ - 2065847, - 5955759 + 1146905, + 4836709 ], [ - 2065856, - 5955752 + 1146898, + 4836699 ], [ - 2065866, - 5955744 + 1146890, + 4836689 ], [ - 2065878, - 5955738 + 1146883, + 4836679 ], [ - 2065888, - 5955730 + 1146875, + 4836669 ], [ - 2065897, - 5955723 + 1146868, + 4836659 ], [ - 2065909, - 5955715 + 1146860, + 4836649 ], [ - 2065919, - 5955708 + 1146852, + 4836639 ], [ - 2065930, - 5955700 + 1146844, + 4836629 ], [ - 2065940, - 5955695 + 1146837, + 4836619 ], [ - 2065951, - 5955687 + 1146829, + 4836609 ], [ - 2065961, - 5955680 + 1146821, + 4836599 ], [ - 2065972, - 5955674 + 1146813, + 4836589 ], [ - 2065981, - 5955666 + 1146806, + 4836578 ], [ - 2065992, - 5955659 + 1146798, + 4836569 ], [ - 2066003, - 5955652 + 1146790, + 4836559 ], [ - 2066013, - 5955645 + 1146782, + 4836549 ], [ - 2066023, - 5955637 + 1146775, + 4836539 ], [ - 2066033, - 5955630 + 1146767, + 4836530 ], [ - 2066043, - 5955622 + 1146760, + 4836520 ], [ - 2066053, - 5955615 + 1146752, + 4836510 ], [ - 2066063, - 5955609 + 1146744, + 4836500 ], [ - 2066073, - 5955601 + 1146736, + 4836491 ], [ - 2066084, - 5955594 + 1146729, + 4836481 ], [ - 2066093, - 5955586 + 1146721, + 4836471 ], [ - 2066103, - 5955579 + 1146714, + 4836461 ], [ - 2066114, - 5955571 + 1146706, + 4836451 ], [ - 2066124, - 5955565 + 1146698, + 4836441 ], [ - 2066133, - 5955557 + 1146690, + 4836432 ], [ - 2066143, - 5955550 + 1146683, + 4836422 ], [ - 2066154, - 5955543 + 1146675, + 4836412 ], [ - 2066164, - 5955535 + 1146668, + 4836402 ], [ - 2066173, - 5955528 + 1146660, + 4836392 ], [ - 2066184, - 5955520 + 1146653, + 4836382 ], [ - 2066194, - 5955513 + 1146645, + 4836372 ], [ - 2066204, - 5955505 + 1146638, + 4836362 ], [ - 2066214, - 5955498 + 1146630, + 4836352 ], [ - 2066225, - 5955490 + 1146622, + 4836342 ], [ - 2066235, - 5955483 + 1146614, + 4836332 ], [ - 2066244, - 5955475 + 1146607, + 4836321 ], [ - 2066255, - 5955467 + 1146599, + 4836311 ], [ - 2066265, - 5955460 + 1146591, + 4836301 ], [ - 2066276, - 5955454 + 1146583, + 4836292 ], [ - 2066286, - 5955447 + 1146575, + 4836282 ], [ - 2066296, - 5955439 + 1146567, + 4836273 ], [ - 2066307, - 5955434 + 1146559, + 4836263 ], [ - 2066317, - 5955425 + 1146550, + 4836253 ], [ - 2066327, - 5955418 + 1146543, + 4836244 ], [ - 2066337, - 5955412 + 1146535, + 4836235 ], [ - 2066347, - 5955404 + 1146527, + 4836225 ], [ - 2066357, - 5955397 + 1146519, + 4836215 ], [ - 2066368, - 5955391 + 1146511, + 4836205 ], [ - 2066378, - 5955384 + 1146503, + 4836196 ], [ - 2066388, - 5955376 + 1146495, + 4836186 ], [ - 2066399, - 5955370 + 1146487, + 4836177 ], [ - 2066410, - 5955362 + 1146479, + 4836167 ], [ - 2066420, - 5955355 + 1146471, + 4836158 ], [ - 2066432, - 5955348 + 1146464, + 4836148 ], [ - 2066442, - 5955341 + 1146456, + 4836139 ], [ - 2066452, - 5955334 + 1146449, + 4836129 ], [ - 2066464, - 5955327 + 1146441, + 4836120 ], [ - 2066474, - 5955321 + 1146433, + 4836110 ], [ - 2066484, - 5955313 + 1146425, + 4836101 ], [ - 2066495, - 5955307 + 1146418, + 4836091 ], [ - 2066505, - 5955300 + 1146410, + 4836080 ], [ - 2066516, - 5955293 + 1146403, + 4836070 ], [ - 2066525, - 5955286 + 1146395, + 4836061 ], [ - 2066536, - 5955279 + 1146388, + 4836051 ], [ - 2066547, - 5955271 + 1146380, + 4836041 ], [ - 2066557, - 5955266 + 1146373, + 4836031 ], [ - 2066567, - 5955258 + 1146365, + 4836021 ], [ - 2066578, - 5955251 + 1146358, + 4836011 ], [ - 2066588, - 5955245 + 1146350, + 4836001 ], [ - 2066599, - 5955238 + 1146343, + 4835991 ], [ - 2066609, - 5955231 + 1146335, + 4835981 ], [ - 2066619, - 5955225 + 1146328, + 4835971 ], [ - 2066630, - 5955218 + 1146320, + 4835961 ], [ - 2066641, - 5955210 + 1146313, + 4835951 ], [ - 2066650, - 5955204 + 1146305, + 4835941 ], [ - 2066661, - 5955197 + 1146298, + 4835930 ], [ - 2066671, - 5955190 + 1146290, + 4835920 ], [ - 2066682, - 5955182 + 1146283, + 4835910 ], [ - 2066692, - 5955176 + 1146275, + 4835900 ], [ - 2066703, - 5955168 + 1146268, + 4835890 ], [ - 2066713, - 5955161 + 1146260, + 4835880 ], [ - 2066724, - 5955154 + 1146252, + 4835870 ], [ - 2066734, - 5955147 + 1146244, + 4835860 ], [ - 2066744, - 5955140 + 1146237, + 4835850 ], [ - 2066755, - 5955133 + 1146229, + 4835841 ], [ - 2066766, - 5955126 + 1146222, + 4835830 ], [ - 2066776, - 5955119 + 1146214, + 4835820 ], [ - 2066786, - 5955113 + 1146207, + 4835810 ], [ - 2066797, - 5955105 + 1146199, + 4835800 ], [ - 2066807, - 5955098 + 1146192, + 4835790 ], [ - 2066817, - 5955090 + 1146184, + 4835780 ], [ - 2066828, - 5955084 + 1146177, + 4835770 ], [ - 2066838, - 5955077 + 1146169, + 4835761 ], [ - 2066849, - 5955070 + 1146162, + 4835751 ], [ - 2066859, - 5955063 + 1146154, + 4835741 ], [ - 2066869, - 5955055 + 1146147, + 4835731 ], [ - 2066880, - 5955049 + 1146139, + 4835721 ], [ - 2066890, - 5955041 + 1146131, + 4835711 ], [ - 2066900, - 5955035 + 1146123, + 4835701 ], [ - 2066911, - 5955027 + 1146116, + 4835691 ], [ - 2066922, - 5955021 + 1146108, + 4835681 ], [ - 2066931, - 5955014 + 1146101, + 4835671 ], [ - 2066941, - 5955006 + 1146093, + 4835661 ], [ - 2066951, - 5955000 + 1146086, + 4835651 ], [ - 2066961, - 5954992 + 1146078, + 4835641 ], [ - 2066972, - 5954986 + 1146071, + 4835631 ], [ - 2066982, - 5954978 + 1146063, + 4835621 ], [ - 2066992, - 5954971 + 1146056, + 4835611 ], [ - 2067002, - 5954964 + 1146048, + 4835601 ], [ - 2067012, - 5954957 + 1146041, + 4835591 ], [ - 2067023, - 5954950 + 1146033, + 4835580 ], [ - 2067033, - 5954943 + 1146026, + 4835570 ], [ - 2067044, - 5954936 + 1146018, + 4835560 ], [ - 2067053, - 5954929 + 1146011, + 4835550 ], [ - 2067064, - 5954922 + 1146003, + 4835541 ], [ - 2067075, - 5954915 + 1145996, + 4835530 ], [ - 2067085, - 5954909 + 1145989, + 4835520 ], [ - 2067095, - 5954901 + 1145982, + 4835510 ], [ - 2067106, - 5954895 + 1145974, + 4835500 ], [ - 2067118, - 5954887 + 1145967, + 4835489 ], [ - 2067128, - 5954880 + 1145959, + 4835479 ], [ - 2067138, - 5954873 + 1145952, + 4835469 ], [ - 2067150, - 5954866 + 1145944, + 4835459 ], [ - 2067160, - 5954859 + 1145937, + 4835448 ], [ - 2067171, - 5954852 + 1145929, + 4835438 ], [ - 2067181, - 5954846 + 1145922, + 4835428 ], [ - 2067191, - 5954838 + 1145914, + 4835418 ], [ - 2067202, - 5954832 + 1145907, + 4835408 ], [ - 2067212, - 5954824 + 1145899, + 4835399 ], [ - 2067221, - 5954818 + 1145892, + 4835389 ], [ - 2067232, - 5954810 + 1145884, + 4835379 ], [ - 2067243, - 5954803 + 1145877, + 4835369 ], [ - 2067253, - 5954796 + 1145869, + 4835359 ], [ - 2067263, - 5954789 + 1145862, + 4835349 ], [ - 2067273, - 5954782 + 1145854, + 4835339 ], [ - 2067284, - 5954775 + 1145847, + 4835328 ], [ - 2067295, - 5954768 + 1145839, + 4835318 ], [ - 2067304, - 5954762 + 1145832, + 4835308 ], [ - 2067315, - 5954755 + 1145824, + 4835298 ], [ - 2067325, - 5954748 + 1145817, + 4835288 ], [ - 2067336, - 5954742 + 1145809, + 4835278 ], [ - 2067346, - 5954735 + 1145802, + 4835268 ], [ - 2067357, - 5954728 + 1145794, + 4835258 ], [ - 2067368, - 5954721 + 1145787, + 4835248 ], [ - 2067379, - 5954714 + 1145779, + 4835239 ], [ - 2067388, - 5954708 + 1145772, + 4835228 ], [ - 2067400, - 5954700 + 1145764, + 4835218 ], [ - 2067410, - 5954694 + 1145757, + 4835207 ], [ - 2067421, - 5954686 + 1145749, + 4835197 ], [ - 2067430, - 5954679 + 1145742, + 4835187 ], [ - 2067441, - 5954672 + 1145734, + 4835177 ], [ - 2067452, - 5954666 + 1145727, + 4835167 ], [ - 2067463, - 5954658 + 1145719, + 4835157 ], [ - 2067473, - 5954652 + 1145712, + 4835147 ], [ - 2067484, - 5954644 + 1145704, + 4835138 ], [ - 2067494, - 5954637 + 1145696, + 4835128 ], [ - 2067504, - 5954630 + 1145688, + 4835118 ], [ - 2067514, - 5954623 + 1145681, + 4835108 ], [ - 2067524, - 5954615 + 1145673, + 4835099 ], [ - 2067535, - 5954608 + 1145666, + 4835089 ], [ - 2067545, - 5954602 + 1145658, + 4835078 ], [ - 2067555, - 5954593 + 1145651, + 4835068 ], [ - 2067565, - 5954587 + 1145644, + 4835058 ], [ - 2067576, - 5954580 + 1145636, + 4835048 ], [ - 2067585, - 5954572 + 1145628, + 4835038 ], [ - 2067596, - 5954565 + 1145621, + 4835028 ], [ - 2067607, - 5954558 + 1145613, + 4835018 ], [ - 2067617, - 5954551 + 1145606, + 4835007 ], [ - 2067627, - 5954544 + 1145599, + 4834997 ], [ - 2067638, - 5954537 + 1145592, + 4834987 ], [ - 2067648, - 5954529 + 1145584, + 4834977 ], [ - 2067659, - 5954523 + 1145577, + 4834967 ], [ - 2067669, - 5954515 + 1145569, + 4834957 ], [ - 2067678, - 5954509 + 1145562, + 4834947 ], [ - 2067689, - 5954501 + 1145554, + 4834937 ], [ - 2067700, - 5954495 + 1145547, + 4834927 ], [ - 2067709, - 5954487 + 1145539, + 4834917 ], [ - 2067720, - 5954480 + 1145532, + 4834907 ], [ - 2067730, - 5954474 + 1145524, + 4834897 ], [ - 2067740, - 5954466 + 1145516, + 4834887 ], [ - 2067750, - 5954459 + 1145508, + 4834878 ], [ - 2067760, - 5954452 + 1145501, + 4834868 ], [ - 2067770, - 5954445 + 1145493, + 4834858 ], [ - 2067781, - 5954437 + 1145486, + 4834848 ], [ - 2067791, - 5954431 + 1145478, + 4834839 ], [ - 2067802, - 5954423 + 1145471, + 4834827 ], [ - 2067813, - 5954417 + 1145463, + 4834817 ], [ - 2067824, - 5954409 + 1145455, + 4834807 ], [ - 2067833, - 5954403 + 1145447, + 4834797 ], [ - 2067844, - 5954397 + 1145440, + 4834787 ], [ - 2067855, - 5954390 + 1145432, + 4834777 ], [ - 2067866, - 5954384 + 1145425, + 4834767 ], [ - 2067876, - 5954377 + 1145417, + 4834757 ], [ - 2067887, - 5954371 + 1145410, + 4834747 ], [ - 2067897, - 5954363 + 1145402, + 4834737 ], [ - 2067908, - 5954357 + 1145394, + 4834727 ], [ - 2067918, - 5954350 + 1145386, + 4834717 ], [ - 2067928, - 5954343 + 1145378, + 4834707 ], [ - 2067939, - 5954335 + 1145370, + 4834698 ], [ - 2067950, - 5954329 + 1145362, + 4834688 ], [ - 2067960, - 5954321 + 1145354, + 4834679 ], [ - 2067971, - 5954314 + 1145347, + 4834669 ], [ - 2067982, - 5954307 + 1145339, + 4834660 ], [ - 2067992, - 5954299 + 1145331, + 4834650 ], [ - 2068002, - 5954292 + 1145323, + 4834640 ], [ - 2068013, - 5954285 + 1145316, + 4834630 ], [ - 2068022, - 5954278 + 1145308, + 4834621 ], [ - 2068033, - 5954271 + 1145300, + 4834611 ], [ - 2068043, - 5954264 + 1145292, + 4834602 ], [ - 2068053, - 5954257 + 1145285, + 4834592 ], [ - 2068063, - 5954251 + 1145277, + 4834581 ], [ - 2068074, - 5954244 + 1145269, + 4834571 ], [ - 2068083, - 5954236 + 1145261, + 4834561 ], [ - 2068094, - 5954230 + 1145254, + 4834551 ], [ - 2068105, - 5954223 + 1145246, + 4834542 ], [ - 2068116, - 5954216 + 1145239, + 4834532 ], [ - 2068126, - 5954209 + 1145231, + 4834522 ], [ - 2068136, - 5954202 + 1145224, + 4834512 ], [ - 2068147, - 5954194 + 1145216, + 4834503 ], [ - 2068157, - 5954188 + 1145208, + 4834493 ], [ - 2068168, - 5954181 + 1145200, + 4834483 ], [ - 2068179, - 5954174 + 1145193, + 4834473 ], [ - 2068190, - 5954167 + 1145185, + 4834463 ], [ - 2068199, - 5954160 + 1145178, + 4834453 ], [ - 2068211, - 5954154 + 1145170, + 4834443 ], [ - 2068221, - 5954146 + 1145163, + 4834433 ], [ - 2068232, - 5954140 + 1145155, + 4834423 ], [ - 2068241, - 5954132 + 1145148, + 4834413 ], [ - 2068252, - 5954126 + 1145140, + 4834403 ], [ - 2068263, - 5954119 + 1145133, + 4834393 ], [ - 2068273, - 5954112 + 1145125, + 4834383 ], [ - 2068283, - 5954105 + 1145118, + 4834373 ], [ - 2068294, - 5954098 + 1145110, + 4834363 ], [ - 2068304, - 5954090 + 1145103, + 4834353 ], [ - 2068315, - 5954084 + 1145095, + 4834342 ], [ - 2068325, - 5954078 + 1145088, + 4834332 ], [ - 2068334, - 5954070 + 1145080, + 4834322 ], [ - 2068345, - 5954064 + 1145073, + 4834312 ], [ - 2068355, - 5954056 + 1145065, + 4834302 ], [ - 2068364, - 5954050 + 1145057, + 4834292 ], [ - 2068375, - 5954043 + 1145049, + 4834282 ], [ - 2068386, - 5954036 + 1145042, + 4834272 ], [ - 2068396, - 5954029 + 1145034, + 4834262 ], [ - 2068407, - 5954023 + 1145027, + 4834252 ], [ - 2068417, - 5954016 + 1145019, + 4834243 ], [ - 2068429, - 5954009 + 1145012, + 4834233 ], [ - 2068439, - 5954003 + 1145004, + 4834223 ], [ - 2068450, - 5953996 + 1144997, + 4834213 ], [ - 2068461, - 5953988 + 1144989, + 4834203 ], [ - 2068472, - 5953981 + 1144981, + 4834193 ], [ - 2068483, - 5953975 + 1144973, + 4834183 ], [ - 2068492, - 5953967 + 1144966, + 4834173 ], [ - 2068503, - 5953960 + 1144958, + 4834163 ], [ - 2068514, - 5953953 + 1144951, + 4834153 ], [ - 2068524, - 5953946 + 1144943, + 4834143 ], [ - 2068534, - 5953939 + 1144936, + 4834133 ], [ - 2068544, - 5953933 + 1144928, + 4834123 ], [ - 2068554, - 5953925 + 1144921, + 4834113 ], [ - 2068565, - 5953918 + 1144913, + 4834103 ], [ - 2068575, - 5953912 + 1144905, + 4834092 ], [ - 2068585, - 5953904 + 1144897, + 4834082 ], [ - 2068595, - 5953897 + 1144890, + 4834072 ], [ - 2068606, - 5953890 + 1144882, + 4834063 ], [ - 2068615, - 5953882 + 1144875, + 4834053 ], [ - 2068626, - 5953875 + 1144867, + 4834043 ], [ - 2068637, - 5953869 + 1144860, + 4834033 ], [ - 2068647, - 5953860 + 1144852, + 4834024 ], [ - 2068657, - 5953854 + 1144845, + 4834014 ], [ - 2068668, - 5953848 + 1144837, + 4834004 ], [ - 2068679, - 5953839 + 1144829, + 4833994 ], [ - 2068689, - 5953833 + 1144821, + 4833985 ], [ - 2068699, - 5953826 + 1144813, + 4833975 ], [ - 2068710, - 5953819 + 1144805, + 4833965 ], [ - 2068721, - 5953811 + 1144798, + 4833954 ], [ - 2068731, - 5953805 + 1144790, + 4833944 ], [ - 2068741, - 5953797 + 1144783, + 4833934 ], [ - 2068752, - 5953791 + 1144775, + 4833924 ], [ - 2068762, - 5953783 + 1144768, + 4833914 ], [ - 2068773, - 5953776 + 1144760, + 4833904 ], [ - 2068782, - 5953770 + 1144753, + 4833894 ], [ - 2068793, - 5953762 + 1144745, + 4833885 ], [ - 2068803, - 5953755 + 1144738, + 4833875 ], [ - 2068814, - 5953748 + 1144730, + 4833865 ], [ - 2068823, - 5953741 + 1144723, + 4833855 ], [ - 2068833, - 5953734 + 1144715, + 4833844 ], [ - 2068844, - 5953728 + 1144707, + 4833834 ], [ - 2068854, - 5953720 + 1144699, + 4833825 ], [ - 2068864, - 5953713 + 1144692, + 4833814 ], [ - 2068875, - 5953706 + 1144685, + 4833804 ], [ - 2068886, - 5953699 + 1144678, + 4833794 ], [ - 2068896, - 5953694 + 1144670, + 4833784 ], [ - 2068906, - 5953686 + 1144663, + 4833774 ], [ - 2068917, - 5953680 + 1144655, + 4833764 ], [ - 2068927, - 5953672 + 1144648, + 4833754 ], [ - 2068938, - 5953666 + 1144640, + 4833745 ], [ - 2068948, - 5953659 + 1144633, + 4833735 ], [ - 2068959, - 5953653 + 1144625, + 4833725 ], [ - 2068970, - 5953645 + 1144618, + 4833715 ], [ - 2068981, - 5953639 + 1144611, + 4833705 ], [ - 2068990, - 5953632 + 1144604, + 4833694 ], [ - 2069001, - 5953626 + 1144596, + 4833684 ], [ - 2069012, - 5953620 + 1144589, + 4833674 ], [ - 2069023, - 5953613 + 1144581, + 4833664 ], [ - 2069033, - 5953606 + 1144574, + 4833654 ], [ - 2069044, - 5953599 + 1144566, + 4833644 ], [ - 2069055, - 5953592 + 1144559, + 4833634 ], [ - 2069066, - 5953584 + 1144551, + 4833624 ], [ - 2069076, - 5953578 + 1144544, + 4833614 ], [ - 2069086, - 5953570 + 1144537, + 4833604 ], [ - 2069097, - 5953563 + 1144530, + 4833593 ], [ - 2069108, - 5953556 + 1144522, + 4833583 ], [ - 2069118, - 5953549 + 1144514, + 4833572 ], [ - 2069129, - 5953542 + 1144506, + 4833562 ], [ - 2069140, - 5953535 + 1144499, + 4833552 ], [ - 2069150, - 5953529 + 1144492, + 4833543 ], [ - 2069160, - 5953522 + 1144484, + 4833533 ], [ - 2069170, - 5953516 + 1144476, + 4833523 ], [ - 2069180, - 5953508 + 1144469, + 4833513 ], [ - 2069191, - 5953502 + 1144461, + 4833503 ], [ - 2069200, - 5953494 + 1144454, + 4833493 ], [ - 2069210, - 5953489 + 1144446, + 4833483 ], [ - 2069221, - 5953481 + 1144439, + 4833473 ], [ - 2069232, - 5953475 + 1144431, + 4833464 ], [ - 2069241, - 5953466 + 1144424, + 4833454 ], [ - 2069252, - 5953460 + 1144417, + 4833444 ], [ - 2069263, - 5953453 + 1144409, + 4833433 ], [ - 2069274, - 5953445 + 1144401, + 4833423 ], [ - 2069284, - 5953439 + 1144394, + 4833413 ], [ - 2069295, - 5953431 + 1144386, + 4833403 ], [ - 2069305, - 5953424 + 1144379, + 4833393 ], [ - 2069315, - 5953417 + 1144372, + 4833383 ], [ - 2069326, - 5953410 + 1144365, + 4833373 ], [ - 2069336, - 5953403 + 1144357, + 4833363 ], [ - 2069347, - 5953396 + 1144350, + 4833352 ], [ - 2069357, - 5953389 + 1144342, + 4833341 ], [ - 2069367, - 5953383 + 1144335, + 4833331 ], [ - 2069378, - 5953377 + 1144327, + 4833321 ], [ - 2069388, - 5953369 + 1144320, + 4833311 ], [ - 2069398, - 5953363 + 1144312, + 4833301 ], [ - 2069408, - 5953356 + 1144305, + 4833291 ], [ - 2069418, - 5953349 + 1144297, + 4833281 ], [ - 2069429, - 5953342 + 1144290, + 4833271 ], [ - 2069440, - 5953336 + 1144282, + 4833261 ], [ - 2069450, - 5953328 + 1144275, + 4833251 ], [ - 2069461, - 5953321 + 1144267, + 4833241 ], [ - 2069471, - 5953314 + 1144259, + 4833231 ], [ - 2069481, - 5953307 + 1144251, + 4833221 ], [ - 2069492, - 5953300 + 1144244, + 4833211 ], [ - 2069503, - 5953293 + 1144236, + 4833201 ], [ - 2069514, - 5953286 + 1144229, + 4833191 ], [ - 2069524, - 5953279 + 1144221, + 4833181 ], [ - 2069535, - 5953272 + 1144214, + 4833171 ], [ - 2069545, - 5953265 + 1144206, + 4833162 ], [ - 2069557, - 5953258 + 1144199, + 4833152 ], [ - 2069566, - 5953250 + 1144191, + 4833142 ], [ - 2069577, - 5953244 + 1144183, + 4833132 ], [ - 2069588, - 5953237 + 1144175, + 4833122 ], [ - 2069599, - 5953230 + 1144168, + 4833112 ], [ - 2069608, - 5953223 + 1144160, + 4833103 ], [ - 2069619, - 5953217 + 1144152, + 4833092 ], [ - 2069629, - 5953210 + 1144144, + 4833082 ], [ - 2069640, - 5953203 + 1144136, + 4833072 ], [ - 2069651, - 5953198 + 1144128, + 4833063 ], [ - 2069661, - 5953190 + 1144121, + 4833053 ], [ - 2069671, - 5953183 + 1144113, + 4833043 ], [ - 2069682, - 5953176 + 1144105, + 4833033 ], [ - 2069693, - 5953170 + 1144097, + 4833024 ], [ - 2069702, - 5953162 + 1144089, + 4833014 ], [ - 2069713, - 5953156 + 1144081, + 4833004 ], [ - 2069724, - 5953148 + 1144073, + 4832994 ], [ - 2069734, - 5953142 + 1144065, + 4832985 ], [ - 2069743, - 5953135 + 1144057, + 4832975 ], [ - 2069754, - 5953128 + 1144049, + 4832966 ], [ - 2069765, - 5953121 + 1144041, + 4832957 ], [ - 2069774, - 5953113 + 1144032, + 4832948 ], [ - 2069785, - 5953106 + 1144024, + 4832939 ], [ - 2069796, - 5953099 + 1144015, + 4832930 ], [ - 2069806, - 5953092 + 1144007, + 4832921 ], [ - 2069816, - 5953085 + 1143998, + 4832912 ], [ - 2069827, - 5953078 + 1143990, + 4832903 ], [ - 2069837, - 5953071 + 1143981, + 4832894 ], [ - 2069848, - 5953064 + 1143973, + 4832884 ], [ - 2069858, - 5953058 + 1143964, + 4832875 ], [ - 2069867, - 5953050 + 1143956, + 4832865 ], [ - 2069878, - 5953043 + 1143948, + 4832856 ], [ - 2069889, - 5953036 + 1143940, + 4832846 ], [ - 2069898, - 5953030 + 1143932, + 4832837 ], [ - 2069909, - 5953022 + 1143924, + 4832828 ], [ - 2069919, - 5953015 + 1143916, + 4832819 ], [ - 2069930, - 5953008 + 1143908, + 4832809 ], [ - 2069940, - 5953001 + 1143900, + 4832799 ], [ - 2069951, - 5952993 + 1143892, + 4832789 ], [ - 2069962, - 5952987 + 1143884, + 4832780 ], [ - 2069973, - 5952980 + 1143877, + 4832770 ], [ - 2069983, - 5952972 + 1143869, + 4832761 ], [ - 2069994, - 5952966 + 1143862, + 4832751 ], [ - 2070005, - 5952958 + 1143854, + 4832742 ], [ - 2070015, - 5952951 + 1143846, + 4832732 ], [ - 2070025, - 5952945 + 1143838, + 4832722 ], [ - 2070036, - 5952938 + 1143831, + 4832712 ], [ - 2070046, - 5952930 + 1143823, + 4832702 ], [ - 2070057, - 5952924 + 1143816, + 4832692 ], [ - 2070066, - 5952916 + 1143809, + 4832682 ], [ - 2070077, - 5952910 + 1143802, + 4832672 ], [ - 2070087, - 5952904 + 1143794, + 4832662 ], [ - 2070098, - 5952896 + 1143787, + 4832651 ], [ - 2070107, - 5952890 + 1143779, + 4832641 ], [ - 2070118, - 5952883 + 1143772, + 4832631 ], [ - 2070128, - 5952876 + 1143765, + 4832620 ], [ - 2070139, - 5952868 + 1143758, + 4832610 ], [ - 2070148, - 5952862 + 1143750, + 4832600 ], [ - 2070159, - 5952855 + 1143744, + 4832590 ], [ - 2070169, - 5952848 + 1143737, + 4832580 ], [ - 2070180, - 5952840 + 1143730, + 4832569 ], [ - 2070190, - 5952834 + 1143722, + 4832559 ], [ - 2070200, - 5952827 + 1143715, + 4832548 ], [ - 2070211, - 5952820 + 1143708, + 4832538 ], [ - 2070222, - 5952813 + 1143701, + 4832528 ], [ - 2070232, - 5952806 + 1143693, + 4832518 ], [ - 2070243, - 5952799 + 1143686, + 4832508 ], [ - 2070254, - 5952792 + 1143678, + 4832498 ], [ - 2070264, - 5952785 + 1143671, + 4832488 ], [ - 2070274, - 5952778 + 1143663, + 4832478 ], [ - 2070285, - 5952771 + 1143656, + 4832468 ], [ - 2070295, - 5952763 + 1143648, + 4832458 ], [ - 2070305, - 5952757 + 1143641, + 4832448 ], [ - 2070315, - 5952750 + 1143634, + 4832438 ], [ - 2070326, - 5952742 + 1143627, + 4832428 ], [ - 2070336, - 5952737 + 1143619, + 4832418 ], [ - 2070347, - 5952729 + 1143612, + 4832408 ], [ - 2070357, - 5952722 + 1143604, + 4832398 ], [ - 2070368, - 5952716 + 1143597, + 4832387 ], [ - 2070378, - 5952709 + 1143590, + 4832377 ], [ - 2070388, - 5952701 + 1143583, + 4832366 ], [ - 2070398, - 5952695 + 1143575, + 4832356 ], [ - 2070409, - 5952687 + 1143568, + 4832345 ], [ - 2070420, - 5952680 + 1143560, + 4832335 ], [ - 2070430, - 5952673 + 1143552, + 4832325 ], [ - 2070440, - 5952666 + 1143544, + 4832315 ], [ - 2070451, - 5952659 + 1143537, + 4832305 ], [ - 2070462, - 5952651 + 1143529, + 4832295 ], [ - 2070471, - 5952644 + 1143522, + 4832285 ], [ - 2070482, - 5952637 + 1143514, + 4832276 ], [ - 2070492, - 5952631 + 1143507, + 4832265 ], [ - 2070503, - 5952623 + 1143500, + 4832255 ], [ - 2070512, - 5952616 + 1143493, + 4832245 ], [ - 2070524, - 5952610 + 1143485, + 4832236 ], [ - 2070534, - 5952603 + 1143478, + 4832225 ], [ - 2070545, - 5952595 + 1143470, + 4832215 ], [ - 2070555, - 5952589 + 1143463, + 4832205 ], [ - 2070565, - 5952582 + 1143455, + 4832195 ], [ - 2070576, - 5952574 + 1143448, + 4832185 ], [ - 2070586, - 5952569 + 1143440, + 4832175 ], [ - 2070595, - 5952561 + 1143433, + 4832165 ], [ - 2070606, - 5952554 + 1143425, + 4832155 ], [ - 2070616, - 5952548 + 1143418, + 4832145 ], [ - 2070627, - 5952541 + 1143410, + 4832135 ], [ - 2070636, - 5952533 + 1143402, + 4832125 ], [ - 2070648, - 5952527 + 1143394, + 4832115 ], [ - 2070659, - 5952519 + 1143387, + 4832105 ], [ - 2070669, - 5952512 + 1143379, + 4832095 ], [ - 2070679, - 5952505 + 1143372, + 4832085 ], [ - 2070690, - 5952497 + 1143364, + 4832075 ], [ - 2070700, - 5952490 + 1143357, + 4832065 ], [ - 2070711, - 5952484 + 1143350, + 4832055 ], [ - 2070721, - 5952477 + 1143343, + 4832045 ], [ - 2070731, - 5952469 + 1143335, + 4832035 ], [ - 2070743, - 5952464 + 1143328, + 4832024 ], [ - 2070753, - 5952456 + 1143320, + 4832014 ], [ - 2070763, - 5952449 + 1143313, + 4832004 ], [ - 2070774, - 5952442 + 1143305, + 4831994 ], [ - 2070785, - 5952435 + 1143298, + 4831983 ], [ - 2070795, - 5952428 + 1143291, + 4831973 ], [ - 2070805, - 5952421 + 1143284, + 4831963 ], [ - 2070815, - 5952414 + 1143277, + 4831953 ], [ - 2070826, - 5952406 + 1143270, + 4831943 ], [ - 2070836, - 5952400 + 1143262, + 4831933 ], [ - 2070846, - 5952392 + 1143255, + 4831923 ], [ - 2070856, - 5952385 + 1143248, + 4831913 ], [ - 2070867, - 5952378 + 1143241, + 4831903 ], [ - 2070876, - 5952371 + 1143233, + 4831893 ], [ - 2070887, - 5952363 + 1143225, + 4831882 ], [ - 2070897, - 5952357 + 1143217, + 4831872 ], [ - 2070908, - 5952350 + 1143210, + 4831861 ], [ - 2070917, - 5952342 + 1143202, + 4831851 ], [ - 2070928, - 5952336 + 1143195, + 4831841 ], [ - 2070938, - 5952328 + 1143187, + 4831831 ], [ - 2070949, - 5952321 + 1143180, + 4831821 ], [ - 2070959, - 5952314 + 1143172, + 4831811 ], [ - 2070969, - 5952307 + 1143165, + 4831801 ], [ - 2070980, - 5952299 + 1143157, + 4831791 ], [ - 2070990, - 5952293 + 1143150, + 4831781 ], [ - 2071000, - 5952287 + 1143142, + 4831771 ], [ - 2071010, - 5952279 + 1143135, + 4831761 ], [ - 2071020, - 5952272 + 1143128, + 4831751 ], [ - 2071031, - 5952265 + 1143121, + 4831741 ], [ - 2071040, - 5952258 + 1143113, + 4831731 ], [ - 2071050, - 5952251 + 1143106, + 4831721 ], [ - 2071061, - 5952244 + 1143098, + 4831711 ], [ - 2071072, - 5952236 + 1143091, + 4831700 ], [ - 2071082, - 5952230 + 1143083, + 4831690 ], [ - 2071092, - 5952222 + 1143076, + 4831680 ], [ - 2071103, - 5952215 + 1143068, + 4831671 ], [ - 2071114, - 5952209 + 1143061, + 4831661 ], [ - 2071124, - 5952201 + 1143053, + 4831651 ], [ - 2071134, - 5952194 + 1143046, + 4831641 ], [ - 2071145, - 5952187 + 1143038, + 4831631 ], [ - 2071155, - 5952180 + 1143031, + 4831620 ], [ - 2071165, - 5952172 + 1143023, + 4831610 ], [ - 2071176, - 5952165 + 1143016, + 4831599 ], [ - 2071187, - 5952157 + 1143008, + 4831589 ], [ - 2071196, - 5952151 + 1143001, + 4831579 ], [ - 2071207, - 5952142 + 1142993, + 4831569 ], [ - 2071218, - 5952136 + 1142986, + 4831558 ], [ - 2071228, - 5952129 + 1142978, + 4831548 ], [ - 2071238, - 5952121 + 1142971, + 4831538 ], [ - 2071249, - 5952115 + 1142963, + 4831528 ], [ - 2071259, - 5952107 + 1142955, + 4831518 ], [ - 2071270, - 5952101 + 1142948, + 4831508 ], [ - 2071279, - 5952093 + 1142940, + 4831498 ], [ - 2071290, - 5952086 + 1142932, + 4831489 ], [ - 2071301, - 5952080 + 1142924, + 4831479 ], [ - 2071311, - 5952073 + 1142916, + 4831470 ], [ - 2071321, - 5952065 + 1142908, + 4831460 ], [ - 2071331, - 5952059 + 1142900, + 4831451 ], [ - 2071341, - 5952052 + 1142893, + 4831441 ], [ - 2071352, - 5952044 + 1142885, + 4831432 ], [ - 2071362, - 5952039 + 1142877, + 4831422 ], [ - 2071372, - 5952031 + 1142869, + 4831413 ], [ - 2071382, - 5952024 + 1142861, + 4831403 ], [ - 2071393, - 5952016 + 1142853, + 4831393 ], [ - 2071403, - 5952009 + 1142845, + 4831383 ], [ - 2071413, - 5952001 + 1142837, + 4831373 ], [ - 2071424, - 5951996 + 1142830, + 4831363 ], [ - 2071435, - 5951988 + 1142822, + 4831354 ], [ - 2071444, - 5951981 + 1142815, + 4831344 ], [ - 2071455, - 5951976 + 1142807, + 4831334 ], [ - 2071466, - 5951968 + 1142800, + 4831324 ], [ - 2071476, - 5951961 + 1142792, + 4831314 ], [ - 2071486, - 5951954 + 1142785, + 4831304 ], [ - 2071497, - 5951947 + 1142777, + 4831294 ], [ - 2071507, - 5951939 + 1142770, + 4831284 ], [ - 2071518, - 5951933 + 1142762, + 4831275 ], [ - 2071527, - 5951925 + 1142755, + 4831265 ], [ - 2071538, - 5951918 + 1142748, + 4831255 ], [ - 2071550, - 5951911 + 1142741, + 4831244 ], [ - 2071559, - 5951904 + 1142733, + 4831234 ], [ - 2071570, - 5951897 + 1142726, + 4831224 ], [ - 2071581, - 5951890 + 1142718, + 4831214 ], [ - 2071591, - 5951883 + 1142711, + 4831204 ], [ - 2071601, - 5951875 + 1142703, + 4831194 ], [ - 2071611, - 5951870 + 1142696, + 4831184 ], [ - 2071622, - 5951862 + 1142688, + 4831174 ], [ - 2071632, - 5951855 + 1142681, + 4831163 ], [ - 2071642, - 5951848 + 1142673, + 4831153 ], [ - 2071653, - 5951841 + 1142666, + 4831143 ], [ - 2071663, - 5951833 + 1142658, + 4831133 ], [ - 2071674, - 5951828 + 1142651, + 4831122 ], [ - 2071684, - 5951821 + 1142643, + 4831112 ], [ - 2071694, - 5951813 + 1142636, + 4831102 ], [ - 2071705, - 5951808 + 1142628, + 4831092 ], [ - 2071716, - 5951800 + 1142621, + 4831082 ], [ - 2071725, - 5951793 + 1142614, + 4831072 ], [ - 2071736, - 5951787 + 1142607, + 4831062 ], [ - 2071747, - 5951780 + 1142599, + 4831052 ], [ - 2071757, - 5951772 + 1142592, + 4831042 ], [ - 2071768, - 5951766 + 1142584, + 4831032 ], [ - 2071778, - 5951759 + 1142577, + 4831022 ], [ - 2071789, - 5951752 + 1142569, + 4831012 ], [ - 2071800, - 5951746 + 1142562, + 4831002 ], [ - 2071809, - 5951739 + 1142555, + 4830992 ], [ - 2071820, - 5951732 + 1142548, + 4830982 ], [ - 2071831, - 5951725 + 1142541, + 4830972 ], [ - 2071841, - 5951718 + 1142534, + 4830961 ], [ - 2071851, - 5951711 + 1142526, + 4830951 ], [ - 2071862, - 5951705 + 1142519, + 4830940 ], [ - 2071872, - 5951697 + 1142512, + 4830930 ], [ - 2071883, - 5951690 + 1142505, + 4830920 ], [ - 2071893, - 5951684 + 1142497, + 4830910 ], [ - 2071903, - 5951677 + 1142490, + 4830899 ], [ - 2071914, - 5951670 + 1142482, + 4830889 ], [ - 2071925, - 5951663 + 1142475, + 4830877 ], [ - 2071935, - 5951657 + 1142467, + 4830867 ], [ - 2071945, - 5951649 + 1142460, + 4830857 ], [ - 2071957, - 5951642 + 1142452, + 4830847 ], [ - 2071967, - 5951635 + 1142445, + 4830837 ], [ - 2071977, - 5951628 + 1142437, + 4830827 ], [ - 2071988, - 5951620 + 1142429, + 4830817 ], [ - 2071998, - 5951613 + 1142421, + 4830807 ], [ - 2072009, - 5951605 + 1142414, + 4830797 ], [ - 2072019, - 5951599 + 1142406, + 4830787 ], [ - 2072029, - 5951591 + 1142399, + 4830777 ], [ - 2072040, - 5951584 + 1142392, + 4830768 ], [ - 2072050, - 5951578 + 1142385, + 4830757 ], [ - 2072060, - 5951571 + 1142377, + 4830747 ], [ - 2072070, - 5951564 + 1142370, + 4830737 ], [ - 2072082, - 5951557 + 1142362, + 4830727 ], [ - 2072092, - 5951550 + 1142355, + 4830717 ], [ - 2072102, - 5951542 + 1142347, + 4830708 ], [ - 2072112, - 5951536 + 1142340, + 4830698 ], [ - 2072123, - 5951528 + 1142332, + 4830688 ], [ - 2072133, - 5951522 + 1142325, + 4830677 ], [ - 2072142, - 5951515 + 1142317, + 4830667 ], [ - 2072153, - 5951508 + 1142310, + 4830657 ], [ - 2072163, - 5951501 + 1142303, + 4830647 ], [ - 2072174, - 5951493 + 1142295, + 4830637 ], [ - 2072183, - 5951486 + 1142287, + 4830626 ], [ - 2072194, - 5951478 + 1142280, + 4830616 ], [ - 2072204, - 5951471 + 1142272, + 4830606 ], [ - 2072214, - 5951464 + 1142265, + 4830596 ], [ - 2072225, - 5951457 + 1142258, + 4830586 ], [ - 2072235, - 5951450 + 1142251, + 4830576 ], [ - 2072246, - 5951443 + 1142243, + 4830567 ], [ - 2072256, - 5951437 + 1142235, + 4830557 ], [ - 2072266, - 5951430 + 1142227, + 4830547 ], [ - 2072277, - 5951423 + 1142220, + 4830536 ], [ - 2072287, - 5951416 + 1142212, + 4830526 ], [ - 2072298, - 5951411 + 1142205, + 4830516 ], [ - 2072308, - 5951403 + 1142197, + 4830506 ], [ - 2072318, - 5951396 + 1142190, + 4830495 ], [ - 2072330, - 5951389 + 1142182, + 4830485 ], [ - 2072339, - 5951382 + 1142175, + 4830475 ], [ - 2072350, - 5951374 + 1142168, + 4830465 ], [ - 2072361, - 5951368 + 1142160, + 4830455 ], [ - 2072371, - 5951362 + 1142152, + 4830445 ], [ - 2072381, - 5951354 + 1142145, + 4830435 ], [ - 2072392, - 5951348 + 1142137, + 4830425 ], [ - 2072403, - 5951340 + 1142130, + 4830415 ], [ - 2072413, - 5951333 + 1142122, + 4830405 ], [ - 2072423, - 5951326 + 1142116, + 4830395 ], [ - 2072434, - 5951319 + 1142108, + 4830386 ], [ - 2072444, - 5951311 + 1142101, + 4830375 ], [ - 2072455, - 5951306 + 1142093, + 4830365 ], [ - 2072465, - 5951298 + 1142086, + 4830355 ], [ - 2072475, - 5951291 + 1142078, + 4830346 ], [ - 2072486, - 5951284 + 1142071, + 4830336 ], [ - 2072497, - 5951278 + 1142063, + 4830326 ], [ - 2072506, - 5951271 + 1142055, + 4830316 ], [ - 2072517, - 5951264 + 1142047, + 4830306 ], [ - 2072528, - 5951257 + 1142040, + 4830296 ], [ - 2072538, - 5951249 + 1142032, + 4830286 ], [ - 2072548, - 5951244 + 1142025, + 4830276 ], [ - 2072559, - 5951236 + 1142018, + 4830267 ], [ - 2072569, - 5951229 + 1142011, + 4830256 ], [ - 2072580, - 5951221 + 1142003, + 4830246 ], [ - 2072590, - 5951214 + 1141995, + 4830236 ], [ - 2072600, - 5951206 + 1141987, + 4830226 ], [ - 2072611, - 5951200 + 1141980, + 4830215 ], [ - 2072621, - 5951193 + 1141972, + 4830205 ], [ - 2072631, - 5951185 + 1141964, + 4830195 ], [ - 2072640, - 5951179 + 1141956, + 4830185 ], [ - 2072651, - 5951171 + 1141949, + 4830175 ], [ - 2072661, - 5951164 + 1141941, + 4830165 ], [ - 2072671, - 5951156 + 1141934, + 4830155 ], [ - 2072681, - 5951149 + 1141926, + 4830146 ], [ - 2072692, - 5951141 + 1141919, + 4830135 ], [ - 2072702, - 5951135 + 1141911, + 4830126 ], [ - 2072713, - 5951127 + 1141903, + 4830116 ], [ - 2072723, - 5951120 + 1141895, + 4830106 ], [ - 2072734, - 5951114 + 1141888, + 4830096 ], [ - 2072744, - 5951106 + 1141880, + 4830086 ], [ - 2072754, - 5951099 + 1141873, + 4830076 ], [ - 2072765, - 5951093 + 1141865, + 4830066 ], [ - 2072776, - 5951086 + 1141858, + 4830056 ], [ - 2072785, - 5951078 + 1141850, + 4830047 ], [ - 2072796, - 5951073 + 1141843, + 4830037 ], [ - 2072807, - 5951064 + 1141835, + 4830027 ], [ - 2072817, - 5951057 + 1141828, + 4830017 ], [ - 2072827, - 5951051 + 1141820, + 4830007 ], [ - 2072837, - 5951044 + 1141813, + 4829997 ], [ - 2072848, - 5951037 + 1141805, + 4829987 ], [ - 2072858, - 5951031 + 1141798, + 4829977 ], [ - 2072868, - 5951024 + 1141790, + 4829967 ], [ - 2072878, - 5951016 + 1141783, + 4829957 ], [ - 2072890, - 5951010 + 1141775, + 4829947 ], [ - 2072900, - 5951002 + 1141767, + 4829937 ], [ - 2072910, - 5950996 + 1141759, + 4829927 ], [ - 2072922, - 5950989 + 1141752, + 4829916 ], [ - 2072932, - 5950982 + 1141745, + 4829906 ], [ - 2072943, - 5950974 + 1141738, + 4829896 ], [ - 2072953, - 5950967 + 1141730, + 4829886 ], [ - 2072963, - 5950961 + 1141723, + 4829876 ], [ - 2072974, - 5950953 + 1141715, + 4829866 ], [ - 2072985, - 5950947 + 1141708, + 4829856 ], [ - 2072994, - 5950939 + 1141700, + 4829846 ], [ - 2073005, - 5950933 + 1141693, + 4829836 ], [ - 2073015, - 5950927 + 1141685, + 4829826 ], [ - 2073026, - 5950920 + 1141678, + 4829816 ], [ - 2073035, - 5950912 + 1141670, + 4829806 ], [ - 2073046, - 5950907 + 1141663, + 4829796 ], [ - 2073057, - 5950899 + 1141655, + 4829786 ], [ - 2073067, - 5950892 + 1141648, + 4829776 ], [ - 2073078, - 5950885 + 1141640, + 4829766 ], [ - 2073089, - 5950877 + 1141633, + 4829756 ], [ - 2073099, - 5950870 + 1141625, + 4829746 ], [ - 2073111, - 5950863 + 1141618, + 4829735 ], [ - 2073120, - 5950856 + 1141610, + 4829725 ], [ - 2073131, - 5950848 + 1141603, + 4829715 ], [ - 2073141, - 5950842 + 1141596, + 4829705 ], [ - 2073152, - 5950834 + 1141589, + 4829695 ], [ - 2073161, - 5950827 + 1141581, + 4829685 ], [ - 2073172, - 5950820 + 1141574, + 4829675 ], [ - 2073182, - 5950813 + 1141566, + 4829665 ], [ - 2073193, - 5950805 + 1141559, + 4829655 ], [ - 2073202, - 5950800 + 1141551, + 4829644 ], [ - 2073213, - 5950793 + 1141544, + 4829634 ], [ - 2073223, - 5950785 + 1141536, + 4829624 ], [ - 2073234, - 5950778 + 1141529, + 4829614 ], [ - 2073243, - 5950770 + 1141521, + 4829604 ], [ - 2073254, - 5950763 + 1141514, + 4829594 ], [ - 2073264, - 5950756 + 1141506, + 4829584 ], [ - 2073274, - 5950749 + 1141499, + 4829574 ], [ - 2073284, - 5950741 + 1141491, + 4829564 ], [ - 2073295, - 5950736 + 1141484, + 4829554 ], [ - 2073305, - 5950729 + 1141476, + 4829544 ], [ - 2073315, - 5950721 + 1141469, + 4829534 ], [ - 2073326, - 5950715 + 1141461, + 4829524 ], [ - 2073336, - 5950707 + 1141454, + 4829514 ], [ - 2073347, - 5950700 + 1141446, + 4829504 ], [ - 2073356, - 5950693 + 1141438, + 4829494 ], [ - 2073367, - 5950686 + 1141430, + 4829484 ], [ - 2073377, - 5950678 + 1141423, + 4829474 ], [ - 2073387, - 5950671 + 1141415, + 4829464 ], [ - 2073397, - 5950664 + 1141407, + 4829454 ], [ - 2073407, - 5950656 + 1141399, + 4829444 ], [ - 2073418, - 5950651 + 1141392, + 4829434 ], [ - 2073429, - 5950643 + 1141384, + 4829425 ], [ - 2073438, - 5950636 + 1141376, + 4829415 ], [ - 2073449, - 5950629 + 1141368, + 4829405 ], [ - 2073460, - 5950622 + 1141360, + 4829394 ], [ - 2073470, - 5950614 + 1141352, + 4829385 ], [ - 2073480, - 5950608 + 1141345, + 4829375 ], [ - 2073491, - 5950600 + 1141337, + 4829365 ], [ - 2073501, - 5950593 + 1141329, + 4829355 ], [ - 2073512, - 5950587 + 1141321, + 4829346 ], [ - 2073521, - 5950579 + 1141314, + 4829336 ], [ - 2073531, - 5950572 + 1141306, + 4829326 ], [ - 2073542, - 5950566 + 1141298, + 4829316 ], [ - 2073553, - 5950559 + 1141290, + 4829307 ], [ - 2073562, - 5950551 + 1141283, + 4829297 ], [ - 2073574, - 5950545 + 1141276, + 4829287 ], [ - 2073584, - 5950537 + 1141268, + 4829277 ], [ - 2073594, - 5950530 + 1141260, + 4829268 ], [ - 2073605, - 5950524 + 1141253, + 4829258 ], [ - 2073616, - 5950517 + 1141245, + 4829248 ], [ - 2073626, - 5950510 + 1141237, + 4829238 ], [ - 2073638, - 5950504 + 1141229, + 4829229 ], [ - 2073647, - 5950497 + 1141222, + 4829219 ], [ - 2073658, - 5950489 + 1141214, + 4829209 ], [ - 2073668, - 5950483 + 1141207, + 4829199 ], [ - 2073679, - 5950475 + 1141199, + 4829190 ], [ - 2073688, - 5950468 + 1141191, + 4829180 ], [ - 2073698, - 5950460 + 1141183, + 4829170 ], [ - 2073709, - 5950453 + 1141176, + 4829159 ], [ - 2073718, - 5950445 + 1141168, + 4829149 ], [ - 2073728, - 5950439 + 1141161, + 4829139 ], [ - 2073739, - 5950432 + 1141153, + 4829130 ], [ - 2073749, - 5950424 + 1141146, + 4829120 ], [ - 2073759, - 5950418 + 1141138, + 4829110 ], [ - 2073770, - 5950410 + 1141131, + 4829100 ], [ - 2073780, - 5950403 + 1141123, + 4829090 ], [ - 2073792, - 5950397 + 1141115, + 4829080 ], [ - 2073801, - 5950390 + 1141107, + 4829070 ], [ - 2073812, - 5950382 + 1141100, + 4829060 ], [ - 2073824, - 5950378 + 1141092, + 4829050 ], [ - 2073834, - 5950370 + 1141085, + 4829040 ], [ - 2073843, - 5950363 + 1141077, + 4829030 ], [ - 2073855, - 5950357 + 1141070, + 4829020 ], [ - 2073866, - 5950350 + 1141062, + 4829010 ], [ - 2073876, - 5950343 + 1141055, + 4829000 ], [ - 2073887, - 5950336 + 1141047, + 4828991 ], [ - 2073897, - 5950329 + 1141040, + 4828981 ], [ - 2073908, - 5950321 + 1141032, + 4828971 ], [ - 2073920, - 5950315 + 1141025, + 4828961 ], [ - 2073929, - 5950307 + 1141017, + 4828951 ], [ - 2073940, - 5950300 + 1141009, + 4828941 ], [ - 2073950, - 5950293 + 1141001, + 4828931 ], [ - 2073961, - 5950286 + 1140994, + 4828921 ], [ - 2073971, - 5950279 + 1140986, + 4828911 ], [ - 2073981, - 5950273 + 1140979, + 4828901 ], [ - 2073991, - 5950266 + 1140972, + 4828891 ], [ - 2074002, - 5950258 + 1140965, + 4828880 ], [ - 2074010, - 5950252 + 1140957, + 4828870 ], [ - 2074021, - 5950244 + 1140950, + 4828860 ], [ - 2074032, - 5950237 + 1140942, + 4828851 ], [ - 2074042, - 5950231 + 1140934, + 4828840 ], [ - 2074052, - 5950224 + 1140926, + 4828830 ], [ - 2074062, - 5950216 + 1140919, + 4828820 ], [ - 2074073, - 5950209 + 1140911, + 4828810 ], [ - 2074083, - 5950201 + 1140903, + 4828800 ], [ - 2074093, - 5950194 + 1140895, + 4828791 ], [ - 2074103, - 5950188 + 1140888, + 4828781 ], [ - 2074113, - 5950180 + 1140880, + 4828771 ], [ - 2074123, - 5950173 + 1140873, + 4828761 ], [ - 2074133, - 5950165 + 1140865, + 4828752 ], [ - 2074144, - 5950158 + 1140857, + 4828742 ], [ - 2074154, - 5950150 + 1140849, + 4828732 ], [ - 2074165, - 5950143 + 1140842, + 4828722 ], [ - 2074175, - 5950135 + 1140834, + 4828712 ], [ - 2074186, - 5950128 + 1140826, + 4828702 ], [ - 2074197, - 5950122 + 1140818, + 4828693 ], [ - 2074207, - 5950114 + 1140811, + 4828683 ], [ - 2074217, - 5950107 + 1140803, + 4828673 ], [ - 2074228, - 5950100 + 1140795, + 4828663 ], [ - 2074238, - 5950093 + 1140787, + 4828653 ], [ - 2074248, - 5950085 + 1140779, + 4828643 ], [ - 2074258, - 5950079 + 1140771, + 4828633 ], [ - 2074268, - 5950071 + 1140763, + 4828623 ], [ - 2074279, - 5950064 + 1140755, + 4828613 ], [ - 2074288, - 5950057 + 1140748, + 4828603 ], [ - 2074298, - 5950050 + 1140740, + 4828594 ], [ - 2074309, - 5950043 + 1140733, + 4828584 ], [ - 2074320, - 5950037 + 1140725, + 4828575 ], [ - 2074329, - 5950030 + 1140717, + 4828565 ], [ - 2074340, - 5950022 + 1140709, + 4828555 ], [ - 2074351, - 5950016 + 1140702, + 4828545 ], [ - 2074361, - 5950008 + 1140694, + 4828535 ], [ - 2074371, - 5950002 + 1140687, + 4828525 ], [ - 2074382, - 5949994 + 1140679, + 4828515 ], [ - 2074393, - 5949987 + 1140672, + 4828505 ], [ - 2074403, - 5949979 + 1140664, + 4828496 ], [ - 2074413, - 5949973 - ], - [ - 2074424, - 5949966 - ], - [ - 2074434, - 5949959 - ], - [ - 2074443, - 5949953 - ], - [ - 2074454, - 5949945 - ], - [ - 2074464, - 5949938 - ], - [ - 2074475, - 5949932 - ], - [ - 2074485, - 5949925 - ], - [ - 2074495, - 5949917 - ], - [ - 2074507, - 5949912 - ], - [ - 2074517, - 5949904 - ], - [ - 2074527, - 5949897 - ], - [ - 2074538, - 5949892 - ], - [ - 2074548, - 5949884 - ], - [ - 2074559, - 5949877 - ], - [ - 2074568, - 5949870 - ], - [ - 2074579, - 5949863 - ], - [ - 2074590, - 5949855 - ], - [ - 2074601, - 5949849 - ], - [ - 2074611, - 5949841 - ], - [ - 2074621, - 5949834 - ], - [ - 2074632, - 5949827 - ], - [ - 2074643, - 5949820 - ], - [ - 2074652, - 5949813 - ], - [ - 2074661, - 5949807 - ], - [ - 2074672, - 5949800 - ], - [ - 2074682, - 5949792 - ], - [ - 2074693, - 5949787 - ], - [ - 2074703, - 5949779 - ], - [ - 2074714, - 5949772 - ], - [ - 2074726, - 5949765 - ], - [ - 2074736, - 5949759 - ], - [ - 2074746, - 5949751 - ], - [ - 2074759, - 5949745 - ], - [ - 2074769, - 5949737 - ], - [ - 2074779, - 5949730 - ], - [ - 2074789, - 5949723 - ], - [ - 2074800, - 5949715 - ], - [ - 2074811, - 5949709 - ], - [ - 2074820, - 5949701 - ], - [ - 2074831, - 5949694 - ], - [ - 2074841, - 5949686 - ], - [ - 2074851, - 5949679 - ], - [ - 2074861, - 5949672 - ], - [ - 2074872, - 5949665 - ], - [ - 2074882, - 5949658 - ], - [ - 2074892, - 5949651 - ], - [ - 2074902, - 5949644 - ], - [ - 2074912, - 5949637 - ], - [ - 2074922, - 5949630 - ], - [ - 2074932, - 5949622 - ], - [ - 2074942, - 5949615 - ], - [ - 2074952, - 5949608 - ], - [ - 2074963, - 5949601 - ], - [ - 2074972, - 5949594 - ], - [ - 2074982, - 5949587 - ], - [ - 2074993, - 5949580 - ], - [ - 2075003, - 5949573 - ], - [ - 2075013, - 5949566 - ], - [ - 2075023, - 5949558 - ], - [ - 2075034, - 5949552 - ], - [ - 2075045, - 5949544 - ], - [ - 2075054, - 5949537 - ], - [ - 2075066, - 5949531 - ], - [ - 2075076, - 5949524 - ], - [ - 2075087, - 5949516 - ], - [ - 2075097, - 5949511 - ], - [ - 2075108, - 5949504 - ], - [ - 2075118, - 5949496 - ], - [ - 2075129, - 5949491 - ], - [ - 2075139, - 5949483 - ], - [ - 2075149, - 5949476 - ], - [ - 2075160, - 5949469 - ], - [ - 2075171, - 5949462 - ], - [ - 2075180, - 5949455 - ], - [ - 2075192, - 5949447 - ], - [ - 2075202, - 5949440 - ], - [ - 2075213, - 5949433 - ], - [ - 2075223, - 5949425 - ], - [ - 2075234, - 5949418 - ], - [ - 2075244, - 5949412 - ], - [ - 2075254, - 5949403 - ], - [ - 2075264, - 5949397 - ], - [ - 2075275, - 5949389 - ], - [ - 2075285, - 5949382 - ], - [ - 2075294, - 5949374 - ], - [ - 2075305, - 5949367 - ], - [ - 2075315, - 5949360 - ], - [ - 2075325, - 5949354 - ], - [ - 2075335, - 5949347 - ], - [ - 2075344, - 5949338 - ], - [ - 2075355, - 5949332 - ], - [ - 2075365, - 5949324 - ], - [ - 2075375, - 5949317 - ], - [ - 2075386, - 5949309 - ], - [ - 2075396, - 5949302 - ], - [ - 2075407, - 5949295 - ], - [ - 2075416, - 5949288 - ], - [ - 2075427, - 5949281 - ], - [ - 2075437, - 5949274 - ], - [ - 2075447, - 5949267 - ], - [ - 2075458, - 5949260 - ], - [ - 2075468, - 5949254 - ], - [ - 2075479, - 5949246 - ], - [ - 2075490, - 5949240 - ], - [ - 2075499, - 5949234 - ], - [ - 2075510, - 5949227 - ], - [ - 2075521, - 5949219 - ], - [ - 2075531, - 5949213 - ], - [ - 2075541, - 5949206 - ], - [ - 2075552, - 5949199 - ], - [ - 2075563, - 5949192 - ], - [ - 2075574, - 5949184 - ], - [ - 2075584, - 5949178 - ], - [ - 2075595, - 5949170 - ], - [ - 2075606, - 5949164 - ], - [ - 2075617, - 5949156 - ], - [ - 2075627, - 5949150 - ], - [ - 2075637, - 5949142 - ], - [ - 2075648, - 5949135 - ], - [ - 2075658, - 5949129 - ], - [ - 2075668, - 5949122 - ], - [ - 2075679, - 5949114 - ], - [ - 2075688, - 5949107 - ], - [ - 2075698, - 5949101 - ], - [ - 2075709, - 5949093 - ], - [ - 2075719, - 5949086 - ], + 1140657, + 4828486 + ] + ], + [ [ - 2075730, - 5949079 + 1120900, + 4834625 ], [ - 2075739, - 5949072 + 1120910, + 4834617 ], [ - 2075749, - 5949065 + 1120919, + 4834610 ], [ - 2075760, - 5949058 + 1120929, + 4834602 ], [ - 2075771, - 5949050 + 1120938, + 4834595 ], [ - 2075780, - 5949044 + 1120948, + 4834587 ], [ - 2075791, - 5949038 + 1120957, + 4834580 ], [ - 2075802, - 5949030 + 1120967, + 4834572 ], [ - 2075812, - 5949025 + 1120976, + 4834565 ], [ - 2075822, - 5949017 + 1120986, + 4834557 ], [ - 2075832, - 5949011 + 1120995, + 4834550 ], [ - 2075843, - 5949004 + 1121005, + 4834542 ], [ - 2075854, - 5948998 + 1121014, + 4834535 ], [ - 2075863, - 5948990 + 1121024, + 4834527 ], [ - 2075876, - 5948984 + 1121033, + 4834520 ], [ - 2075887, - 5948977 + 1121043, + 4834512 ], [ - 2075897, - 5948970 + 1121052, + 4834505 ], [ - 2075909, - 5948963 + 1121062, + 4834497 ], [ - 2075919, - 5948956 + 1121072, + 4834490 ], [ - 2075930, - 5948949 + 1121082, + 4834482 ], [ - 2075941, - 5948943 + 1121091, + 4834475 ], [ - 2075951, - 5948936 + 1121101, + 4834467 ], [ - 2075961, - 5948928 + 1121110, + 4834460 ], [ - 2075971, - 5948922 + 1121120, + 4834452 ], [ - 2075982, - 5948914 + 1121129, + 4834445 ], [ - 2075992, - 5948908 + 1121139, + 4834437 ], [ - 2076001, - 5948899 + 1121148, + 4834430 ], [ - 2076012, - 5948893 + 1121158, + 4834422 ], [ - 2076023, - 5948885 + 1121167, + 4834415 ], [ - 2076032, - 5948879 + 1121177, + 4834407 ], [ - 2076042, - 5948873 + 1121186, + 4834400 ], [ - 2076053, - 5948865 + 1121196, + 4834392 ], [ - 2076063, - 5948859 + 1121205, + 4834385 ], [ - 2076073, - 5948851 + 1121215, + 4834377 ], [ - 2076084, - 5948845 + 1121224, + 4834370 ], [ - 2076094, - 5948836 + 1121234, + 4834362 ], [ - 2076105, - 5948830 + 1121243, + 4834355 ], [ - 2076114, - 5948822 + 1121253, + 4834347 ], [ - 2076124, - 5948816 + 1121262, + 4834340 ], [ - 2076135, - 5948809 + 1121272, + 4834332 ], [ - 2076146, - 5948801 + 1121281, + 4834325 ], [ - 2076156, - 5948795 + 1121291, + 4834317 ], [ - 2076166, - 5948787 + 1121301, + 4834310 ], [ - 2076177, - 5948781 + 1121311, + 4834302 ], [ - 2076189, - 5948773 + 1121320, + 4834295 ], [ - 2076198, - 5948767 + 1121330, + 4834287 ], [ - 2076209, - 5948759 + 1121339, + 4834280 ], [ - 2076220, - 5948753 + 1121349, + 4834272 ], [ - 2076231, - 5948745 + 1121358, + 4834265 ], [ - 2076241, - 5948738 + 1121368, + 4834257 ], [ - 2076251, - 5948730 + 1121377, + 4834250 ], [ - 2076262, - 5948724 + 1121387, + 4834242 ], [ - 2076272, - 5948717 + 1121396, + 4834235 ], [ - 2076281, - 5948709 + 1121406, + 4834227 ], [ - 2076292, - 5948702 + 1121415, + 4834220 ], [ - 2076302, - 5948695 + 1121425, + 4834212 ], [ - 2076311, - 5948688 + 1121434, + 4834205 ], [ - 2076322, - 5948681 + 1121444, + 4834197 ], [ - 2076333, - 5948674 + 1121453, + 4834190 ], [ - 2076343, - 5948667 + 1121463, + 4834182 ], [ - 2076352, - 5948660 + 1121472, + 4834175 ], [ - 2076363, - 5948653 + 1121482, + 4834167 ], [ - 2076374, - 5948647 + 1121491, + 4834160 ], [ - 2076384, - 5948640 + 1121501, + 4834152 ], [ - 2076395, - 5948633 + 1121510, + 4834145 ], [ - 2076404, - 5948627 + 1121520, + 4834137 ], [ - 2076415, - 5948619 + 1121529, + 4834130 ], [ - 2076426, - 5948612 + 1121540, + 4834122 ], [ - 2076435, - 5948605 + 1121549, + 4834115 ], [ - 2076445, - 5948598 + 1121559, + 4834107 ], [ - 2076456, - 5948591 + 1121568, + 4834100 ], [ - 2076467, - 5948585 + 1121578, + 4834092 ], [ - 2076477, - 5948577 + 1121587, + 4834085 ], [ - 2076488, - 5948571 + 1121597, + 4834077 ], [ - 2076499, - 5948563 + 1121606, + 4834070 ], [ - 2076510, - 5948556 + 1121616, + 4834062 ], [ - 2076519, - 5948549 + 1121625, + 4834055 ], [ - 2076530, - 5948541 + 1121635, + 4834047 ], [ - 2076541, - 5948535 + 1121644, + 4834040 ], [ - 2076551, - 5948527 + 1121654, + 4834032 ], [ - 2076561, - 5948520 + 1121663, + 4834025 ], [ - 2076572, - 5948513 + 1121673, + 4834017 ], [ - 2076583, - 5948506 + 1121682, + 4834010 ], [ - 2076594, - 5948499 + 1121692, + 4834002 ], [ - 2076603, - 5948493 + 1121701, + 4833995 ], [ - 2076614, - 5948485 + 1121711, + 4833987 ], [ - 2076624, - 5948478 + 1121720, + 4833980 ], [ - 2076635, - 5948472 + 1121730, + 4833972 ], [ - 2076645, - 5948464 + 1121739, + 4833965 ], [ - 2076655, - 5948458 + 1121749, + 4833957 ], [ - 2076666, - 5948450 + 1121758, + 4833950 ], [ - 2076676, - 5948444 + 1121769, + 4833942 ], [ - 2076686, - 5948436 + 1121778, + 4833935 ], [ - 2076696, - 5948430 + 1121788, + 4833927 ], [ - 2076707, - 5948422 + 1121797, + 4833920 ], [ - 2076718, - 5948417 + 1121807, + 4833912 ], [ - 2076728, - 5948409 + 1121816, + 4833905 ], [ - 2076738, - 5948403 + 1121826, + 4833897 ], [ - 2076749, - 5948397 + 1121835, + 4833890 ], [ - 2076760, - 5948389 + 1121845, + 4833882 ], [ - 2076770, - 5948383 + 1121854, + 4833875 ], [ - 2076781, - 5948375 + 1121864, + 4833867 ], [ - 2076792, - 5948368 + 1121873, + 4833860 ], [ - 2076802, - 5948361 + 1121883, + 4833852 ], [ - 2076812, - 5948353 + 1121892, + 4833845 ], [ - 2076823, - 5948346 + 1121902, + 4833837 ], [ - 2076834, - 5948340 + 1121911, + 4833830 ], [ - 2076844, - 5948332 + 1121921, + 4833822 ], [ - 2076854, - 5948325 + 1121930, + 4833815 ], [ - 2076864, - 5948319 + 1121940, + 4833807 ], [ - 2076875, - 5948312 + 1121949, + 4833800 ], [ - 2076885, - 5948305 + 1121959, + 4833792 ], [ - 2076895, - 5948298 + 1121968, + 4833785 ], [ - 2076906, - 5948291 + 1121978, + 4833778 ], [ - 2076916, - 5948284 + 1121987, + 4833771 ], [ - 2076927, - 5948277 + 1121998, + 4833763 ], [ - 2076936, - 5948270 + 1122007, + 4833756 ], [ - 2076947, - 5948263 + 1122017, + 4833748 ], [ - 2076958, - 5948256 + 1122026, + 4833741 ], [ - 2076968, - 5948249 + 1122036, + 4833733 ], [ - 2076977, - 5948242 + 1122045, + 4833726 ], [ - 2076988, - 5948234 + 1122055, + 4833718 ], [ - 2076998, - 5948228 + 1122064, + 4833711 ], [ - 2077009, - 5948220 + 1122074, + 4833703 ], [ - 2077018, - 5948213 + 1122083, + 4833696 ], [ - 2077029, - 5948206 + 1122093, + 4833688 ], [ - 2077040, - 5948199 + 1122102, + 4833681 ], [ - 2077049, - 5948192 + 1122112, + 4833673 ], [ - 2077060, - 5948186 + 1122121, + 4833666 ], [ - 2077071, - 5948178 + 1122131, + 4833658 ], [ - 2077082, - 5948171 + 1122140, + 4833651 ], [ - 2077091, - 5948165 + 1122150, + 4833643 ], [ - 2077102, - 5948157 + 1122159, + 4833636 ], [ - 2077113, - 5948150 + 1122169, + 4833628 ], [ - 2077123, - 5948143 + 1122178, + 4833621 ], [ - 2077132, - 5948136 + 1122188, + 4833613 ], [ - 2077143, - 5948129 + 1122197, + 4833606 ], [ - 2077154, - 5948123 + 1122207, + 4833598 ], [ - 2077165, - 5948115 + 1122216, + 4833591 ], [ - 2077175, - 5948109 + 1122227, + 4833583 ], [ - 2077186, - 5948102 + 1122236, + 4833576 ], [ - 2077196, - 5948096 + 1122246, + 4833568 ], [ - 2077207, - 5948089 + 1122255, + 4833561 ], [ - 2077218, - 5948082 + 1122265, + 4833553 ], [ - 2077228, - 5948076 + 1122274, + 4833546 ], [ - 2077239, - 5948068 + 1122284, + 4833538 ], [ - 2077249, - 5948062 + 1122293, + 4833531 ], [ - 2077259, - 5948054 + 1122303, + 4833523 ], [ - 2077270, - 5948048 + 1122312, + 4833516 ], [ - 2077279, - 5948040 + 1122322, + 4833508 ], [ - 2077290, - 5948033 + 1122331, + 4833501 ], [ - 2077300, - 5948026 + 1122341, + 4833493 ], [ - 2077311, - 5948019 + 1122350, + 4833486 ], [ - 2077322, - 5948012 + 1122360, + 4833478 ], [ - 2077333, - 5948005 + 1122369, + 4833471 ], [ - 2077343, - 5947998 + 1122379, + 4833463 ], [ - 2077353, - 5947990 + 1122388, + 4833456 ], [ - 2077364, - 5947984 + 1122398, + 4833448 ], [ - 2077375, - 5947976 + 1122407, + 4833441 ], [ - 2077384, - 5947969 + 1122417, + 4833433 ], [ - 2077395, - 5947962 + 1122426, + 4833426 ], [ - 2077405, - 5947955 + 1122436, + 4833418 ], [ - 2077416, - 5947948 + 1122445, + 4833411 ], [ - 2077425, - 5947941 + 1122456, + 4833403 ], [ - 2077436, - 5947934 + 1122465, + 4833396 ], [ - 2077446, - 5947927 + 1122475, + 4833388 ], [ - 2077457, - 5947921 + 1122484, + 4833381 ], [ - 2077466, - 5947913 + 1122494, + 4833373 ], [ - 2077477, - 5947906 + 1122504, + 4833365 ], [ - 2077488, - 5947898 + 1122514, + 4833357 ], [ - 2077498, - 5947891 + 1122523, + 4833350 ], [ - 2077507, - 5947884 + 1122534, + 4833342 ], [ - 2077518, - 5947877 + 1122544, + 4833335 ], [ - 2077528, - 5947869 + 1122555, + 4833328 ], [ - 2077539, - 5947863 + 1122565, + 4833321 ], [ - 2077549, - 5947855 + 1122575, + 4833313 ], [ - 2077560, - 5947848 + 1122584, + 4833305 ], [ - 2077570, - 5947842 + 1122594, + 4833297 ], [ - 2077580, - 5947834 + 1122604, + 4833290 ], [ - 2077591, - 5947828 + 1122614, + 4833282 ], [ - 2077601, - 5947820 + 1122623, + 4833275 ], [ - 2077612, - 5947813 + 1122634, + 4833267 ], [ - 2077622, - 5947806 + 1122644, + 4833260 ], [ - 2077632, - 5947799 + 1122654, + 4833252 ], [ - 2077643, - 5947792 + 1122664, + 4833245 ], [ - 2077653, - 5947785 + 1122674, + 4833237 ], [ - 2077663, - 5947778 + 1122684, + 4833230 ], [ - 2077674, - 5947771 + 1122695, + 4833223 ], [ - 2077683, - 5947765 + 1122705, + 4833217 ], [ - 2077694, - 5947757 + 1122716, + 4833209 ], [ - 2077704, - 5947751 + 1122726, + 4833202 ], [ - 2077713, - 5947744 + 1122737, + 4833195 ], [ - 2077724, - 5947737 + 1122747, + 4833188 ], [ - 2077735, - 5947729 + 1122757, + 4833180 ], [ - 2077745, - 5947723 + 1122767, + 4833173 ], [ - 2077756, - 5947716 + 1122778, + 4833165 ], [ - 2077766, - 5947709 + 1122788, + 4833158 ], [ - 2077777, - 5947703 + 1122798, + 4833150 ], [ - 2077787, - 5947696 + 1122808, + 4833143 ], [ - 2077797, - 5947689 + 1122819, + 4833135 ], [ - 2077808, - 5947681 + 1122829, + 4833127 ], [ - 2077819, - 5947675 + 1122839, + 4833120 ], [ - 2077829, - 5947667 + 1122849, + 4833113 ], [ - 2077840, - 5947661 + 1122858, + 4833105 ], [ - 2077850, - 5947653 + 1122867, + 4833097 ], [ - 2077861, - 5947647 + 1122877, + 4833089 ], [ - 2077870, - 5947639 + 1122887, + 4833082 ], [ - 2077881, - 5947632 + 1122897, + 4833074 ], [ - 2077892, - 5947625 + 1122907, + 4833067 ], [ - 2077903, - 5947619 + 1122917, + 4833059 ], [ - 2077912, - 5947613 + 1122928, + 4833051 ], [ - 2077923, - 5947605 + 1122938, + 4833043 ], [ - 2077934, - 5947599 + 1122947, + 4833036 ], [ - 2077945, - 5947591 + 1122957, + 4833028 ], [ - 2077954, - 5947585 + 1122967, + 4833020 ], [ - 2077966, - 5947577 + 1122977, + 4833012 ], [ - 2077976, - 5947570 + 1122987, + 4833005 ], [ - 2077987, - 5947562 + 1122997, + 4832997 ], [ - 2077996, - 5947555 + 1123007, + 4832990 ], [ - 2078007, - 5947548 + 1123017, + 4832982 ], [ - 2078018, - 5947541 + 1123027, + 4832975 ], [ - 2078028, - 5947534 + 1123037, + 4832967 ], [ - 2078037, - 5947526 + 1123047, + 4832960 ], [ - 2078048, - 5947519 + 1123057, + 4832952 ], [ - 2078057, - 5947512 + 1123067, + 4832944 ], [ - 2078068, - 5947505 + 1123077, + 4832936 ], [ - 2078078, - 5947498 + 1123087, + 4832929 ], [ - 2078088, - 5947491 + 1123097, + 4832921 ], [ - 2078099, - 5947484 + 1123107, + 4832914 ], [ - 2078109, - 5947477 + 1123117, + 4832906 ], [ - 2078119, - 5947471 + 1123126, + 4832898 ], [ - 2078129, - 5947464 + 1123136, + 4832890 ], [ - 2078140, - 5947458 + 1123146, + 4832883 ], [ - 2078151, - 5947452 + 1123157, + 4832875 ], [ - 2078161, - 5947445 + 1123168, + 4832868 ], [ - 2078172, - 5947438 + 1123179, + 4832861 ], [ - 2078183, - 5947432 + 1123189, + 4832854 ], [ - 2078194, - 5947424 + 1123199, + 4832846 ], [ - 2078204, - 5947418 + 1123208, + 4832839 ], [ - 2078216, - 5947411 + 1123218, + 4832830 ], [ - 2078227, - 5947405 + 1123227, + 4832822 ], [ - 2078238, - 5947397 + 1123237, + 4832814 ], [ - 2078248, - 5947391 + 1123246, + 4832806 ], [ - 2078259, - 5947384 + 1123256, + 4832798 ], [ - 2078270, - 5947378 + 1123265, + 4832791 ], [ - 2078281, - 5947369 + 1123275, + 4832783 ], [ - 2078291, - 5947363 + 1123285, + 4832775 ], [ - 2078302, - 5947355 + 1123295, + 4832767 ], [ - 2078311, - 5947348 + 1123305, + 4832760 ], [ - 2078322, - 5947341 + 1123315, + 4832752 ], [ - 2078332, - 5947334 + 1123324, + 4832744 ], [ - 2078341, - 5947327 + 1123334, + 4832736 ], [ - 2078352, - 5947319 + 1123344, + 4832728 ], [ - 2078363, - 5947313 + 1123354, + 4832720 ], [ - 2078372, - 5947304 + 1123363, + 4832713 ], [ - 2078382, - 5947298 + 1123374, + 4832705 ], [ - 2078393, - 5947290 + 1123384, + 4832698 ], [ - 2078403, - 5947283 + 1123395, + 4832690 ], [ - 2078413, - 5947277 + 1123405, + 4832683 ], [ - 2078424, - 5947269 + 1123415, + 4832675 ], [ - 2078434, - 5947262 + 1123424, + 4832667 ], [ - 2078444, - 5947254 + 1123434, + 4832659 ], [ - 2078454, - 5947248 + 1123443, + 4832652 ], [ - 2078465, - 5947240 + 1123453, + 4832644 ], [ - 2078475, - 5947234 + 1123462, + 4832637 ], [ - 2078485, - 5947226 + 1123472, + 4832629 ], [ - 2078495, - 5947220 + 1123481, + 4832621 ], [ - 2078506, - 5947214 + 1123491, + 4832613 ], [ - 2078516, - 5947206 + 1123501, + 4832606 ], [ - 2078525, - 5947200 + 1123511, + 4832598 ], [ - 2078536, - 5947193 + 1123521, + 4832590 ], [ - 2078547, - 5947186 + 1123531, + 4832582 ], [ - 2078558, - 5947178 + 1123541, + 4832575 ], [ - 2078567, - 5947171 + 1123551, + 4832567 ], [ - 2078578, - 5947164 + 1123561, + 4832559 ], [ - 2078589, - 5947157 + 1123571, + 4832551 ], [ - 2078599, - 5947149 + 1123581, + 4832544 ], [ - 2078609, - 5947143 + 1123592, + 4832536 ], [ - 2078620, - 5947137 + 1123602, + 4832529 ], [ - 2078630, - 5947130 + 1123612, + 4832521 ], [ - 2078641, - 5947123 + 1123621, + 4832513 ], [ - 2078652, - 5947117 + 1123632, + 4832505 ], [ - 2078663, - 5947110 + 1123642, + 4832498 ], [ - 2078673, - 5947102 + 1123653, + 4832491 ], [ - 2078684, - 5947097 + 1123663, + 4832484 ], [ - 2078694, - 5947089 + 1123673, + 4832476 ], [ - 2078705, - 5947082 + 1123683, + 4832468 ], [ - 2078716, - 5947076 + 1123693, + 4832460 ], [ - 2078726, - 5947069 + 1123703, + 4832453 ], [ - 2078736, - 5947062 + 1123713, + 4832445 ], [ - 2078746, - 5947055 + 1123722, + 4832437 ], [ - 2078756, - 5947049 + 1123732, + 4832429 ], [ - 2078767, - 5947041 + 1123741, + 4832421 ], [ - 2078777, - 5947035 + 1123750, + 4832413 ], [ - 2078788, - 5947027 + 1123759, + 4832405 ], [ - 2078799, - 5947021 + 1123769, + 4832397 ], [ - 2078810, - 5947013 + 1123779, + 4832389 ], [ - 2078819, - 5947006 + 1123789, + 4832381 ], [ - 2078830, - 5946999 + 1123798, + 4832373 ], [ - 2078841, - 5946992 + 1123808, + 4832365 ], [ - 2078852, - 5946984 + 1123817, + 4832357 ], [ - 2078862, - 5946977 + 1123827, + 4832349 ], [ - 2078872, - 5946970 + 1123836, + 4832342 ], [ - 2078882, - 5946963 + 1123846, + 4832334 ], [ - 2078893, - 5946956 + 1123857, + 4832326 ], [ - 2078902, - 5946949 + 1123867, + 4832318 ], [ - 2078912, - 5946942 + 1123877, + 4832311 ], [ - 2078923, - 5946934 + 1123887, + 4832304 ], [ - 2078934, - 5946928 + 1123897, + 4832297 ], [ - 2078943, - 5946920 + 1123907, + 4832289 ], [ - 2078954, - 5946913 + 1123917, + 4832281 ], [ - 2078965, - 5946905 + 1123927, + 4832273 ], [ - 2078975, - 5946899 + 1123937, + 4832266 ], [ - 2078985, - 5946892 + 1123947, + 4832258 ], [ - 2078996, - 5946885 + 1123957, + 4832250 ], [ - 2079006, - 5946878 + 1123967, + 4832242 ], [ - 2079016, - 5946870 + 1123977, + 4832235 ], [ - 2079027, - 5946865 + 1123987, + 4832227 ], [ - 2079037, - 5946857 + 1123996, + 4832220 ], [ - 2079048, - 5946850 + 1124006, + 4832212 ], [ - 2079059, - 5946843 + 1124016, + 4832204 ], [ - 2079068, - 5946836 + 1124026, + 4832196 ], [ - 2079079, - 5946828 + 1124035, + 4832189 ], [ - 2079089, - 5946822 + 1124045, + 4832181 ], [ - 2079100, - 5946815 + 1124055, + 4832173 ], [ - 2079110, - 5946808 + 1124064, + 4832165 ], [ - 2079119, - 5946802 + 1124073, + 4832157 ], [ - 2079130, - 5946794 + 1124083, + 4832149 ], [ - 2079140, - 5946787 + 1124094, + 4832142 ], [ - 2079150, - 5946780 + 1124104, + 4832134 ], [ - 2079161, - 5946773 + 1124114, + 4832127 ], [ - 2079171, - 5946766 + 1124125, + 4832119 ], [ - 2079181, - 5946759 + 1124135, + 4832111 ], [ - 2079192, - 5946751 + 1124145, + 4832103 ], [ - 2079203, - 5946745 + 1124155, + 4832095 ], [ - 2079214, - 5946738 + 1124165, + 4832087 ], [ - 2079224, - 5946731 + 1124174, + 4832080 ], [ - 2079234, - 5946724 + 1124184, + 4832072 ], [ - 2079245, - 5946716 + 1124193, + 4832064 ], [ - 2079255, - 5946710 + 1124203, + 4832056 ], [ - 2079265, - 5946702 + 1124213, + 4832049 ], [ - 2079276, - 5946695 + 1124223, + 4832041 ], [ - 2079286, - 5946688 + 1124233, + 4832033 ], [ - 2079297, - 5946681 + 1124243, + 4832025 ], [ - 2079307, - 5946674 + 1124252, + 4832018 ], [ - 2079318, - 5946667 + 1124262, + 4832010 ], [ - 2079328, - 5946660 + 1124271, + 4832002 ], [ - 2079338, - 5946654 + 1124282, + 4831994 ], [ - 2079348, - 5946647 + 1124292, + 4831987 ], [ - 2079359, - 5946640 + 1124302, + 4831979 ], [ - 2079369, - 5946634 + 1124311, + 4831972 ], [ - 2079380, - 5946626 + 1124322, + 4831964 ], [ - 2079390, - 5946620 + 1124331, + 4831956 ], [ - 2079400, - 5946613 + 1124341, + 4831948 ], [ - 2079411, - 5946606 + 1124351, + 4831941 ], [ - 2079422, - 5946598 + 1124361, + 4831933 ], [ - 2079431, - 5946592 + 1124371, + 4831926 ], [ - 2079442, - 5946584 + 1124381, + 4831918 ], [ - 2079453, - 5946577 + 1124391, + 4831911 ], [ - 2079463, - 5946571 + 1124401, + 4831903 ], [ - 2079473, - 5946564 + 1124411, + 4831896 ], [ - 2079483, - 5946557 + 1124421, + 4831888 ], [ - 2079493, - 5946550 + 1124431, + 4831881 ], [ - 2079504, - 5946543 + 1124441, + 4831873 ], [ - 2079514, - 5946536 + 1124451, + 4831866 ], [ - 2079524, - 5946531 + 1124461, + 4831858 ], [ - 2079535, - 5946523 + 1124471, + 4831851 ], [ - 2079545, - 5946517 + 1124482, + 4831843 ], [ - 2079556, - 5946509 + 1124492, + 4831835 ], [ - 2079567, - 5946503 + 1124502, + 4831827 ], [ - 2079577, - 5946496 + 1124512, + 4831820 ], [ - 2079590, - 5946489 + 1124522, + 4831812 ], [ - 2079599, - 5946482 + 1124532, + 4831805 ], [ - 2079610, - 5946474 + 1124542, + 4831797 ], [ - 2079622, - 5946468 + 1124552, + 4831790 ], [ - 2079633, - 5946460 + 1124563, + 4831782 ], [ - 2079642, - 5946454 + 1124572, + 4831774 ], [ - 2079653, - 5946446 + 1124582, + 4831766 ], [ - 2079664, - 5946439 + 1124592, + 4831758 ], [ - 2079675, - 5946432 + 1124602, + 4831750 ], [ - 2079683, - 5946425 + 1124612, + 4831743 ], [ - 2079694, - 5946418 + 1124622, + 4831735 ], [ - 2079704, - 5946411 + 1124631, + 4831727 ], [ - 2079714, - 5946405 + 1124641, + 4831719 ], [ - 2079724, - 5946398 + 1124651, + 4831711 ], [ - 2079734, - 5946391 + 1124661, + 4831704 ], [ - 2079745, - 5946384 + 1124670, + 4831697 ], [ - 2079756, - 5946377 + 1124680, + 4831688 ], [ - 2079765, - 5946370 + 1124690, + 4831680 ], [ - 2079777, - 5946363 + 1124700, + 4831672 ], [ - 2079787, - 5946355 + 1124709, + 4831665 ], [ - 2079798, - 5946349 + 1124719, + 4831657 ], [ - 2079808, - 5946341 + 1124728, + 4831650 ], [ - 2079818, - 5946334 + 1124738, + 4831642 ], [ - 2079829, - 5946327 + 1124747, + 4831634 ], [ - 2079838, - 5946318 + 1124757, + 4831626 ], [ - 2079848, - 5946312 + 1124767, + 4831619 ], [ - 2079859, - 5946304 + 1124777, + 4831611 ], [ - 2079868, - 5946297 + 1124788, + 4831603 ], [ - 2079878, - 5946289 + 1124798, + 4831595 ], [ - 2079888, - 5946282 + 1124808, + 4831589 ], [ - 2079898, - 5946275 + 1124818, + 4831581 ], [ - 2079908, - 5946268 + 1124828, + 4831574 ], [ - 2079918, - 5946261 + 1124838, + 4831566 ], [ - 2079928, - 5946254 + 1124848, + 4831558 ], [ - 2079939, - 5946247 + 1124858, + 4831550 ], [ - 2079950, - 5946239 + 1124868, + 4831543 ], [ - 2079960, - 5946234 + 1124878, + 4831535 ], [ - 2079970, - 5946226 + 1124887, + 4831527 ], [ - 2079981, - 5946220 + 1124897, + 4831519 ], [ - 2079993, - 5946215 + 1124907, + 4831512 ], [ - 2080003, - 5946208 + 1124918, + 4831504 ], [ - 2080013, - 5946200 + 1124928, + 4831497 ], [ - 2080026, - 5946196 + 1124938, + 4831489 ], [ - 2080037, - 5946188 + 1124948, + 4831481 ], [ - 2080046, - 5946181 + 1124958, + 4831473 ], [ - 2080058, - 5946175 + 1124967, + 4831466 ], [ - 2080069, - 5946168 + 1124977, + 4831458 ], [ - 2080079, - 5946161 + 1124986, + 4831450 ], [ - 2080089, - 5946154 + 1124996, + 4831442 ], [ - 2080099, - 5946147 + 1125005, + 4831435 ], [ - 2080109, - 5946140 + 1125015, + 4831427 ], [ - 2080120, - 5946134 + 1125026, + 4831420 ], [ - 2080131, - 5946126 + 1125036, + 4831412 ], [ - 2080140, - 5946119 + 1125046, + 4831405 ], [ - 2080152, - 5946113 + 1125056, + 4831398 ], [ - 2080163, - 5946106 + 1125066, + 4831391 ], [ - 2080173, - 5946098 + 1125076, + 4831383 ], [ - 2080184, - 5946092 + 1125086, + 4831376 ], [ - 2080194, - 5946084 + 1125096, + 4831368 ], [ - 2080205, - 5946077 + 1125106, + 4831361 ], [ - 2080214, - 5946071 + 1125117, + 4831353 ], [ - 2080224, - 5946063 + 1125127, + 4831346 ], [ - 2080234, - 5946056 + 1125138, + 4831338 ], [ - 2080244, - 5946047 + 1125148, + 4831331 ], [ - 2080253, - 5946040 + 1125159, + 4831323 ], [ - 2080264, - 5946032 + 1125169, + 4831316 ], [ - 2080274, - 5946024 + 1125179, + 4831308 ], [ - 2080284, - 5946018 + 1125189, + 4831301 ], [ - 2080294, - 5946010 + 1125199, + 4831293 ], [ - 2080304, - 5946003 + 1125208, + 4831285 ], [ - 2080314, - 5945995 + 1125218, + 4831277 ], [ - 2080324, - 5945988 + 1125227, + 4831270 ], [ - 2080336, - 5945981 + 1125237, + 4831262 ], [ - 2080346, - 5945974 + 1125247, + 4831254 ], [ - 2080357, - 5945966 + 1125258, + 4831246 ], [ - 2080368, - 5945961 + 1125268, + 4831238 ], [ - 2080378, - 5945953 + 1125278, + 4831230 ], [ - 2080389, - 5945946 + 1125287, + 4831223 ], [ - 2080399, - 5945940 + 1125297, + 4831215 ], [ - 2080409, - 5945933 + 1125307, + 4831207 ], [ - 2080419, - 5945926 + 1125317, + 4831200 ], [ - 2080430, - 5945920 + 1125327, + 4831193 ], [ - 2080440, - 5945913 + 1125337, + 4831185 ], [ - 2080450, - 5945905 + 1125347, + 4831178 ], [ - 2080461, - 5945900 + 1125357, + 4831170 ], [ - 2080471, - 5945892 + 1125366, + 4831162 ], [ - 2080482, - 5945886 + 1125376, + 4831154 ], [ - 2080493, - 5945879 + 1125386, + 4831146 ], [ - 2080503, - 5945872 + 1125396, + 4831138 ], [ - 2080514, - 5945864 + 1125406, + 4831131 ], [ - 2080525, - 5945858 + 1125417, + 4831123 ], [ - 2080534, - 5945851 + 1125427, + 4831116 ], [ - 2080545, - 5945843 + 1125437, + 4831108 ], [ - 2080556, - 5945837 + 1125446, + 4831101 ], [ - 2080567, - 5945829 + 1125456, + 4831093 ], [ - 2080576, - 5945823 + 1125465, + 4831085 ], [ - 2080586, - 5945815 + 1125475, + 4831077 ], [ - 2080597, - 5945808 + 1125484, + 4831070 ], [ - 2080608, - 5945801 + 1125496, + 4831062 ], [ - 2080616, - 5945794 + 1125506, + 4831055 ], [ - 2080627, - 5945786 + 1125516, + 4831047 ], [ - 2080637, - 5945779 + 1125526, + 4831040 ], [ - 2080647, - 5945773 + 1125536, + 4831032 ], [ - 2080657, - 5945765 + 1125546, + 4831024 ], [ - 2080667, - 5945758 + 1125556, + 4831016 ], [ - 2080677, - 5945751 + 1125566, + 4831009 ], [ - 2080688, - 5945744 + 1125576, + 4831001 ], [ - 2080697, - 5945736 + 1125586, + 4830994 ], [ - 2080709, - 5945730 + 1125596, + 4830986 ], [ - 2080720, - 5945722 + 1125606, + 4830979 ], [ - 2080730, - 5945715 + 1125616, + 4830971 ], [ - 2080741, - 5945708 + 1125626, + 4830964 ], [ - 2080752, - 5945701 + 1125636, + 4830956 ], [ - 2080762, - 5945694 + 1125646, + 4830948 ], [ - 2080773, - 5945688 + 1125656, + 4830940 ], [ - 2080782, - 5945681 + 1125665, + 4830932 ], [ - 2080793, - 5945673 + 1125675, + 4830924 ], [ - 2080803, - 5945668 + 1125685, + 4830917 ], [ - 2080814, - 5945660 + 1125695, + 4830909 ], [ - 2080823, - 5945653 + 1125705, + 4830902 ], [ - 2080834, - 5945645 + 1125715, + 4830894 ], [ - 2080845, - 5945638 + 1125726, + 4830886 ], [ - 2080854, - 5945630 + 1125736, + 4830878 ], [ - 2080866, - 5945624 + 1125746, + 4830871 ], [ - 2080876, - 5945617 + 1125756, + 4830863 ], [ - 2080887, - 5945609 + 1125766, + 4830856 ], [ - 2080896, - 5945602 + 1125776, + 4830848 ], [ - 2080906, - 5945594 + 1125786, + 4830840 ], [ - 2080917, - 5945588 + 1125796, + 4830832 ], [ - 2080927, - 5945580 + 1125806, + 4830825 ], [ - 2080936, - 5945573 + 1125815, + 4830817 ], [ - 2080947, - 5945565 + 1125824, + 4830809 ], [ - 2080957, - 5945559 + 1125834, + 4830801 ], [ - 2080967, - 5945552 + 1125843, + 4830793 ], [ - 2080977, - 5945544 + 1125853, + 4830785 ], [ - 2080988, - 5945539 + 1125863, + 4830778 ], [ - 2080998, - 5945531 + 1125873, + 4830770 ], [ - 2081009, - 5945524 + 1125883, + 4830762 ], [ - 2081019, - 5945518 + 1125893, + 4830754 ], [ - 2081030, - 5945511 + 1125902, + 4830747 ], [ - 2081040, - 5945503 + 1125912, + 4830739 ], [ - 2081052, - 5945497 + 1125921, + 4830731 ], [ - 2081062, - 5945489 + 1125932, + 4830723 ], [ - 2081072, - 5945482 + 1125942, + 4830716 ], [ - 2081082, - 5945476 + 1125952, + 4830708 ], [ - 2081093, - 5945469 + 1125963, + 4830701 ], [ - 2081103, - 5945462 + 1125973, + 4830693 ], [ - 2081113, - 5945456 + 1125983, + 4830686 ], [ - 2081123, - 5945449 + 1125994, + 4830678 ], [ - 2081134, - 5945441 + 1126004, + 4830670 ], [ - 2081144, - 5945436 + 1126014, + 4830662 ], [ - 2081154, - 5945428 + 1126024, + 4830655 ], [ - 2081165, - 5945421 + 1126033, + 4830647 ], [ - 2081177, - 5945415 + 1126042, + 4830639 ], [ - 2081186, - 5945408 + 1126052, + 4830631 ], [ - 2081197, - 5945400 + 1126061, + 4830623 ], [ - 2081208, - 5945394 + 1126071, + 4830615 ], [ - 2081219, - 5945386 + 1126080, + 4830607 ], [ - 2081228, - 5945379 + 1126090, + 4830599 ], [ - 2081239, - 5945372 + 1126100, + 4830591 ], [ - 2081250, - 5945364 + 1126110, + 4830583 ], [ - 2081260, - 5945357 + 1126120, + 4830575 ], [ - 2081270, - 5945350 + 1126130, + 4830567 ], [ - 2081281, - 5945343 + 1126140, + 4830559 ], [ - 2081291, - 5945335 + 1126150, + 4830551 ], [ - 2081302, - 5945329 + 1126159, + 4830544 ], [ - 2081311, - 5945321 + 1126169, + 4830536 ], [ - 2081322, - 5945314 + 1126178, + 4830528 ], [ - 2081333, - 5945307 + 1126189, + 4830520 ], [ - 2081342, - 5945300 + 1126198, + 4830512 ], [ - 2081353, - 5945293 + 1126208, + 4830504 ], [ - 2081363, - 5945286 + 1126217, + 4830496 ], [ - 2081374, - 5945279 + 1126227, + 4830487 ], [ - 2081383, - 5945272 + 1126236, + 4830479 ], [ - 2081393, - 5945265 + 1126245, + 4830471 ], [ - 2081404, - 5945257 + 1126254, + 4830463 ], [ - 2081414, - 5945251 + 1126264, + 4830455 ], [ - 2081423, - 5945243 + 1126273, + 4830447 ], [ - 2081433, - 5945236 + 1126283, + 4830439 ], [ - 2081444, - 5945230 + 1126292, + 4830431 ], [ - 2081455, - 5945222 + 1126302, + 4830422 ], [ - 2081465, - 5945215 + 1126311, + 4830414 ], [ - 2081475, - 5945207 + 1126321, + 4830406 ], [ - 2081486, - 5945201 + 1126330, + 4830399 ], [ - 2081497, - 5945193 + 1126340, + 4830390 ], [ - 2081506, - 5945186 + 1126349, + 4830382 ], [ - 2081518, - 5945179 + 1126359, + 4830374 ], [ - 2081528, - 5945172 + 1126368, + 4830367 ], [ - 2081538, - 5945164 + 1126378, + 4830359 ], [ - 2081548, - 5945158 + 1126388, + 4830351 ], [ - 2081559, - 5945151 + 1126398, + 4830342 ], [ - 2081569, - 5945143 + 1126408, + 4830334 ], [ - 2081580, - 5945138 + 1126418, + 4830326 ], [ - 2081590, - 5945130 + 1126427, + 4830319 ], [ - 2081600, - 5945123 + 1126436, + 4830311 ], [ - 2081611, - 5945117 + 1126445, + 4830304 ], [ - 2081622, - 5945110 + 1126455, + 4830296 ], [ - 2081631, - 5945103 + 1126464, + 4830289 ], [ - 2081642, - 5945099 + 1126474, + 4830281 ], [ - 2081653, - 5945091 + 1126483, + 4830273 ], [ - 2081663, - 5945084 + 1126493, + 4830265 ], [ - 2081674, - 5945077 + 1126503, + 4830258 ], [ - 2081684, - 5945070 + 1126513, + 4830250 ], [ - 2081695, - 5945064 + 1126523, + 4830243 ], [ - 2081706, - 5945057 + 1126534, + 4830235 ], [ - 2081716, - 5945050 + 1126544, + 4830227 ], [ - 2081727, - 5945042 + 1126554, + 4830220 ], [ - 2081738, - 5945036 + 1126564, + 4830213 ], [ - 2081748, - 5945028 + 1126575, + 4830205 ], [ - 2081758, - 5945022 + 1126585, + 4830198 ], [ - 2081768, - 5945016 + 1126595, + 4830190 ], [ - 2081779, - 5945009 + 1126605, + 4830183 ], [ - 2081789, - 5945001 + 1126615, + 4830175 ], [ - 2081799, - 5944995 + 1126625, + 4830168 ], [ - 2081810, - 5944989 + 1126635, + 4830160 ], [ - 2081821, - 5944981 + 1126644, + 4830152 ], [ - 2081832, - 5944974 + 1126655, + 4830144 ], [ - 2081842, - 5944966 + 1126665, + 4830137 ], [ - 2081853, - 5944960 + 1126675, + 4830129 ], [ - 2081864, - 5944951 + 1126685, + 4830122 ], [ - 2081875, - 5944944 + 1126695, + 4830113 ], [ - 2081884, - 5944937 + 1126705, + 4830105 ], [ - 2081895, - 5944930 + 1126715, + 4830097 ], [ - 2081906, - 5944922 + 1126725, + 4830089 ], [ - 2081916, - 5944915 + 1126735, + 4830081 ], [ - 2081926, - 5944908 + 1126745, + 4830074 ], [ - 2081936, - 5944901 + 1126755, + 4830066 ], [ - 2081947, - 5944894 + 1126765, + 4830058 ], [ - 2081957, - 5944888 + 1126775, + 4830050 ], [ - 2081966, - 5944881 + 1126785, + 4830043 ], [ - 2081976, - 5944873 + 1126795, + 4830034 ], [ - 2081986, - 5944868 + 1126804, + 4830026 ], [ - 2081997, - 5944860 + 1126814, + 4830018 ], [ - 2082006, - 5944853 + 1126823, + 4830010 ], [ - 2082017, - 5944847 + 1126832, + 4830002 ], [ - 2082027, - 5944840 + 1126841, + 4829994 ], [ - 2082038, - 5944833 + 1126851, + 4829986 ], [ - 2082049, - 5944827 + 1126860, + 4829978 ], [ - 2082059, - 5944820 + 1126870, + 4829970 ], [ - 2082070, - 5944812 + 1126880, + 4829962 ], [ - 2082081, - 5944806 + 1126889, + 4829954 ], [ - 2082091, - 5944799 + 1126898, + 4829947 ], [ - 2082102, - 5944792 + 1126908, + 4829939 ], [ - 2082113, - 5944785 + 1126917, + 4829931 ], [ - 2082124, - 5944778 + 1126927, + 4829923 ], [ - 2082133, - 5944771 + 1126936, + 4829915 ], [ - 2082144, - 5944764 + 1126946, + 4829907 ], [ - 2082155, - 5944756 + 1126956, + 4829900 ], [ - 2082165, - 5944750 + 1126966, + 4829892 ], [ - 2082176, - 5944742 + 1126976, + 4829885 ], [ - 2082186, - 5944736 + 1126986, + 4829877 ], [ - 2082197, - 5944729 + 1126996, + 4829869 ], [ - 2082206, - 5944720 + 1127006, + 4829861 ], [ - 2082217, - 5944714 + 1127015, + 4829854 ], [ - 2082228, - 5944706 + 1127026, + 4829846 ], [ - 2082238, - 5944700 + 1127036, + 4829839 ], [ - 2082248, - 5944692 + 1127046, + 4829831 ], [ - 2082258, - 5944685 + 1127056, + 4829824 ], [ - 2082268, - 5944677 + 1127066, + 4829816 ], [ - 2082279, - 5944670 + 1127076, + 4829808 ], [ - 2082288, - 5944663 + 1127086, + 4829800 ], [ - 2082299, - 5944656 + 1127096, + 4829792 ], [ - 2082309, - 5944649 + 1127106, + 4829784 ], [ - 2082320, - 5944641 + 1127117, + 4829777 ], [ - 2082329, - 5944635 + 1127127, + 4829769 ], [ - 2082339, - 5944627 + 1127137, + 4829761 ], [ - 2082350, - 5944620 + 1127147, + 4829753 ], [ - 2082361, - 5944613 + 1127156, + 4829746 ], [ - 2082370, - 5944606 + 1127166, + 4829738 ], [ - 2082381, - 5944598 + 1127175, + 4829730 ], [ - 2082392, - 5944593 + 1127185, + 4829721 ], [ - 2082402, - 5944586 + 1127194, + 4829713 ], [ - 2082411, - 5944578 + 1127204, + 4829705 ], [ - 2082423, - 5944572 + 1127213, + 4829697 ], [ - 2082433, - 5944564 + 1127222, + 4829689 ], [ - 2082444, - 5944557 + 1127231, + 4829681 ], [ - 2082453, - 5944551 + 1127241, + 4829673 ], [ - 2082464, - 5944544 + 1127250, + 4829665 ], [ - 2082474, - 5944536 + 1127260, + 4829657 ], [ - 2082485, - 5944531 + 1127269, + 4829649 ], [ - 2082495, - 5944523 + 1127279, + 4829641 ], [ - 2082505, - 5944516 + 1127289, + 4829633 ], [ - 2082516, - 5944511 + 1127299, + 4829625 ], [ - 2082527, - 5944503 + 1127309, + 4829618 ], [ - 2082536, - 5944496 + 1127319, + 4829609 ], [ - 2082548, - 5944490 + 1127328, + 4829601 ], [ - 2082558, - 5944483 + 1127339, + 4829593 ], [ - 2082569, - 5944475 + 1127348, + 4829586 ], [ - 2082578, - 5944470 + 1127358, + 4829578 ], [ - 2082589, - 5944462 + 1127367, + 4829570 ], [ - 2082599, - 5944455 + 1127377, + 4829562 ], [ - 2082610, - 5944449 + 1127386, + 4829555 ], [ - 2082619, - 5944442 + 1127396, + 4829547 ], [ - 2082630, - 5944435 + 1127406, + 4829539 ], [ - 2082642, - 5944428 + 1127416, + 4829531 ], [ - 2082652, - 5944421 + 1127426, + 4829524 ], [ - 2082662, - 5944413 + 1127436, + 4829517 ], [ - 2082674, - 5944406 + 1127446, + 4829510 ], [ - 2082684, - 5944398 + 1127456, + 4829502 ], [ - 2082694, - 5944391 + 1127466, + 4829494 ], [ - 2082705, - 5944384 + 1127475, + 4829486 ], [ - 2082715, - 5944377 + 1127484, + 4829478 ], [ - 2082726, - 5944369 + 1127494, + 4829470 ], [ - 2082737, - 5944364 + 1127503, + 4829462 ], [ - 2082746, - 5944356 + 1127514, + 4829454 ], [ - 2082757, - 5944349 + 1127524, + 4829446 ], [ - 2082767, - 5944342 + 1127534, + 4829439 ], [ - 2082777, - 5944335 + 1127544, + 4829432 ], [ - 2082787, - 5944328 + 1127554, + 4829424 ], [ - 2082798, - 5944321 + 1127563, + 4829417 ], [ - 2082809, - 5944314 + 1127574, + 4829409 ], [ - 2082818, - 5944306 + 1127583, + 4829401 ], [ - 2082829, - 5944300 + 1127594, + 4829393 ], [ - 2082840, - 5944292 + 1127604, + 4829387 ], [ - 2082850, - 5944285 + 1127614, + 4829379 ], [ - 2082860, - 5944279 + 1127624, + 4829372 ], [ - 2082870, - 5944272 + 1127634, + 4829364 ], [ - 2082881, - 5944264 + 1127644, + 4829357 ], [ - 2082891, - 5944259 + 1127654, + 4829349 ], [ - 2082901, - 5944252 + 1127664, + 4829342 ], [ - 2082911, - 5944244 + 1127674, + 4829334 ], [ - 2082923, - 5944239 + 1127684, + 4829326 ], [ - 2082933, - 5944231 + 1127694, + 4829318 ], [ - 2082943, - 5944224 + 1127703, + 4829311 ], [ - 2082954, - 5944218 + 1127713, + 4829303 ], [ - 2082964, - 5944211 + 1127723, + 4829295 ], [ - 2082975, - 5944203 + 1127733, + 4829287 ], [ - 2082985, - 5944197 + 1127742, + 4829280 ], [ - 2082995, - 5944189 + 1127752, + 4829272 ], [ - 2083006, - 5944182 + 1127762, + 4829264 ], [ - 2083017, - 5944177 + 1127772, + 4829256 ], [ - 2083027, - 5944169 + 1127781, + 4829248 ], [ - 2083037, - 5944162 + 1127791, + 4829240 ], [ - 2083048, - 5944155 + 1127802, + 4829233 ], [ - 2083059, - 5944148 + 1127812, + 4829225 ], [ - 2083069, - 5944140 + 1127821, + 4829217 ], [ - 2083080, - 5944134 + 1127831, + 4829209 ], [ - 2083090, - 5944127 + 1127841, + 4829202 ], [ - 2083101, - 5944120 + 1127851, + 4829194 ], [ - 2083111, - 5944113 + 1127861, + 4829186 ], [ - 2083121, - 5944106 + 1127871, + 4829178 ], [ - 2083132, - 5944098 + 1127880, + 4829170 ], [ - 2083143, - 5944092 + 1127889, + 4829162 ], [ - 2083152, - 5944085 + 1127898, + 4829154 ], [ - 2083163, - 5944077 + 1127908, + 4829146 ], [ - 2083173, - 5944071 + 1127918, + 4829139 ], [ - 2083183, - 5944063 + 1127928, + 4829131 ], [ - 2083193, - 5944056 + 1127938, + 4829123 ], [ - 2083203, - 5944050 + 1127948, + 4829115 ], [ - 2083214, - 5944043 + 1127957, + 4829107 ], [ - 2083224, - 5944035 + 1127967, + 4829099 ], [ - 2083234, - 5944030 + 1127976, + 4829091 ], [ - 2083244, - 5944023 + 1127986, + 4829083 ], [ - 2083255, - 5944015 + 1127996, + 4829075 ], [ - 2083266, - 5944011 + 1128006, + 4829067 ], [ - 2083275, - 5944003 + 1128015, + 4829059 ], [ - 2083286, - 5943996 + 1128025, + 4829051 ], [ - 2083298, - 5943990 + 1128036, + 4829043 ], [ - 2083309, - 5943983 + 1128046, + 4829035 ], [ - 2083318, - 5943975 + 1128055, + 4829027 ], [ - 2083331, - 5943969 + 1128065, + 4829019 ], [ - 2083341, - 5943961 + 1128075, + 4829011 ], [ - 2083352, - 5943954 + 1128085, + 4829003 ], [ - 2083362, - 5943947 + 1128094, + 4828996 ], [ - 2083373, - 5943940 + 1128104, + 4828988 ], [ - 2083383, - 5943932 + 1128113, + 4828981 ], [ - 2083394, - 5943926 + 1128123, + 4828972 ], [ - 2083404, - 5943919 + 1128132, + 4828964 ], [ - 2083414, - 5943911 + 1128142, + 4828956 ], [ - 2083424, - 5943906 + 1128151, + 4828949 ], [ - 2083434, - 5943898 + 1128161, + 4828941 ], [ - 2083444, - 5943891 + 1128170, + 4828933 ], [ - 2083455, - 5943885 + 1128180, + 4828925 ], [ - 2083465, - 5943878 + 1128189, + 4828917 ], [ - 2083476, - 5943870 + 1128199, + 4828909 ], [ - 2083486, - 5943865 + 1128208, + 4828902 ], [ - 2083497, - 5943857 + 1128218, + 4828894 ], [ - 2083507, - 5943850 + 1128228, + 4828886 ], [ - 2083520, - 5943843 + 1128238, + 4828878 ], [ - 2083529, - 5943836 + 1128247, + 4828870 ], [ - 2083540, - 5943829 + 1128257, + 4828862 ], [ - 2083551, - 5943822 + 1128268, + 4828855 ], [ - 2083561, - 5943815 + 1128278, + 4828847 ], [ - 2083570, - 5943807 + 1128288, + 4828840 ], [ - 2083581, - 5943801 + 1128298, + 4828832 ], [ - 2083592, - 5943793 + 1128308, + 4828824 ], [ - 2083602, - 5943786 + 1128318, + 4828816 ], [ - 2083612, - 5943779 + 1128327, + 4828809 ], [ - 2083622, - 5943772 + 1128337, + 4828801 ], [ - 2083633, - 5943764 + 1128347, + 4828794 ], [ - 2083643, - 5943759 + 1128357, + 4828786 ], [ - 2083652, - 5943751 + 1128367, + 4828778 ], [ - 2083663, - 5943743 + 1128377, + 4828770 ], [ - 2083673, - 5943738 + 1128386, + 4828762 ], [ - 2083684, - 5943730 + 1128396, + 4828754 ], [ - 2083693, - 5943723 + 1128406, + 4828746 ], [ - 2083704, - 5943716 + 1128416, + 4828738 ], [ - 2083714, - 5943709 + 1128425, + 4828730 ], [ - 2083725, - 5943701 + 1128435, + 4828722 ], [ - 2083735, - 5943695 + 1128445, + 4828715 ], [ - 2083746, - 5943688 + 1128455, + 4828707 ], [ - 2083756, - 5943680 + 1128464, + 4828700 ], [ - 2083768, - 5943675 + 1128474, + 4828692 ], [ - 2083777, - 5943667 + 1128484, + 4828684 ], [ - 2083788, - 5943660 + 1128495, + 4828677 ], [ - 2083798, - 5943653 + 1128504, + 4828670 ], [ - 2083809, - 5943646 + 1128514, + 4828662 ], [ - 2083818, - 5943638 + 1128524, + 4828654 ], [ - 2083829, - 5943633 + 1128534, + 4828645 ], [ - 2083839, - 5943625 + 1128544, + 4828637 ], [ - 2083849, - 5943618 + 1128554, + 4828629 ], [ - 2083860, - 5943612 + 1128563, + 4828622 ], [ - 2083871, - 5943605 + 1128574, + 4828614 ], [ - 2083881, - 5943598 + 1128584, + 4828607 ], [ - 2083894, - 5943592 + 1128594, + 4828599 ], [ - 2083903, - 5943584 + 1128603, + 4828591 ], [ - 2083913, - 5943576 + 1128613, + 4828583 ], [ - 2083925, - 5943571 + 1128622, + 4828575 ], [ - 2083935, - 5943563 + 1128632, + 4828567 ], [ - 2083945, - 5943556 + 1128641, + 4828559 ], [ - 2083956, - 5943549 + 1128651, + 4828551 ], [ - 2083967, - 5943542 + 1128660, + 4828543 ], [ - 2083976, - 5943534 + 1128670, + 4828535 ], [ - 2083987, - 5943528 + 1128680, + 4828527 ], [ - 2083997, - 5943520 + 1128690, + 4828519 ], [ - 2084008, - 5943513 + 1128699, + 4828511 ], [ - 2084018, - 5943507 + 1128708, + 4828503 ], [ - 2084028, - 5943499 + 1128717, + 4828495 ], [ - 2084039, - 5943492 + 1128728, + 4828487 ], [ - 2084050, - 5943486 + 1128738, + 4828479 ], [ - 2084059, - 5943478 + 1128748, + 4828471 ], [ - 2084069, - 5943470 + 1128757, + 4828463 ], [ - 2084080, - 5943465 + 1128767, + 4828455 ], [ - 2084090, - 5943457 + 1128776, + 4828448 ], [ - 2084100, - 5943449 + 1128786, + 4828440 ], [ - 2084110, - 5943445 + 1128796, + 4828433 ], [ - 2084120, - 5943437 + 1128806, + 4828425 ], [ - 2084130, - 5943429 + 1128815, + 4828417 ], [ - 2084140, - 5943424 + 1128825, + 4828409 ], [ - 2084151, - 5943416 + 1128835, + 4828402 ], [ - 2084161, - 5943408 + 1128846, + 4828394 ], [ - 2084172, - 5943403 + 1128856, + 4828387 ], [ - 2084182, - 5943395 + 1128866, + 4828379 ], [ - 2084192, - 5943387 + 1128876, + 4828371 ], [ - 2084204, - 5943381 + 1128886, + 4828363 ], [ - 2084215, - 5943374 + 1128895, + 4828356 ], [ - 2084224, - 5943366 + 1128905, + 4828348 ], [ - 2084236, - 5943361 + 1128915, + 4828341 ], [ - 2084247, - 5943354 + 1128925, + 4828333 ], [ - 2084257, - 5943346 + 1128935, + 4828325 ], [ - 2084267, - 5943341 + 1128945, + 4828317 ], [ - 2084277, - 5943333 + 1128954, + 4828310 ], [ - 2084288, - 5943326 + 1128965, + 4828302 ], [ - 2084298, - 5943320 + 1128975, + 4828295 ], [ - 2084308, - 5943313 + 1128985, + 4828287 ], [ - 2084318, - 5943305 + 1128994, + 4828279 ], [ - 2084329, - 5943300 + 1129004, + 4828271 ], [ - 2084339, - 5943292 + 1129013, + 4828264 ], [ - 2084349, - 5943285 + 1129023, + 4828256 ], [ - 2084361, - 5943279 + 1129032, + 4828248 ], [ - 2084372, - 5943271 + 1129042, + 4828240 ], [ - 2084382, - 5943264 + 1129052, + 4828233 ], [ - 2084393, - 5943258 + 1129062, + 4828225 ], [ - 2084404, - 5943250 + 1129072, + 4828218 ], [ - 2084414, - 5943242 + 1129082, + 4828210 ], [ - 2084426, - 5943237 + 1129091, + 4828203 ], [ - 2084435, - 5943229 + 1129101, + 4828195 ], [ - 2084445, - 5943221 + 1129111, + 4828188 ], [ - 2084457, - 5943215 + 1129122, + 4828180 ], [ - 2084467, - 5943208 + 1129132, + 4828173 ], [ - 2084476, - 5943199 + 1129142, + 4828165 ], [ - 2084488, - 5943195 + 1129152, + 4828157 ], [ - 2084499, - 5943186 + 1129162, + 4828150 ], [ - 2084509, - 5943179 + 1129172, + 4828143 ], [ - 2084519, - 5943174 + 1129182, + 4828135 ], [ - 2084529, - 5943166 + 1129193, + 4828128 ], [ - 2084540, - 5943158 + 1129204, + 4828120 ], [ - 2084550, - 5943152 + 1129214, + 4828112 ], [ - 2084559, - 5943145 + 1129224, + 4828104 ], [ - 2084569, - 5943137 + 1129233, + 4828097 ], [ - 2084580, - 5943132 + 1129243, + 4828089 ], [ - 2084591, - 5943123 + 1129252, + 4828081 ], [ - 2084600, - 5943116 + 1129262, + 4828073 ], [ - 2084611, - 5943111 + 1129272, + 4828066 ], [ - 2084622, - 5943103 + 1129282, + 4828058 ], [ - 2084632, - 5943095 + 1129292, + 4828051 ], [ - 2084642, - 5943089 + 1129302, + 4828043 ], [ - 2084653, - 5943082 + 1129311, + 4828036 ], [ - 2084663, - 5943074 + 1129321, + 4828028 ], [ - 2084674, - 5943068 + 1129330, + 4828020 ], [ - 2084683, - 5943060 + 1129340, + 4828012 ], [ - 2084693, - 5943052 + 1129350, + 4828005 ], [ - 2084704, - 5943045 + 1129360, + 4827997 ], [ - 2084713, - 5943038 + 1129370, + 4827990 ], [ - 2084724, - 5943030 + 1129381, + 4827982 ], [ - 2084735, - 5943023 + 1129391, + 4827975 ], [ - 2084745, - 5943016 + 1129401, + 4827967 ], [ - 2084754, - 5943008 + 1129410, + 4827959 ], [ - 2084765, - 5943002 + 1129420, + 4827951 ], [ - 2084776, - 5942994 + 1129431, + 4827943 ], [ - 2084786, - 5942986 + 1129442, + 4827935 ], [ - 2084795, - 5942979 + 1129452, + 4827928 ], [ - 2084805, - 5942972 + 1129463, + 4827920 ], [ - 2084815, - 5942965 + 1129473, + 4827913 ], [ - 2084826, - 5942958 + 1129483, + 4827905 ], [ - 2084835, - 5942951 + 1129493, + 4827897 ], [ - 2084845, - 5942943 + 1129502, + 4827889 ], [ - 2084856, - 5942937 + 1129511, + 4827882 ], [ - 2084865, - 5942928 + 1129520, + 4827873 ], [ - 2084875, - 5942921 + 1129529, + 4827865 ], [ - 2084888, - 5942914 + 1129539, + 4827856 ], [ - 2084898, - 5942906 + 1129548, + 4827848 ], [ - 2084907, - 5942898 + 1129557, + 4827840 ], [ - 2084918, - 5942891 + 1129566, + 4827833 ], [ - 2084928, - 5942884 + 1129576, + 4827825 ], [ - 2084938, - 5942876 + 1129586, + 4827817 ], [ - 2084948, - 5942870 + 1129596, + 4827809 ], [ - 2084959, - 5942862 + 1129606, + 4827802 ], [ - 2084969, - 5942854 + 1129616, + 4827794 ], [ - 2084978, - 5942847 + 1129626, + 4827787 ], [ - 2084988, - 5942840 + 1129636, + 4827779 ], [ - 2084998, - 5942832 + 1129646, + 4827771 ], [ - 2085009, - 5942826 + 1129657, + 4827763 ], [ - 2085018, - 5942818 + 1129667, + 4827756 ], [ - 2085028, - 5942810 + 1129677, + 4827748 ], [ - 2085039, - 5942805 + 1129686, + 4827740 ], [ - 2085049, - 5942796 + 1129695, + 4827731 ], [ - 2085058, - 5942789 + 1129704, + 4827723 ], [ - 2085069, - 5942782 + 1129714, + 4827715 ], [ - 2085080, - 5942775 + 1129724, + 4827708 ], [ - 2085090, - 5942766 + 1129734, + 4827700 ], [ - 2085100, - 5942761 + 1129743, + 4827692 ], [ - 2085111, - 5942753 + 1129753, + 4827684 ], [ - 2085121, - 5942745 + 1129762, + 4827676 ], [ - 2085132, - 5942740 + 1129772, + 4827668 ], [ - 2085141, - 5942732 + 1129782, + 4827660 ], [ - 2085151, - 5942724 + 1129792, + 4827652 ], [ - 2085163, - 5942719 + 1129802, + 4827644 ], [ - 2085173, - 5942711 + 1129812, + 4827636 ], [ - 2085182, - 5942703 + 1129822, + 4827628 ], [ - 2085193, - 5942699 + 1129831, + 4827620 ], [ - 2085204, - 5942690 + 1129840, + 4827612 ], [ - 2085214, - 5942683 + 1129849, + 4827604 ], [ - 2085224, - 5942678 + 1129858, + 4827596 ], [ - 2085235, - 5942670 + 1129868, + 4827588 ], [ - 2085245, - 5942663 + 1129878, + 4827580 ], [ - 2085257, - 5942656 + 1129889, + 4827572 ], [ - 2085267, - 5942649 + 1129899, + 4827564 ], [ - 2085277, - 5942641 + 1129909, + 4827556 ], [ - 2085289, - 5942635 + 1129918, + 4827549 ], [ - 2085298, - 5942627 + 1129928, + 4827541 ], [ - 2085309, - 5942620 + 1129937, + 4827533 ], [ - 2085320, - 5942613 + 1129947, + 4827526 ], [ - 2085330, - 5942606 + 1129957, + 4827519 ], [ - 2085339, - 5942598 + 1129967, + 4827510 ], [ - 2085350, - 5942592 + 1129976, + 4827502 ], [ - 2085360, - 5942584 + 1129986, + 4827494 ], [ - 2085371, - 5942576 + 1129995, + 4827486 ], [ - 2085380, - 5942570 + 1130005, + 4827478 ], [ - 2085391, - 5942562 + 1130015, + 4827470 ], [ - 2085401, - 5942555 + 1130025, + 4827462 ], [ - 2085411, - 5942548 + 1130034, + 4827455 ], [ - 2085421, - 5942540 + 1130044, + 4827447 ], [ - 2085431, - 5942532 + 1130053, + 4827439 ], [ - 2085442, - 5942527 + 1130063, + 4827431 ], [ - 2085452, - 5942520 + 1130072, + 4827423 ], [ - 2085462, - 5942511 + 1130082, + 4827415 ], [ - 2085473, - 5942506 + 1130092, + 4827408 ], [ - 2085483, - 5942498 + 1130102, + 4827400 ], [ - 2085493, - 5942491 + 1130112, + 4827393 ], [ - 2085503, - 5942484 + 1130123, + 4827385 ], [ - 2085513, - 5942477 + 1130133, + 4827378 ], [ - 2085524, - 5942469 + 1130143, + 4827370 ], [ - 2085535, - 5942463 + 1130152, + 4827362 ], [ - 2085544, - 5942455 + 1130162, + 4827354 ], [ - 2085554, - 5942448 + 1130172, + 4827347 ], [ - 2085565, - 5942442 + 1130182, + 4827339 ], [ - 2085574, - 5942434 + 1130191, + 4827332 ], [ - 2085585, - 5942427 + 1130201, + 4827324 ], [ - 2085595, - 5942421 + 1130211, + 4827317 ], [ - 2085606, - 5942414 + 1130222, + 4827309 ], [ - 2085615, - 5942406 + 1130232, + 4827302 ], [ - 2085627, - 5942400 + 1130243, + 4827294 ], [ - 2085637, - 5942392 + 1130253, + 4827287 ], [ - 2085647, - 5942385 + 1130263, + 4827279 ], [ - 2085658, - 5942378 + 1130273, + 4827272 ], [ - 2085669, - 5942371 + 1130283, + 4827265 ], [ - 2085679, - 5942363 + 1130293, + 4827258 ], [ - 2085690, - 5942359 + 1130303, + 4827251 ], [ - 2085699, - 5942352 + 1130313, + 4827244 ], [ - 2085710, - 5942344 + 1130323, + 4827236 ], [ - 2085721, - 5942339 + 1130333, + 4827229 ], [ - 2085732, - 5942331 + 1130343, + 4827221 ], [ - 2085741, - 5942324 + 1130352, + 4827213 ], [ - 2085753, - 5942318 + 1130363, + 4827205 ], [ - 2085764, - 5942311 + 1130372, + 4827198 ], [ - 2085774, - 5942304 + 1130382, + 4827190 ], [ - 2085785, - 5942298 + 1130392, + 4827182 ], [ - 2085795, - 5942290 + 1130402, + 4827175 ], [ - 2085806, - 5942283 + 1130412, + 4827168 ], [ - 2085818, - 5942276 + 1130423, + 4827160 ], [ - 2085828, - 5942270 + 1130433, + 4827153 ], [ - 2085838, - 5942263 + 1130443, + 4827145 ], [ - 2085848, - 5942256 + 1130453, + 4827138 ], [ - 2085859, - 5942249 + 1130463, + 4827130 ], [ - 2085869, - 5942242 + 1130473, + 4827123 ], [ - 2085879, - 5942236 + 1130483, + 4827115 ], [ - 2085890, - 5942228 + 1130493, + 4827108 ], [ - 2085901, - 5942221 + 1130503, + 4827100 ], [ - 2085910, - 5942212 + 1130513, + 4827092 ], [ - 2085921, - 5942206 + 1130523, + 4827084 ], [ - 2085931, - 5942198 + 1130533, + 4827077 ], [ - 2085942, - 5942191 + 1130543, + 4827069 ], [ - 2085952, - 5942183 + 1130553, + 4827062 ], [ - 2085962, - 5942176 + 1130563, + 4827053 ], [ - 2085972, - 5942170 + 1130572, + 4827045 ], [ - 2085983, - 5942162 + 1130582, + 4827037 ], [ - 2085992, - 5942155 + 1130592, + 4827030 ], [ - 2086003, - 5942148 + 1130602, + 4827022 ], [ - 2086013, - 5942141 + 1130612, + 4827015 ], [ - 2086024, - 5942133 + 1130622, + 4827007 ], [ - 2086033, - 5942126 + 1130632, + 4826999 ], [ - 2086044, - 5942118 + 1130641, + 4826990 ], [ - 2086054, - 5942111 + 1130650, + 4826982 ], [ - 2086065, - 5942106 + 1130660, + 4826974 ], [ - 2086074, - 5942098 + 1130669, + 4826967 ], [ - 2086085, - 5942091 + 1130680, + 4826959 ], [ - 2086095, - 5942084 + 1130690, + 4826952 ], [ - 2086105, - 5942077 + 1130700, + 4826944 ], [ - 2086115, - 5942069 + 1130710, + 4826937 ], [ - 2086126, - 5942064 + 1130720, + 4826929 ], [ - 2086137, - 5942056 + 1130730, + 4826922 ], [ - 2086147, - 5942049 + 1130740, + 4826914 ], [ - 2086157, - 5942043 + 1130750, + 4826906 ], [ - 2086168, - 5942036 + 1130760, + 4826898 ], [ - 2086178, - 5942029 + 1130770, + 4826891 ], [ - 2086189, - 5942022 + 1130780, + 4826883 ], [ - 2086198, - 5942015 + 1130790, + 4826876 ], [ - 2086209, - 5942008 + 1130800, + 4826868 ], [ - 2086219, - 5942002 + 1130809, + 4826861 ], [ - 2086230, - 5941994 + 1130819, + 4826853 ], [ - 2086239, - 5941988 + 1130830, + 4826845 ], [ - 2086250, - 5941981 + 1130840, + 4826837 ], [ - 2086261, - 5941974 + 1130850, + 4826830 ], [ - 2086271, - 5941966 + 1130860, + 4826822 ], [ - 2086283, - 5941960 + 1130869, + 4826814 ], [ - 2086293, - 5941953 + 1130879, + 4826806 ], [ - 2086304, - 5941945 + 1130888, + 4826799 ], [ - 2086317, - 5941938 + 1130899, + 4826792 ], [ - 2086326, - 5941931 + 1130909, + 4826785 ], [ - 2086337, - 5941924 + 1130919, + 4826777 ], [ - 2086347, - 5941917 + 1130929, + 4826769 ], [ - 2086356, - 5941910 + 1130939, + 4826761 ], [ - 2086367, - 5941902 + 1130948, + 4826754 ], [ - 2086378, - 5941896 + 1130958, + 4826746 ], [ - 2086388, - 5941889 + 1130967, + 4826738 ], [ - 2086398, - 5941882 + 1130978, + 4826730 ], [ - 2086408, - 5941874 + 1130988, + 4826723 ], [ - 2086419, - 5941867 + 1130998, + 4826716 ], [ - 2086430, - 5941861 + 1131008, + 4826709 ], [ - 2086439, - 5941853 + 1131019, + 4826701 ], [ - 2086450, - 5941847 + 1131029, + 4826694 ], [ - 2086460, - 5941839 + 1131040, + 4826687 ], [ - 2086471, - 5941833 + 1131050, + 4826681 ], [ - 2086481, - 5941825 + 1131060, + 4826673 ], [ - 2086491, - 5941818 + 1131071, + 4826665 ], [ - 2086502, - 5941811 + 1131081, + 4826657 ], [ - 2086513, - 5941804 + 1131090, + 4826649 ], [ - 2086522, - 5941797 - ], - [ - 2086532, - 5941790 - ], - [ - 2086543, - 5941783 - ], - [ - 2086553, - 5941776 - ], - [ - 2086562, - 5941770 - ], - [ - 2086573, - 5941762 - ], - [ - 2086583, - 5941755 - ], - [ - 2086593, - 5941749 - ], - [ - 2086603, - 5941742 - ], - [ - 2086613, - 5941734 - ], - [ - 2086625, - 5941729 - ], - [ - 2086636, - 5941721 - ], - [ - 2086645, - 5941714 - ], - [ - 2086657, - 5941709 - ], - [ - 2086667, - 5941701 - ], - [ - 2086678, - 5941694 - ], - [ - 2086688, - 5941688 - ], - [ - 2086699, - 5941681 - ], - [ - 2086710, - 5941674 - ], - [ - 2086721, - 5941669 - ], - [ - 2086731, - 5941661 - ], - [ - 2086741, - 5941654 - ], - [ - 2086754, - 5941647 - ], - [ - 2086764, - 5941641 - ], - [ - 2086774, - 5941633 - ], - [ - 2086785, - 5941627 - ], - [ - 2086795, - 5941620 - ], - [ - 2086806, - 5941613 - ], - [ - 2086816, - 5941607 - ], - [ - 2086827, - 5941600 - ], - [ - 2086837, - 5941593 - ], - [ - 2086848, - 5941586 - ], - [ - 2086857, - 5941579 - ], - [ - 2086868, - 5941571 - ], - [ - 2086878, - 5941565 - ], - [ - 2086889, - 5941557 - ], - [ - 2086898, - 5941551 - ], - [ - 2086909, - 5941543 - ], - [ - 2086919, - 5941536 - ], - [ - 2086930, - 5941530 - ], - [ - 2086940, - 5941522 - ], - [ - 2086951, - 5941515 - ], - [ - 2086961, - 5941507 - ], - [ - 2086972, - 5941501 - ], - [ - 2086982, - 5941494 - ], - [ - 2086992, - 5941487 - ], - [ - 2087003, - 5941479 - ], - [ - 2087013, - 5941472 - ], - [ - 2087023, - 5941464 - ], - [ - 2087033, - 5941458 - ], - [ - 2087043, - 5941451 - ], - [ - 2087054, - 5941443 - ], - [ - 2087062, - 5941436 - ], - [ - 2087073, - 5941428 - ], - [ - 2087083, - 5941421 - ], - [ - 2087095, - 5941414 - ], - [ - 2087104, - 5941407 - ], - [ - 2087115, - 5941399 - ], - [ - 2087126, - 5941393 - ], - [ - 2087135, - 5941385 - ], - [ - 2087146, - 5941378 - ], - [ - 2087157, - 5941373 - ], - [ - 2087168, - 5941365 - ], - [ - 2087177, - 5941358 - ], - [ - 2087188, - 5941351 - ], - [ - 2087199, - 5941344 - ], - [ - 2087209, - 5941336 - ], - [ - 2087219, - 5941331 - ], - [ - 2087229, - 5941323 - ], - [ - 2087240, - 5941316 - ], - [ - 2087251, - 5941310 - ], - [ - 2087260, - 5941303 - ], - [ - 2087271, - 5941296 - ], - [ - 2087282, - 5941289 - ], - [ - 2087292, - 5941283 - ], - [ - 2087302, - 5941275 - ], - [ - 2087314, - 5941270 - ], - [ - 2087324, - 5941262 - ], - [ - 2087335, - 5941255 - ], - [ - 2087346, - 5941248 - ], - [ - 2087356, - 5941241 - ], - [ - 2087366, - 5941233 - ], - [ - 2087376, - 5941228 - ], - [ - 2087386, - 5941220 - ], - [ - 2087396, - 5941213 - ], - [ - 2087408, - 5941207 - ], - [ - 2087418, - 5941200 - ], - [ - 2087428, - 5941193 - ], - [ - 2087439, - 5941186 - ], - [ - 2087450, - 5941179 - ], - [ - 2087461, - 5941171 - ], - [ - 2087471, - 5941165 - ], - [ - 2087481, - 5941157 - ], - [ - 2087492, - 5941150 - ], - [ - 2087503, - 5941143 - ], - [ - 2087512, - 5941136 - ], - [ - 2087523, - 5941128 - ], - [ - 2087533, - 5941122 - ], - [ - 2087544, - 5941115 - ], - [ - 2087554, - 5941107 - ], - [ - 2087564, - 5941101 - ], - [ - 2087574, - 5941093 - ], - [ - 2087585, - 5941086 - ], - [ - 2087594, - 5941079 - ], - [ - 2087605, - 5941072 - ], - [ - 2087615, - 5941065 - ], - [ - 2087626, - 5941058 - ], - [ - 2087635, - 5941051 - ], - [ - 2087646, - 5941043 - ], - [ - 2087657, - 5941038 - ], - [ - 2087667, - 5941030 - ], - [ - 2087677, - 5941023 - ], - [ - 2087687, - 5941017 - ], - [ - 2087697, - 5941010 - ], - [ - 2087708, - 5941002 - ], - [ - 2087718, - 5940997 - ], - [ - 2087728, - 5940989 - ], - [ - 2087739, - 5940982 - ], - [ - 2087750, - 5940977 - ], - [ - 2087759, - 5940970 - ], - [ - 2087770, - 5940963 - ], - [ - 2087782, - 5940956 - ], - [ - 2087793, - 5940949 - ], - [ - 2087802, - 5940942 - ], - [ - 2087815, - 5940935 - ], - [ - 2087825, - 5940927 - ], - [ - 2087836, - 5940920 - ], - [ - 2087846, - 5940913 - ], - [ - 2087857, - 5940906 - ], - [ - 2087867, - 5940899 - ], - [ - 2087878, - 5940892 - ], - [ - 2087888, - 5940885 - ], - [ - 2087898, - 5940878 - ], - [ - 2087908, - 5940872 - ], - [ - 2087919, - 5940864 - ], - [ - 2087928, - 5940857 - ], - [ - 2087937, - 5940850 - ], - [ - 2087948, - 5940843 - ], - [ - 2087958, - 5940835 - ], - [ - 2087968, - 5940830 - ], - [ - 2087978, - 5940822 - ], - [ - 2087989, - 5940815 - ], - [ - 2088000, - 5940809 - ], - [ - 2088010, - 5940802 - ], - [ - 2088020, - 5940795 - ], - [ - 2088033, - 5940789 - ], - [ - 2088044, - 5940782 - ], - [ - 2088053, - 5940774 - ], - [ - 2088065, - 5940768 - ], - [ - 2088076, - 5940761 - ], - [ - 2088087, - 5940754 - ], - [ - 2088097, - 5940747 - ], - [ - 2088107, - 5940740 - ], - [ - 2088118, - 5940733 - ], - [ - 2088128, - 5940726 - ], - [ - 2088138, - 5940719 - ], - [ - 2088148, - 5940712 - ], - [ - 2088159, - 5940705 - ], - [ - 2088170, - 5940698 - ], - [ - 2088179, - 5940691 - ], - [ - 2088190, - 5940683 - ], - [ - 2088200, - 5940676 - ], - [ - 2088210, - 5940668 - ], - [ - 2088220, - 5940661 - ], - [ - 2088231, - 5940653 - ], - [ - 2088241, - 5940646 - ], - [ - 2088251, - 5940639 - ], - [ - 2088261, - 5940632 - ], - [ - 2088272, - 5940625 - ], - [ - 2088282, - 5940620 - ], - [ - 2088291, - 5940613 - ], - [ - 2088302, - 5940605 - ], - [ - 2088313, - 5940600 - ], - [ - 2088323, - 5940593 - ], - [ - 2088334, - 5940586 - ], - [ - 2088345, - 5940579 - ], - [ - 2088355, - 5940572 - ], - [ - 2088366, - 5940564 - ], - [ - 2088376, - 5940557 - ], - [ - 2088386, - 5940550 - ], - [ - 2088397, - 5940543 - ], - [ - 2088407, - 5940537 - ], - [ - 2088417, - 5940529 - ], - [ - 2088427, - 5940522 - ], - [ - 2088437, - 5940515 - ], - [ - 2088448, - 5940508 - ], - [ - 2088457, - 5940500 - ], - [ - 2088468, - 5940493 - ], - [ - 2088478, - 5940485 - ], - [ - 2088489, - 5940478 - ], - [ - 2088499, - 5940471 - ], - [ - 2088510, - 5940463 - ], - [ - 2088520, - 5940456 - ], - [ - 2088532, - 5940449 - ], - [ - 2088541, - 5940443 - ], - [ - 2088552, - 5940435 - ], - [ - 2088563, - 5940430 - ], - [ - 2088573, - 5940422 - ], - [ - 2088582, - 5940415 - ], - [ - 2088593, - 5940408 - ], - [ - 2088603, - 5940401 - ], - [ - 2088614, - 5940393 - ], - [ - 2088623, - 5940387 - ], - [ - 2088634, - 5940380 - ], - [ - 2088644, - 5940372 - ], - [ - 2088655, - 5940366 - ], - [ - 2088665, - 5940358 - ], - [ - 2088675, - 5940351 - ], - [ - 2088687, - 5940344 - ], - [ - 2088696, - 5940337 - ], - [ - 2088707, - 5940329 - ], - [ - 2088718, - 5940324 - ], - [ - 2088728, - 5940316 - ], - [ - 2088738, - 5940309 - ], - [ - 2088748, - 5940303 - ], - [ - 2088758, - 5940296 - ], - [ - 2088769, - 5940289 - ], - [ - 2088779, - 5940283 - ], - [ - 2088788, - 5940276 - ], - [ - 2088799, - 5940268 - ], - [ - 2088811, - 5940264 - ], - [ - 2088821, - 5940256 - ], - [ - 2088831, - 5940249 - ], - [ - 2088843, - 5940243 - ], - [ - 2088853, - 5940236 - ], - [ - 2088864, - 5940229 - ], - [ - 2088875, - 5940222 - ], - [ - 2088886, - 5940215 - ], - [ - 2088896, - 5940207 - ], - [ - 2088907, - 5940200 - ], - [ - 2088917, - 5940192 - ], - [ - 2088927, - 5940185 - ], - [ - 2088938, - 5940177 - ], - [ - 2088947, - 5940171 - ], - [ - 2088958, - 5940163 - ], - [ - 2088968, - 5940156 - ], - [ - 2088979, - 5940148 - ], - [ - 2088988, - 5940141 - ], - [ - 2088998, - 5940135 - ], - [ - 2089009, - 5940127 - ], - [ - 2089019, - 5940120 - ], - [ - 2089028, - 5940112 - ], - [ - 2089039, - 5940105 - ], - [ - 2089049, - 5940097 - ], - [ - 2089059, - 5940091 - ], - [ - 2089068, - 5940083 - ], - [ - 2089079, - 5940076 - ], - [ - 2089089, - 5940069 - ], - [ - 2089098, - 5940061 - ], - [ - 2089109, - 5940054 - ], - [ - 2089120, - 5940047 - ], - [ - 2089131, - 5940040 - ], - [ - 2089140, - 5940032 - ], - [ - 2089151, - 5940026 - ], - [ - 2089161, - 5940018 - ], - [ - 2089172, - 5940011 - ], - [ - 2089181, - 5940003 - ], - [ - 2089192, - 5939996 - ], - [ - 2089202, - 5939989 - ], - [ - 2089213, - 5939982 - ], - [ - 2089222, - 5939974 - ], - [ - 2089233, - 5939966 - ], - [ - 2089244, - 5939960 - ], - [ - 2089253, - 5939952 - ], - [ - 2089264, - 5939945 - ], - [ - 2089274, - 5939939 - ], - [ - 2089285, - 5939932 - ], - [ - 2089294, - 5939924 - ], - [ - 2089305, - 5939919 - ], - [ - 2089315, - 5939912 - ], - [ - 2089326, - 5939904 - ], - [ - 2089337, - 5939899 - ], - [ - 2089347, - 5939891 - ], - [ - 2089357, - 5939884 - ], - [ - 2089369, - 5939877 - ], - [ - 2089379, - 5939870 - ], - [ - 2089389, - 5939862 - ], - [ - 2089400, - 5939856 - ], - [ - 2089410, - 5939848 - ], - [ - 2089420, - 5939841 - ], - [ - 2089430, - 5939836 - ], - [ - 2089441, - 5939828 - ], - [ - 2089452, - 5939821 - ], - [ - 2089461, - 5939814 - ], - [ - 2089472, - 5939807 - ], - [ - 2089483, - 5939800 - ], - [ - 2089494, - 5939794 - ], - [ - 2089503, - 5939786 - ], - [ - 2089514, - 5939779 - ], - [ - 2089524, - 5939772 - ], - [ - 2089535, - 5939766 - ], - [ - 2089544, - 5939759 - ], - [ - 2089554, - 5939752 - ], - [ - 2089565, - 5939745 - ], - [ - 2089575, - 5939738 - ], - [ - 2089588, - 5939733 - ], - [ - 2089597, - 5939725 - ], - [ - 2089608, - 5939718 - ], - [ - 2089619, - 5939710 - ], - [ - 2089630, - 5939704 - ], - [ - 2089639, - 5939696 - ], - [ - 2089651, - 5939691 - ], - [ - 2089661, - 5939683 - ], - [ - 2089672, - 5939676 - ], - [ - 2089681, - 5939670 - ], - [ - 2089692, - 5939663 - ], - [ - 2089702, - 5939656 - ], - [ - 2089714, - 5939650 - ], - [ - 2089723, - 5939643 - ], - [ - 2089734, - 5939635 - ], - [ - 2089745, - 5939628 - ], - [ - 2089754, - 5939620 - ], - [ - 2089765, - 5939613 - ], - [ - 2089775, - 5939605 - ], - [ - 2089786, - 5939598 - ], - [ - 2089796, - 5939591 - ], - [ - 2089805, - 5939586 - ], - [ - 2089816, - 5939579 - ], - [ - 2089827, - 5939571 - ], - [ - 2089838, - 5939567 - ], - [ - 2089847, - 5939559 - ], - [ - 2089858, - 5939552 - ], - [ - 2089871, - 5939546 - ], - [ - 2089881, - 5939539 - ], - [ - 2089891, - 5939531 - ], - [ - 2089902, - 5939525 - ], - [ - 2089912, - 5939517 - ], - [ - 2089923, - 5939510 - ], - [ - 2089933, - 5939504 - ], - [ - 2089943, - 5939497 - ], - [ - 2089954, - 5939491 - ], - [ - 2089965, - 5939483 - ], - [ - 2089974, - 5939476 - ], - [ - 2089985, - 5939468 - ], - [ - 2089996, - 5939461 - ], - [ - 2090005, - 5939454 - ], - [ - 2090016, - 5939447 - ], - [ - 2090025, - 5939438 - ], - [ - 2090036, - 5939431 - ], - [ - 2090046, - 5939423 - ], - [ - 2090055, - 5939417 - ], - [ - 2090066, - 5939410 - ], - [ - 2090077, - 5939402 - ], - [ - 2090086, - 5939396 - ], - [ - 2090097, - 5939388 - ], - [ - 2090108, - 5939381 - ], - [ - 2090119, - 5939375 - ], - [ - 2090129, - 5939368 - ], - [ - 2090139, - 5939360 - ], - [ - 2090150, - 5939353 - ], - [ - 2090160, - 5939345 - ], - [ - 2090170, - 5939338 - ], - [ - 2090180, - 5939332 - ], - [ - 2090190, - 5939324 - ], - [ - 2090200, - 5939317 - ], - [ - 2090210, - 5939310 - ], - [ - 2090221, - 5939303 - ], - [ - 2090231, - 5939296 - ], - [ - 2090242, - 5939290 - ], - [ - 2090252, - 5939282 - ], - [ - 2090262, - 5939275 - ], - [ - 2090273, - 5939269 - ], - [ - 2090283, - 5939262 - ], - [ - 2090293, - 5939255 - ], - [ - 2090304, - 5939248 - ], - [ - 2090314, - 5939241 - ], - [ - 2090324, - 5939233 - ], - [ - 2090335, - 5939228 - ], - [ - 2090345, - 5939220 - ], - [ - 2090356, - 5939213 - ], - [ - 2090367, - 5939207 - ], - [ - 2090376, - 5939200 - ], - [ - 2090387, - 5939193 - ], - [ - 2090399, - 5939187 - ], - [ - 2090410, - 5939180 - ], - [ - 2090419, - 5939173 - ], - [ - 2090431, - 5939168 - ], - [ - 2090442, - 5939160 - ], - [ - 2090452, - 5939153 - ], - [ - 2090462, - 5939147 - ], - [ - 2090473, - 5939140 - ], - [ - 2090483, - 5939132 - ], - [ - 2090494, - 5939126 - ], - [ - 2090504, - 5939118 - ], - [ - 2090515, - 5939111 - ], - [ - 2090526, - 5939104 - ], - [ - 2090536, - 5939097 - ], - [ - 2090546, - 5939089 - ], - [ - 2090556, - 5939082 - ], - [ - 2090567, - 5939075 - ], - [ - 2090576, - 5939067 - ], - [ - 2090587, - 5939060 - ], - [ - 2090597, - 5939052 - ], - [ - 2090608, - 5939045 - ], - [ - 2090617, - 5939036 - ], - [ - 2090627, - 5939029 - ], - [ - 2090638, - 5939021 - ], - [ - 2090647, - 5939015 - ], - [ - 2090657, - 5939008 - ], - [ - 2090667, - 5939000 - ], - [ - 2090678, - 5938994 - ], - [ - 2090687, - 5938986 - ], - [ - 2090697, - 5938978 - ], - [ - 2090708, - 5938971 - ], - [ - 2090719, - 5938964 - ], - [ - 2090728, - 5938956 - ], - [ - 2090739, - 5938950 - ], - [ - 2090749, - 5938942 - ], - [ - 2090760, - 5938935 - ], - [ - 2090769, - 5938929 - ], - [ - 2090779, - 5938921 - ], - [ - 2090789, - 5938914 - ], - [ - 2090800, - 5938907 - ], - [ - 2090809, - 5938900 - ], - [ - 2090820, - 5938892 - ], - [ - 2090831, - 5938886 - ], - [ - 2090841, - 5938878 - ], - [ - 2090851, - 5938871 - ], - [ - 2090862, - 5938866 - ], - [ - 2090873, - 5938858 - ], - [ - 2090883, - 5938851 - ], - [ - 2090893, - 5938844 - ], - [ - 2090904, - 5938838 - ], - [ - 2090915, - 5938830 - ], - [ - 2090926, - 5938825 - ], - [ - 2090936, - 5938817 - ], - [ - 2090946, - 5938810 - ], - [ - 2090957, - 5938803 - ], - [ - 2090967, - 5938796 - ], - [ - 2090977, - 5938788 - ], - [ - 2090987, - 5938782 - ], - [ - 2090998, - 5938775 - ], - [ - 2091008, - 5938767 - ], - [ - 2091018, - 5938761 - ], - [ - 2091029, - 5938753 - ], - [ - 2091039, - 5938746 - ], - [ - 2091051, - 5938739 - ], - [ - 2091060, - 5938732 - ], - [ - 2091071, - 5938725 - ], - [ - 2091082, - 5938718 - ], - [ - 2091091, - 5938710 - ], - [ - 2091102, - 5938703 - ], - [ - 2091112, - 5938698 - ], - [ - 2091123, - 5938690 - ], - [ - 2091132, - 5938683 - ], - [ - 2091142, - 5938677 - ], - [ - 2091153, - 5938670 - ], - [ - 2091163, - 5938662 - ], - [ - 2091174, - 5938655 - ], - [ - 2091184, - 5938648 - ], - [ - 2091195, - 5938641 - ], - [ - 2091206, - 5938633 - ], - [ - 2091216, - 5938627 - ], - [ - 2091226, - 5938619 - ], - [ - 2091238, - 5938613 - ], - [ - 2091248, - 5938606 - ], - [ - 2091258, - 5938598 - ], - [ - 2091269, - 5938593 - ], - [ - 2091279, - 5938585 - ], - [ - 2091290, - 5938578 - ], - [ - 2091299, - 5938571 - ], - [ - 2091310, - 5938564 - ], - [ - 2091321, - 5938557 - ], - [ - 2091331, - 5938551 - ], - [ - 2091340, - 5938543 - ], - [ - 2091351, - 5938536 - ], - [ - 2091362, - 5938530 - ], - [ - 2091373, - 5938522 - ], - [ - 2091382, - 5938515 - ], - [ - 2091393, - 5938508 - ], - [ - 2091403, - 5938501 - ], - [ - 2091414, - 5938494 - ], - [ - 2091423, - 5938487 - ], - [ - 2091434, - 5938479 - ], - [ - 2091444, - 5938473 - ], - [ - 2091455, - 5938466 - ], - [ - 2091465, - 5938459 - ], - [ - 2091475, - 5938452 - ], - [ - 2091486, - 5938445 - ], - [ - 2091497, - 5938439 - ], - [ - 2091506, - 5938431 - ], - [ - 2091517, - 5938425 - ], - [ - 2091528, - 5938417 - ], - [ - 2091538, - 5938410 - ], - [ - 2091548, - 5938404 - ], - [ - 2091559, - 5938397 - ], - [ - 2091570, - 5938390 - ], - [ - 2091580, - 5938383 - ], - [ - 2091590, - 5938375 - ], - [ - 2091601, - 5938369 - ], - [ - 2091611, - 5938362 - ], - [ - 2091621, - 5938354 - ], - [ - 2091631, - 5938348 - ], - [ - 2091641, - 5938340 - ], - [ - 2091652, - 5938333 - ], - [ - 2091663, - 5938326 - ], - [ - 2091673, - 5938319 - ], - [ - 2091683, - 5938311 - ], - [ - 2091694, - 5938304 - ], - [ - 2091705, - 5938297 - ], - [ - 2091714, - 5938290 - ], - [ - 2091725, - 5938283 - ], - [ - 2091736, - 5938277 - ], - [ - 2091746, - 5938270 - ], - [ - 2091756, - 5938262 - ], - [ - 2091767, - 5938256 - ], - [ - 2091777, - 5938248 - ], - [ - 2091788, - 5938242 - ], - [ - 2091797, - 5938235 - ], - [ - 2091808, - 5938228 - ], - [ - 2091819, - 5938220 - ], - [ - 2091830, - 5938215 - ], - [ - 2091839, - 5938207 - ], - [ - 2091850, - 5938200 - ], - [ - 2091861, - 5938194 - ], - [ - 2091871, - 5938186 - ], - [ - 2091881, - 5938179 - ], - [ - 2091891, - 5938173 - ], - [ - 2091901, - 5938166 - ], - [ - 2091911, - 5938158 - ], - [ - 2091922, - 5938154 - ], - [ - 2091932, - 5938146 - ], - [ - 2091943, - 5938139 - ], - [ - 2091954, - 5938132 - ], - [ - 2091964, - 5938125 - ], - [ - 2091975, - 5938119 - ], - [ - 2091986, - 5938111 - ], - [ - 2091997, - 5938104 - ], - [ - 2092007, - 5938097 - ], - [ - 2092017, - 5938089 - ], - [ - 2092028, - 5938081 - ], - [ - 2092038, - 5938075 - ], - [ - 2092049, - 5938067 - ], - [ - 2092060, - 5938060 - ], - [ - 2092070, - 5938053 - ], - [ - 2092079, - 5938045 - ], - [ - 2092090, - 5938037 - ], - [ - 2092101, - 5938031 - ], - [ - 2092110, - 5938023 - ], - [ - 2092120, - 5938016 - ], - [ - 2092131, - 5938009 - ], - [ - 2092140, - 5938001 - ], - [ - 2092151, - 5937994 - ], - [ - 2092160, - 5937986 - ], - [ - 2092171, - 5937979 - ], - [ - 2092181, - 5937971 - ], - [ - 2092191, - 5937964 - ], - [ - 2092202, - 5937957 - ], - [ - 2092212, - 5937950 - ], - [ - 2092223, - 5937943 - ], - [ - 2092232, - 5937937 - ], - [ - 2092242, - 5937930 - ], - [ - 2092253, - 5937922 - ], - [ - 2092263, - 5937917 - ], - [ - 2092273, - 5937909 - ], - [ - 2092283, - 5937902 - ], - [ - 2092294, - 5937896 - ], - [ - 2092305, - 5937890 - ], - [ - 2092314, - 5937883 - ], - [ - 2092327, - 5937877 - ], - [ - 2092337, - 5937871 - ], - [ - 2092348, - 5937863 - ], - [ - 2092361, - 5937858 - ], - [ - 2092370, - 5937851 - ], - [ - 2092381, - 5937844 - ], - [ - 2092392, - 5937837 - ], - [ - 2092403, - 5937830 - ], - [ - 2092413, - 5937823 - ], - [ - 2092423, - 5937816 - ], - [ - 2092434, - 5937809 - ], - [ - 2092445, - 5937803 - ], - [ - 2092454, - 5937794 - ], - [ - 2092465, - 5937788 - ], - [ - 2092475, - 5937781 - ], - [ - 2092486, - 5937774 - ], - [ - 2092496, - 5937767 - ], - [ - 2092506, - 5937760 - ], - [ - 2092517, - 5937754 - ], - [ - 2092527, - 5937746 - ], - [ - 2092537, - 5937740 - ], - [ - 2092548, - 5937733 - ], - [ - 2092559, - 5937726 - ], - [ - 2092569, - 5937718 - ], - [ - 2092579, - 5937712 - ], - [ - 2092589, - 5937704 - ], - [ - 2092600, - 5937697 - ], - [ - 2092609, - 5937690 - ], - [ - 2092619, - 5937683 - ], - [ - 2092630, - 5937676 - ], - [ - 2092639, - 5937667 - ], - [ - 2092649, - 5937661 - ], - [ - 2092660, - 5937653 - ], - [ - 2092670, - 5937646 - ], - [ - 2092681, - 5937638 - ], - [ - 2092691, - 5937632 - ], - [ - 2092701, - 5937625 - ], - [ - 2092712, - 5937617 - ], - [ - 2092723, - 5937611 - ], - [ - 2092732, - 5937603 - ], - [ - 2092743, - 5937596 - ], - [ - 2092754, - 5937589 - ], - [ - 2092763, - 5937581 - ], - [ - 2092773, - 5937573 - ], - [ - 2092784, - 5937567 - ], - [ - 2092793, - 5937559 - ], - [ - 2092804, - 5937553 - ], - [ - 2092813, - 5937546 - ], - [ - 2092823, - 5937538 - ], - [ - 2092833, - 5937531 - ], - [ - 2092844, - 5937524 - ], - [ - 2092854, - 5937518 - ], - [ - 2092865, - 5937510 - ], - [ - 2092875, - 5937503 - ], - [ - 2092886, - 5937497 - ], - [ - 2092896, - 5937490 - ], - [ - 2092906, - 5937483 - ], - [ - 2092918, - 5937477 - ], - [ - 2092929, - 5937471 - ], - [ - 2092938, - 5937463 - ], - [ - 2092950, - 5937457 - ], - [ - 2092961, - 5937449 - ], - [ - 2092972, - 5937443 - ], - [ - 2092983, - 5937434 - ], - [ - 2092993, - 5937428 - ], - [ - 2093004, - 5937420 - ], - [ - 2093015, - 5937414 - ], - [ - 2093024, - 5937406 - ], - [ - 2093035, - 5937400 - ], - [ - 2093045, - 5937393 - ], - [ - 2093056, - 5937386 - ], - [ - 2093066, - 5937379 - ], - [ - 2093076, - 5937372 - ], - [ - 2093086, - 5937366 - ], - [ - 2093097, - 5937358 - ], - [ - 2093107, - 5937352 - ], - [ - 2093117, - 5937344 - ], - [ - 2093128, - 5937338 - ], - [ - 2093137, - 5937329 - ], - [ - 2093148, - 5937323 - ], - [ - 2093158, - 5937315 - ], - [ - 2093168, - 5937308 - ], - [ - 2093178, - 5937302 - ], - [ - 2093189, - 5937294 - ], - [ - 2093199, - 5937287 - ], - [ - 2093209, - 5937280 - ], - [ - 2093219, - 5937273 - ], - [ - 2093230, - 5937265 - ], - [ - 2093241, - 5937259 - ], - [ - 2093251, - 5937251 - ], - [ - 2093261, - 5937245 - ], - [ - 2093272, - 5937237 - ], - [ - 2093282, - 5937230 - ], - [ - 2093292, - 5937224 - ], - [ - 2093302, - 5937217 - ], - [ - 2093313, - 5937210 - ], - [ - 2093323, - 5937204 - ], - [ - 2093334, - 5937197 - ], - [ - 2093343, - 5937189 - ], - [ - 2093353, - 5937184 - ], - [ - 2093363, - 5937177 - ], - [ - 2093374, - 5937170 - ], - [ - 2093385, - 5937163 - ], - [ - 2093396, - 5937156 - ], - [ - 2093407, - 5937148 - ], - [ - 2093420, - 5937141 - ], - [ - 2093430, - 5937133 - ], - [ - 2093440, - 5937127 - ], - [ - 2093452, - 5937119 - ], - [ - 2093463, - 5937112 - ], - [ - 2093472, - 5937106 - ], - [ - 2093483, - 5937099 - ], - [ - 2093494, - 5937093 - ], - [ - 2093505, - 5937085 - ], - [ - 2093514, - 5937078 - ], - [ - 2093525, - 5937071 - ], - [ - 2093535, - 5937064 - ], - [ - 2093545, - 5937057 - ], - [ - 2093554, - 5937051 - ], - [ - 2093565, - 5937043 - ], - [ - 2093575, - 5937036 - ], - [ - 2093585, - 5937030 - ], - [ - 2093595, - 5937022 - ], - [ - 2093605, - 5937015 - ], - [ - 2093616, - 5937008 - ], - [ - 2093627, - 5937001 - ], - [ - 2093636, - 5936994 - ], - [ - 2093646, - 5936987 - ], - [ - 2093657, - 5936979 - ], - [ - 2093667, - 5936973 - ], - [ - 2093676, - 5936966 - ], - [ - 2093687, - 5936958 - ], - [ - 2093698, - 5936951 - ], - [ - 2093708, - 5936944 - ], - [ - 2093718, - 5936937 - ], - [ - 2093729, - 5936929 - ], - [ - 2093740, - 5936922 - ], - [ - 2093749, - 5936915 - ], - [ - 2093759, - 5936907 - ], - [ - 2093770, - 5936899 - ], - [ - 2093781, - 5936893 - ], - [ - 2093789, - 5936886 - ], - [ - 2093800, - 5936878 - ], - [ - 2093811, - 5936872 - ], - [ - 2093821, - 5936863 - ], - [ - 2093831, - 5936856 - ], - [ - 2093841, - 5936849 - ], - [ - 2093852, - 5936841 - ], - [ - 2093862, - 5936834 - ], - [ - 2093872, - 5936827 - ], - [ - 2093882, - 5936820 - ], - [ - 2093893, - 5936813 - ], - [ - 2093903, - 5936806 - ], - [ - 2093913, - 5936800 - ], - [ - 2093924, - 5936794 - ], - [ - 2093935, - 5936786 - ], - [ - 2093946, - 5936781 - ], - [ - 2093956, - 5936774 - ], - [ - 2093967, - 5936767 - ], - [ - 2093978, - 5936760 - ], - [ - 2093989, - 5936754 - ], - [ - 2093998, - 5936746 - ], - [ - 2094009, - 5936741 - ], - [ - 2094020, - 5936733 - ], - [ - 2094030, - 5936727 - ], - [ - 2094041, - 5936720 - ], - [ - 2094051, - 5936713 - ], - [ - 2094062, - 5936707 - ], - [ - 2094074, - 5936699 - ], - [ - 2094083, - 5936693 - ], - [ - 2094094, - 5936686 - ], - [ - 2094104, - 5936678 - ], - [ - 2094115, - 5936671 - ], - [ - 2094125, - 5936665 - ], - [ - 2094134, - 5936657 - ], - [ - 2094145, - 5936650 - ], - [ - 2094156, - 5936643 - ], - [ - 2094165, - 5936636 - ], - [ - 2094175, - 5936629 - ], - [ - 2094186, - 5936622 - ], - [ - 2094196, - 5936615 - ], - [ - 2094206, - 5936608 - ], - [ - 2094217, - 5936601 - ], - [ - 2094229, - 5936594 - ], - [ - 2094239, - 5936587 - ], - [ - 2094249, - 5936580 - ], - [ - 2094260, - 5936573 - ], - [ - 2094271, - 5936566 - ], - [ - 2094281, - 5936559 - ], - [ - 2094291, - 5936551 - ], - [ - 2094302, - 5936545 - ], - [ - 2094312, - 5936538 - ], - [ - 2094323, - 5936531 - ], - [ - 2094333, - 5936525 - ], - [ - 2094343, - 5936517 - ], - [ - 2094354, - 5936511 - ], - [ - 2094365, - 5936503 - ], - [ - 2094375, - 5936497 - ], - [ - 2094385, - 5936489 - ], - [ - 2094396, - 5936483 - ], - [ - 2094406, - 5936475 - ], - [ - 2094415, - 5936468 - ], - [ - 2094426, - 5936461 - ], - [ - 2094437, - 5936454 - ], - [ - 2094447, - 5936447 - ], - [ - 2094457, - 5936440 - ], - [ - 2094468, - 5936433 - ], - [ - 2094479, - 5936427 - ], - [ - 2094490, - 5936420 - ], - [ - 2094499, - 5936413 - ], - [ - 2094510, - 5936407 - ], - [ - 2094521, - 5936399 - ], - [ - 2094531, - 5936393 - ], - [ - 2094542, - 5936385 - ], - [ - 2094552, - 5936379 - ], - [ - 2094563, - 5936372 - ], - [ - 2094574, - 5936364 - ], - [ - 2094584, - 5936358 - ], - [ - 2094595, - 5936350 - ], - [ - 2094605, - 5936344 - ], - [ - 2094616, - 5936336 - ], - [ - 2094625, - 5936330 - ], - [ - 2094635, - 5936322 - ], - [ - 2094646, - 5936316 - ], - [ - 2094657, - 5936308 - ], - [ - 2094665, - 5936301 - ], - [ - 2094676, - 5936295 - ], - [ - 2094687, - 5936287 - ], - [ - 2094695, - 5936281 - ], - [ - 2094705, - 5936273 - ], - [ - 2094716, - 5936267 - ], - [ - 2094727, - 5936260 - ], - [ - 2094738, - 5936253 - ], - [ - 2094748, - 5936246 - ], - [ - 2094759, - 5936239 - ], - [ - 2094769, - 5936231 - ], - [ - 2094780, - 5936225 - ], - [ - 2094791, - 5936218 - ], - [ - 2094802, - 5936211 - ], - [ - 2094813, - 5936204 - ], - [ - 2094823, - 5936197 - ], - [ - 2094833, - 5936191 - ], - [ - 2094843, - 5936183 - ], - [ - 2094854, - 5936178 - ], - [ - 2094864, - 5936170 - ], - [ - 2094874, - 5936164 - ], - [ - 2094885, - 5936155 - ], - [ - 2094896, - 5936149 - ], - [ - 2094905, - 5936141 - ], - [ - 2094916, - 5936134 - ], - [ - 2094927, - 5936126 - ], - [ - 2094938, - 5936120 - ], - [ - 2094948, - 5936113 - ], - [ - 2094958, - 5936105 - ], - [ - 2094969, - 5936099 - ], - [ - 2094980, - 5936091 - ], - [ - 2094990, - 5936085 - ], - [ - 2095000, - 5936077 - ], - [ - 2095011, - 5936072 - ], - [ - 2095022, - 5936064 - ], - [ - 2095031, - 5936058 - ], - [ - 2095041, - 5936050 - ], - [ - 2095052, - 5936043 - ], - [ - 2095063, - 5936037 - ], - [ - 2095072, - 5936030 - ], - [ - 2095082, - 5936023 - ], - [ - 2095093, - 5936016 - ], - [ - 2095103, - 5936009 - ], - [ - 2095113, - 5936001 - ], - [ - 2095124, - 5935995 - ], - [ - 2095134, - 5935987 - ], - [ - 2095145, - 5935980 - ], - [ - 2095155, - 5935973 - ], - [ - 2095165, - 5935965 - ], - [ - 2095176, - 5935958 - ], - [ - 2095187, - 5935950 - ], - [ - 2095196, - 5935943 - ], - [ - 2095206, - 5935935 - ], - [ - 2095217, - 5935928 - ], - [ - 2095227, - 5935922 - ], - [ - 2095236, - 5935915 - ], - [ - 2095247, - 5935907 - ], - [ - 2095257, - 5935901 - ], - [ - 2095267, - 5935893 - ], - [ - 2095277, - 5935886 - ], - [ - 2095289, - 5935881 - ], - [ - 2095299, - 5935874 - ], - [ - 2095310, - 5935867 - ], - [ - 2095321, - 5935860 - ], - [ - 2095331, - 5935853 - ], - [ - 2095342, - 5935846 - ], - [ - 2095352, - 5935840 - ], - [ - 2095362, - 5935832 - ], - [ - 2095373, - 5935826 - ], - [ - 2095384, - 5935818 - ], - [ - 2095395, - 5935812 - ], - [ - 2095404, - 5935804 - ], - [ - 2095415, - 5935797 - ], - [ - 2095426, - 5935790 - ], - [ - 2095437, - 5935783 - ], - [ - 2095446, - 5935776 - ], - [ - 2095456, - 5935769 - ], - [ - 2095467, - 5935762 - ], - [ - 2095476, - 5935754 - ], - [ - 2095487, - 5935747 - ], - [ - 2095497, - 5935740 - ], - [ - 2095508, - 5935733 - ], - [ - 2095518, - 5935726 - ], - [ - 2095528, - 5935719 - ], - [ - 2095539, - 5935712 - ], - [ - 2095549, - 5935705 - ], - [ - 2095559, - 5935698 - ], - [ - 2095570, - 5935690 - ], - [ - 2095580, - 5935683 - ], - [ - 2095591, - 5935676 - ], - [ - 2095599, - 5935669 - ], - [ - 2095610, - 5935661 - ], - [ - 2095621, - 5935654 - ], - [ - 2095631, - 5935647 - ], - [ - 2095640, - 5935640 - ], - [ - 2095651, - 5935634 - ], - [ - 2095662, - 5935626 - ], - [ - 2095672, - 5935619 - ], - [ - 2095682, - 5935611 - ], - [ - 2095693, - 5935605 - ], - [ - 2095703, - 5935597 - ], - [ - 2095713, - 5935590 - ], - [ - 2095723, - 5935582 - ], - [ - 2095734, - 5935576 - ], - [ - 2095744, - 5935568 - ], - [ - 2095754, - 5935562 - ], - [ - 2095764, - 5935555 - ], - [ - 2095775, - 5935547 - ], - [ - 2095785, - 5935542 - ], - [ - 2095795, - 5935534 - ], - [ - 2095806, - 5935527 - ], - [ - 2095817, - 5935521 - ], - [ - 2095828, - 5935515 - ], - [ - 2095838, - 5935507 - ], - [ - 2095848, - 5935501 - ], - [ - 2095859, - 5935493 - ], - [ - 2095869, - 5935487 - ], - [ - 2095881, - 5935479 - ], - [ - 2095890, - 5935473 - ], - [ - 2095901, - 5935466 - ], - [ - 2095912, - 5935458 - ], - [ - 2095923, - 5935452 - ], - [ - 2095933, - 5935444 - ], - [ - 2095944, - 5935438 - ], - [ - 2095955, - 5935431 - ], - [ - 2095964, - 5935424 - ], - [ - 2095975, - 5935418 - ], - [ - 2095985, - 5935411 - ], - [ - 2095996, - 5935404 - ], - [ - 2096006, - 5935398 - ], - [ - 2096016, - 5935390 - ], - [ - 2096027, - 5935384 - ], - [ - 2096038, - 5935378 - ], - [ - 2096049, - 5935370 - ], - [ - 2096059, - 5935364 - ], - [ - 2096069, - 5935355 - ], - [ - 2096080, - 5935348 - ], - [ - 2096091, - 5935341 - ], - [ - 2096100, - 5935332 - ], - [ - 2096111, - 5935325 - ], - [ - 2096121, - 5935318 - ], - [ - 2096130, - 5935309 - ], - [ - 2096141, - 5935303 - ], - [ - 2096151, - 5935296 - ], - [ - 2096162, - 5935287 - ], - [ - 2096171, - 5935281 - ], - [ - 2096182, - 5935273 - ], - [ - 2096193, - 5935266 - ], - [ - 2096202, - 5935258 - ], - [ - 2096213, - 5935251 - ], - [ - 2096223, - 5935245 - ], - [ - 2096234, - 5935238 - ], - [ - 2096243, - 5935230 - ], - [ - 2096255, - 5935224 - ], - [ - 2096265, - 5935216 - ], - [ - 2096276, - 5935209 - ], - [ - 2096286, - 5935204 - ], - [ - 2096296, - 5935196 - ], - [ - 2096306, - 5935189 - ], - [ - 2096317, - 5935183 - ], - [ - 2096327, - 5935176 - ], - [ - 2096337, - 5935168 - ], - [ - 2096348, - 5935163 - ], - [ - 2096358, - 5935155 - ], - [ - 2096368, - 5935148 - ], - [ - 2096378, - 5935142 - ], - [ - 2096389, - 5935135 - ], - [ - 2096400, - 5935128 - ], - [ - 2096410, - 5935122 - ], - [ - 2096420, - 5935115 - ], - [ - 2096430, - 5935108 - ], - [ - 2096441, - 5935102 - ], - [ - 2096452, - 5935094 - ], - [ - 2096462, - 5935088 - ], - [ - 2096473, - 5935080 - ], - [ - 2096484, - 5935074 - ], - [ - 2096495, - 5935066 - ], - [ - 2096505, - 5935060 - ], - [ - 2096516, - 5935052 - ], - [ - 2096526, - 5935046 - ], - [ - 2096536, - 5935039 - ], - [ - 2096546, - 5935032 - ], - [ - 2096557, - 5935025 - ], - [ - 2096568, - 5935018 - ], - [ - 2096578, - 5935012 - ], - [ - 2096588, - 5935004 - ], - [ - 2096598, - 5934998 - ], - [ - 2096609, - 5934990 - ], - [ - 2096620, - 5934984 - ], - [ - 2096629, - 5934977 - ], - [ - 2096640, - 5934970 - ], - [ - 2096651, - 5934963 - ], - [ - 2096660, - 5934955 - ], - [ - 2096670, - 5934948 - ], - [ - 2096680, - 5934941 - ], - [ - 2096691, - 5934934 - ], - [ - 2096701, - 5934926 - ], - [ - 2096711, - 5934919 - ], - [ - 2096722, - 5934911 - ], - [ - 2096732, - 5934904 - ], - [ - 2096742, - 5934896 - ], - [ - 2096752, - 5934890 - ], - [ - 2096763, - 5934883 - ], - [ - 2096774, - 5934875 - ], - [ - 2096784, - 5934870 - ], - [ - 2096795, - 5934863 - ], - [ - 2096805, - 5934856 - ], - [ - 2096817, - 5934850 - ], - [ - 2096827, - 5934843 - ], - [ - 2096837, - 5934835 - ], - [ - 2096849, - 5934829 - ], - [ - 2096859, - 5934821 - ], - [ - 2096869, - 5934815 - ], - [ - 2096880, - 5934807 - ], - [ - 2096891, - 5934800 - ], - [ - 2096901, - 5934793 - ], - [ - 2096912, - 5934786 - ], - [ - 2096922, - 5934779 - ], - [ - 2096933, - 5934772 - ], - [ - 2096944, - 5934764 - ], - [ - 2096954, - 5934757 - ], - [ - 2096964, - 5934750 - ], - [ - 2096976, - 5934742 - ], - [ - 2096986, - 5934736 - ], - [ - 2096996, - 5934728 - ], - [ - 2097007, - 5934722 - ], - [ - 2097018, - 5934714 - ], - [ - 2097029, - 5934707 - ], - [ - 2097039, - 5934700 - ], - [ - 2097050, - 5934693 - ], - [ - 2097060, - 5934686 - ], - [ - 2097071, - 5934680 - ], - [ - 2097081, - 5934674 - ], - [ - 2097091, - 5934666 - ], - [ - 2097101, - 5934660 - ], - [ - 2097112, - 5934653 - ], - [ - 2097121, - 5934646 - ], - [ - 2097131, - 5934641 - ], - [ - 2097142, - 5934634 - ], - [ - 2097152, - 5934626 - ], - [ - 2097162, - 5934621 - ], - [ - 2097172, - 5934614 - ], - [ - 2097183, - 5934606 - ], - [ - 2097194, - 5934601 - ], - [ - 2097203, - 5934593 - ], - [ - 2097214, - 5934586 - ], - [ - 2097225, - 5934579 - ], - [ - 2097236, - 5934572 - ], - [ - 2097245, - 5934564 - ], - [ - 2097256, - 5934557 - ], - [ - 2097266, - 5934550 - ], - [ - 2097277, - 5934543 - ], - [ - 2097286, - 5934535 - ], - [ - 2097297, - 5934529 - ], - [ - 2097307, - 5934522 - ], - [ - 2097318, - 5934514 - ], - [ - 2097327, - 5934507 - ], - [ - 2097338, - 5934499 - ], - [ - 2097349, - 5934493 - ], - [ - 2097360, - 5934486 - ], - [ - 2097369, - 5934479 - ], - [ - 2097381, - 5934471 - ], - [ - 2097391, - 5934465 - ], - [ - 2097402, - 5934457 - ], - [ - 2097412, - 5934451 - ], - [ - 2097423, - 5934443 - ], - [ - 2097433, - 5934436 - ], - [ - 2097444, - 5934429 - ], - [ - 2097454, - 5934421 - ], - [ - 2097464, - 5934414 - ], - [ - 2097475, - 5934406 - ], - [ - 2097485, - 5934400 - ], - [ - 2097495, - 5934392 - ], - [ - 2097506, - 5934385 - ], - [ - 2097516, - 5934377 - ], - [ - 2097526, - 5934370 - ], - [ - 2097536, - 5934363 - ], - [ - 2097547, - 5934357 - ], - [ - 2097557, - 5934350 - ], - [ - 2097567, - 5934344 - ], - [ - 2097578, - 5934337 - ], - [ - 2097588, - 5934329 - ], - [ - 2097599, - 5934325 - ], - [ - 2097609, - 5934317 - ], - [ - 2097619, - 5934311 - ], - [ - 2097630, - 5934305 - ], - [ - 2097641, - 5934298 - ], - [ - 2097651, - 5934290 - ], - [ - 2097661, - 5934285 - ], - [ - 2097672, - 5934279 - ], - [ - 2097682, - 5934271 - ], - [ - 2097693, - 5934265 - ], - [ - 2097702, - 5934257 - ], - [ - 2097713, - 5934250 - ], - [ - 2097723, - 5934244 - ], - [ - 2097734, - 5934237 - ], - [ - 2097743, - 5934229 - ], - [ - 2097754, - 5934224 - ], - [ - 2097764, - 5934216 - ], - [ - 2097775, - 5934209 - ], - [ - 2097785, - 5934204 - ], - [ - 2097795, - 5934196 - ], - [ - 2097806, - 5934189 - ], - [ - 2097818, - 5934182 - ], - [ - 2097827, - 5934175 - ], - [ - 2097838, - 5934167 - ], - [ - 2097850, - 5934161 - ], - [ - 2097860, - 5934153 - ], - [ - 2097870, - 5934146 - ], - [ - 2097881, - 5934139 - ], - [ - 2097891, - 5934132 - ], - [ - 2097902, - 5934124 - ], - [ - 2097912, - 5934118 - ], - [ - 2097923, - 5934110 - ], - [ - 2097933, - 5934103 - ], - [ - 2097943, - 5934096 - ], - [ - 2097954, - 5934088 - ], - [ - 2097964, - 5934081 - ], - [ - 2097975, - 5934073 - ], - [ - 2097985, - 5934066 - ], - [ - 2097995, - 5934058 - ], - [ - 2098006, - 5934051 - ], - [ - 2098017, - 5934043 - ], - [ - 2098026, - 5934036 - ], - [ - 2098038, - 5934029 - ], - [ - 2098048, - 5934022 - ], - [ - 2098059, - 5934014 - ], - [ - 2098070, - 5934008 - ], - [ - 2098081, - 5934000 - ], - [ - 2098091, - 5933993 - ], - [ - 2098103, - 5933987 - ], - [ - 2098112, - 5933979 - ], - [ - 2098123, - 5933972 - ], - [ - 2098134, - 5933965 - ], - [ - 2098144, - 5933958 - ], - [ - 2098154, - 5933950 - ], - [ - 2098166, - 5933944 - ], - [ - 2098177, - 5933936 - ], - [ - 2098186, - 5933929 - ], - [ - 2098197, - 5933922 - ], - [ - 2098208, - 5933915 - ], - [ - 2098218, - 5933907 - ], - [ - 2098229, - 5933902 - ], - [ - 2098239, - 5933894 - ], - [ - 2098250, - 5933887 - ], - [ - 2098262, - 5933880 - ], - [ - 2098271, - 5933873 - ], - [ - 2098282, - 5933866 - ], - [ - 2098293, - 5933859 - ], - [ - 2098304, - 5933852 - ], - [ - 2098313, - 5933844 - ], - [ - 2098324, - 5933839 - ], - [ - 2098335, - 5933831 - ], - [ - 2098345, - 5933824 - ], - [ - 2098355, - 5933818 - ], - [ - 2098366, - 5933811 - ], - [ - 2098376, - 5933803 - ], - [ - 2098387, - 5933797 - ], - [ - 2098397, - 5933790 - ], - [ - 2098407, - 5933782 - ], - [ - 2098417, - 5933777 - ], - [ - 2098428, - 5933769 - ], - [ - 2098437, - 5933762 - ], - [ - 2098447, - 5933755 - ], - [ - 2098458, - 5933748 - ], - [ - 2098468, - 5933740 - ], - [ - 2098478, - 5933734 - ], - [ - 2098488, - 5933727 - ], - [ - 2098498, - 5933719 - ], - [ - 2098509, - 5933713 - ], - [ - 2098518, - 5933705 - ], - [ - 2098529, - 5933698 - ], - [ - 2098539, - 5933691 - ], - [ - 2098550, - 5933684 - ], - [ - 2098559, - 5933675 - ], - [ - 2098570, - 5933670 - ], - [ - 2098580, - 5933661 - ], - [ - 2098589, - 5933654 - ], - [ - 2098600, - 5933649 - ], - [ - 2098610, - 5933641 - ], - [ - 2098620, - 5933634 - ], - [ - 2098631, - 5933629 - ], - [ - 2098641, - 5933622 - ], - [ - 2098651, - 5933614 - ], - [ - 2098662, - 5933609 - ], - [ - 2098673, - 5933601 - ], - [ - 2098682, - 5933594 - ], - [ - 2098694, - 5933588 - ], - [ - 2098704, - 5933581 - ], - [ - 2098715, - 5933574 - ], - [ - 2098725, - 5933568 - ], - [ - 2098736, - 5933561 - ], - [ - 2098746, - 5933553 - ], - [ - 2098757, - 5933548 - ], - [ - 2098767, - 5933540 - ], - [ - 2098777, - 5933533 - ], - [ - 2098788, - 5933527 - ], - [ - 2098798, - 5933520 - ], - [ - 2098808, - 5933512 - ], - [ - 2098818, - 5933508 - ], - [ - 2098828, - 5933501 - ], - [ - 2098839, - 5933493 - ], - [ - 2098849, - 5933488 - ], - [ - 2098858, - 5933481 - ], - [ - 2098869, - 5933474 - ], - [ - 2098879, - 5933467 - ], - [ - 2098889, - 5933460 - ], - [ - 2098899, - 5933452 - ], - [ - 2098909, - 5933447 - ], - [ - 2098920, - 5933439 - ], - [ - 2098929, - 5933432 - ], - [ - 2098939, - 5933426 - ], - [ - 2098950, - 5933418 - ], - [ - 2098960, - 5933411 - ], - [ - 2098970, - 5933403 - ], - [ - 2098981, - 5933396 - ], - [ - 2098991, - 5933388 - ], - [ - 2099002, - 5933381 - ], - [ - 2099011, - 5933373 - ], - [ - 2099021, - 5933366 - ], - [ - 2099031, - 5933361 - ], - [ - 2099042, - 5933353 - ], - [ - 2099051, - 5933345 - ], - [ - 2099062, - 5933340 - ], - [ - 2099072, - 5933332 - ], - [ - 2099082, - 5933324 - ], - [ - 2099093, - 5933320 - ], - [ - 2099103, - 5933312 - ], - [ - 2099113, - 5933304 - ], - [ - 2099125, - 5933299 - ], - [ - 2099134, - 5933291 - ], - [ - 2099144, - 5933284 - ], - [ - 2099158, - 5933278 - ], - [ - 2099168, - 5933271 - ], - [ - 2099177, - 5933263 - ], - [ - 2099190, - 5933257 - ], - [ - 2099201, - 5933249 - ], - [ - 2099211, - 5933242 - ], - [ - 2099222, - 5933236 - ], - [ - 2099232, - 5933229 - ], - [ - 2099243, - 5933221 - ], - [ - 2099254, - 5933216 - ], - [ - 2099263, - 5933208 - ], - [ - 2099273, - 5933201 - ], - [ - 2099284, - 5933194 - ], - [ - 2099295, - 5933187 - ], - [ - 2099304, - 5933180 - ], - [ - 2099315, - 5933173 - ], - [ - 2099325, - 5933166 - ], - [ - 2099336, - 5933158 - ], - [ - 2099345, - 5933151 - ], - [ - 2099355, - 5933143 - ], - [ - 2099366, - 5933136 - ], - [ - 2099375, - 5933128 - ], - [ - 2099386, - 5933121 - ], - [ - 2099396, - 5933113 - ], - [ - 2099407, - 5933106 - ], - [ - 2099416, - 5933099 - ], - [ - 2099427, - 5933091 - ], - [ - 2099438, - 5933086 - ], - [ - 2099449, - 5933077 - ], - [ - 2099458, - 5933070 - ], - [ - 2099470, - 5933063 - ], - [ - 2099480, - 5933056 - ], - [ - 2099491, - 5933048 - ], - [ - 2099502, - 5933042 - ], - [ - 2099512, - 5933034 - ], - [ - 2099523, - 5933027 - ], - [ - 2099535, - 5933020 - ], - [ - 2099544, - 5933012 - ], - [ - 2099555, - 5933004 - ], - [ - 2099567, - 5932998 - ], - [ - 2099577, - 5932990 - ], - [ - 2099586, - 5932983 - ], - [ - 2099598, - 5932977 - ], - [ - 2099608, - 5932969 - ], - [ - 2099618, - 5932962 - ], - [ - 2099629, - 5932955 - ], - [ - 2099639, - 5932948 - ], - [ - 2099650, - 5932940 - ], - [ - 2099661, - 5932935 - ], - [ - 2099671, - 5932927 - ], - [ - 2099682, - 5932920 - ], - [ - 2099692, - 5932914 - ], - [ - 2099701, - 5932907 - ], - [ - 2099712, - 5932900 - ], - [ - 2099723, - 5932895 - ], - [ - 2099733, - 5932888 - ], - [ - 2099744, - 5932880 - ], - [ - 2099753, - 5932875 - ], - [ - 2099763, - 5932867 - ], - [ - 2099774, - 5932859 - ], - [ - 2099784, - 5932853 - ], - [ - 2099794, - 5932845 - ], - [ - 2099804, - 5932837 - ], - [ - 2099815, - 5932831 - ], - [ - 2099824, - 5932823 - ], - [ - 2099835, - 5932815 - ], - [ - 2099846, - 5932810 - ], - [ - 2099856, - 5932802 - ], - [ - 2099866, - 5932795 - ], - [ - 2099877, - 5932789 - ], - [ - 2099887, - 5932782 - ], - [ - 2099898, - 5932774 - ], - [ - 2099909, - 5932770 - ], - [ - 2099918, - 5932761 - ], - [ - 2099929, - 5932754 - ], - [ - 2099940, - 5932748 - ], - [ - 2099949, - 5932741 - ], - [ - 2099959, - 5932734 - ], - [ - 2099970, - 5932728 - ], - [ - 2099980, - 5932721 - ], - [ - 2099990, - 5932713 - ], - [ - 2100001, - 5932709 - ], - [ - 2100011, - 5932701 - ], - [ - 2100022, - 5932694 - ], - [ - 2100032, - 5932689 - ], - [ - 2100041, - 5932682 - ], - [ - 2100052, - 5932675 - ], - [ - 2100063, - 5932670 - ], - [ - 2100073, - 5932663 - ], - [ - 2100082, - 5932655 - ], - [ - 2100093, - 5932650 - ], - [ - 2100104, - 5932642 - ], - [ - 2100114, - 5932635 - ], - [ - 2100125, - 5932627 - ], - [ - 2100136, - 5932620 - ], - [ - 2100146, - 5932612 - ], - [ - 2100157, - 5932606 - ], - [ - 2100167, - 5932598 - ], - [ - 2100177, - 5932591 - ], - [ - 2100188, - 5932585 - ], - [ - 2100199, - 5932577 - ], - [ - 2100208, - 5932570 - ], - [ - 2100219, - 5932563 - ], - [ - 2100230, - 5932556 - ], - [ - 2100240, - 5932548 - ], - [ - 2100250, - 5932542 - ], - [ - 2100260, - 5932534 - ], - [ - 2100271, - 5932527 - ], - [ - 2100281, - 5932520 - ], - [ - 2100290, - 5932513 - ], - [ - 2100301, - 5932506 - ], - [ - 2100311, - 5932500 - ], - [ - 2100322, - 5932493 - ], - [ - 2100331, - 5932485 - ], - [ - 2100343, - 5932481 - ], - [ - 2100353, - 5932473 - ], - [ - 2100363, - 5932466 - ], - [ - 2100374, - 5932460 - ], - [ - 2100385, - 5932452 - ], - [ - 2100395, - 5932444 - ], - [ - 2100407, - 5932439 - ], - [ - 2100416, - 5932431 - ], - [ - 2100427, - 5932424 - ], - [ - 2100438, - 5932418 - ], - [ - 2100448, - 5932410 - ], - [ - 2100458, - 5932403 - ], - [ - 2100468, - 5932396 - ], - [ - 2100479, - 5932389 - ], - [ - 2100489, - 5932381 - ], - [ - 2100499, - 5932375 - ], - [ - 2100509, - 5932367 - ], - [ - 2100520, - 5932360 - ], - [ - 2100530, - 5932354 - ], - [ - 2100540, - 5932347 - ], - [ - 2100550, - 5932339 - ], - [ - 2100562, - 5932333 - ], - [ - 2100571, - 5932326 - ], - [ - 2100581, - 5932318 - ], - [ - 2100593, - 5932313 - ], - [ - 2100604, - 5932305 - ], - [ - 2100613, - 5932298 - ], - [ - 2100624, - 5932292 - ], - [ - 2100634, - 5932284 - ], - [ - 2100644, - 5932276 - ], - [ - 2100655, - 5932271 - ], - [ - 2100664, - 5932264 - ], - [ - 2100675, - 5932255 - ], - [ - 2100686, - 5932250 - ], - [ - 2100695, - 5932242 - ], - [ - 2100706, - 5932235 - ], - [ - 2100718, - 5932229 - ], - [ - 2100728, - 5932221 - ], - [ - 2100737, - 5932213 - ], - [ - 2100749, - 5932207 - ], - [ - 2100759, - 5932199 - ], - [ - 2100770, - 5932192 - ], - [ - 2100780, - 5932186 - ], - [ - 2100790, - 5932178 - ], - [ - 2100801, - 5932170 - ], - [ - 2100811, - 5932164 - ], - [ - 2100821, - 5932157 - ], - [ - 2100831, - 5932149 - ], - [ - 2100841, - 5932145 - ], - [ - 2100851, - 5932136 - ], - [ - 2100861, - 5932129 - ], - [ - 2100872, - 5932124 - ], - [ - 2100882, - 5932117 - ], - [ - 2100892, - 5932109 - ], - [ - 2100904, - 5932104 - ], - [ - 2100914, - 5932095 - ], - [ - 2100925, - 5932088 - ], - [ - 2100937, - 5932083 - ], - [ - 2100947, - 5932075 - ], - [ - 2100957, - 5932068 - ], - [ - 2100969, - 5932062 - ], - [ - 2100979, - 5932055 - ], - [ - 2100988, - 5932047 - ], - [ - 2100999, - 5932041 - ], - [ - 2101010, - 5932033 - ], - [ - 2101020, - 5932026 - ], - [ - 2101030, - 5932019 - ], - [ - 2101041, - 5932012 - ], - [ - 2101051, - 5932004 - ], - [ - 2101062, - 5931998 - ], - [ - 2101071, - 5931991 - ], - [ - 2101082, - 5931983 - ], - [ - 2101093, - 5931978 - ], - [ - 2101103, - 5931970 - ], - [ - 2101113, - 5931962 - ], - [ - 2101124, - 5931956 - ], - [ - 2101134, - 5931949 - ], - [ - 2101145, - 5931941 - ], - [ - 2101155, - 5931936 - ], - [ - 2101165, - 5931928 - ], - [ - 2101175, - 5931920 - ], - [ - 2101186, - 5931914 - ], - [ - 2101196, - 5931906 - ], - [ - 2101206, - 5931899 - ], - [ - 2101218, - 5931893 - ], - [ - 2101228, - 5931886 - ], - [ - 2101237, - 5931878 - ], - [ - 2101247, - 5931873 - ], - [ - 2101258, - 5931864 - ], - [ - 2101268, - 5931857 - ], - [ - 2101277, - 5931851 - ], - [ - 2101288, - 5931844 - ], - [ - 2101298, - 5931837 - ], - [ - 2101309, - 5931830 - ], - [ - 2101318, - 5931822 - ], - [ - 2101328, - 5931814 - ], - [ - 2101340, - 5931809 - ], - [ - 2101351, - 5931801 - ], - [ - 2101360, - 5931794 - ], - [ - 2101372, - 5931788 - ], - [ - 2101382, - 5931781 - ], - [ - 2101391, - 5931772 - ], - [ - 2101404, - 5931768 - ], - [ - 2101414, - 5931760 - ], - [ - 2101424, - 5931752 - ], - [ - 2101436, - 5931747 - ], - [ - 2101446, - 5931739 - ], - [ - 2101456, - 5931732 - ], - [ - 2101468, - 5931727 - ], - [ - 2101478, - 5931719 - ], - [ - 2101487, - 5931711 - ], - [ - 2101499, - 5931706 - ], - [ - 2101509, - 5931698 - ], - [ - 2101519, - 5931691 - ], - [ - 2101529, - 5931685 - ], - [ - 2101540, - 5931678 - ], - [ - 2101550, - 5931669 - ], - [ - 2101562, - 5931664 - ], - [ - 2101571, - 5931656 - ], - [ - 2101582, - 5931649 - ], - [ - 2101594, - 5931643 - ], - [ - 2101604, - 5931635 - ], - [ - 2101613, - 5931628 - ], - [ - 2101625, - 5931622 - ], - [ - 2101635, - 5931614 - ], - [ - 2101645, - 5931606 - ], - [ - 2101655, - 5931600 - ], - [ - 2101666, - 5931592 - ], - [ - 2101676, - 5931585 - ], - [ - 2101687, - 5931578 - ], - [ - 2101696, - 5931571 - ], - [ - 2101706, - 5931563 - ], - [ - 2101718, - 5931557 - ], - [ - 2101727, - 5931550 - ], - [ - 2101737, - 5931541 - ], - [ - 2101748, - 5931536 - ], - [ - 2101759, - 5931528 - ], - [ - 2101768, - 5931520 - ], - [ - 2101779, - 5931515 - ], - [ - 2101789, - 5931507 - ], - [ - 2101799, - 5931499 - ], - [ - 2101809, - 5931493 - ], - [ - 2101819, - 5931486 - ], - [ - 2101829, - 5931478 - ], - [ - 2101840, - 5931473 - ], - [ - 2101849, - 5931465 - ], - [ - 2101859, - 5931457 - ], - [ - 2101871, - 5931452 - ], - [ - 2101882, - 5931444 - ], - [ - 2101891, - 5931436 - ], - [ - 2101903, - 5931431 - ], - [ - 2101913, - 5931423 - ], - [ - 2101923, - 5931415 - ], - [ - 2101934, - 5931410 - ], - [ - 2101944, - 5931402 - ], - [ - 2101954, - 5931395 - ], - [ - 2101966, - 5931389 - ], - [ - 2101975, - 5931382 - ], - [ - 2101986, - 5931373 - ], - [ - 2101998, - 5931369 - ], - [ - 2102008, - 5931361 - ], - [ - 2102017, - 5931353 - ], - [ - 2102028, - 5931347 - ], - [ - 2102038, - 5931340 - ], - [ - 2102049, - 5931332 - ], - [ - 2102059, - 5931327 - ], - [ - 2102069, - 5931319 - ], - [ - 2102079, - 5931311 - ], - [ - 2102091, - 5931306 - ], - [ - 2102100, - 5931298 - ], - [ - 2102110, - 5931290 - ], - [ - 2102121, - 5931284 - ], - [ - 2102131, - 5931276 - ], - [ - 2102140, - 5931268 - ], - [ - 2102152, - 5931263 - ], - [ - 2102162, - 5931255 - ], - [ - 2102172, - 5931247 - ], - [ - 2102182, - 5931243 - ], - [ - 2102192, - 5931235 - ], - [ - 2102202, - 5931228 - ], - [ - 2102215, - 5931223 - ], - [ - 2102224, - 5931216 - ], - [ - 2102234, - 5931207 - ], - [ - 2102247, - 5931202 - ], - [ - 2102257, - 5931194 - ], - [ - 2102267, - 5931186 - ], - [ - 2102280, - 5931181 - ], - [ - 2102290, - 5931174 - ], - [ - 2102300, - 5931165 - ], - [ - 2102311, - 5931160 - ], - [ - 2102321, - 5931151 - ], - [ - 2102332, - 5931144 - ], - [ - 2102343, - 5931139 - ], - [ - 2102352, - 5931131 - ], - [ - 2102363, - 5931124 - ], - [ - 2102373, - 5931119 - ], - [ - 2102383, - 5931111 - ], - [ - 2102392, - 5931103 - ], - [ - 2102404, - 5931100 - ], - [ - 2102415, - 5931091 - ], - [ - 2102425, - 5931084 - ], - [ - 2102436, - 5931079 - ], - [ - 2102445, - 5931071 - ], - [ - 2102455, - 5931064 - ], - [ - 2102467, - 5931060 - ], - [ - 2102477, - 5931053 - ], - [ - 2102486, - 5931044 - ], - [ - 2102500, - 5931040 - ], - [ - 2102510, - 5931031 - ], - [ - 2102520, - 5931024 - ], - [ - 2102532, - 5931018 - ], - [ - 2102542, - 5931010 - ], - [ - 2102553, - 5931002 - ], - [ - 2102564, - 5930996 - ], - [ - 2102574, - 5930987 - ], - [ - 2102584, - 5930980 - ], - [ - 2102595, - 5930974 - ], - [ - 2102605, - 5930966 - ], - [ - 2102615, - 5930958 - ], - [ - 2102625, - 5930952 - ], - [ - 2102636, - 5930945 - ], - [ - 2102645, - 5930936 - ], - [ - 2102655, - 5930931 - ], - [ - 2102665, - 5930923 - ], - [ - 2102675, - 5930915 - ], - [ - 2102685, - 5930909 - ], - [ - 2102695, - 5930901 - ], - [ - 2102705, - 5930892 - ], - [ - 2102716, - 5930887 - ], - [ - 2102725, - 5930880 - ], - [ - 2102735, - 5930871 - ], - [ - 2102747, - 5930866 - ], - [ - 2102756, - 5930858 - ], - [ - 2102766, - 5930850 - ], - [ - 2102778, - 5930845 - ], - [ - 2102788, - 5930837 - ], - [ - 2102797, - 5930829 - ], - [ - 2102809, - 5930824 - ], - [ - 2102819, - 5930816 - ], - [ - 2102829, - 5930808 - ], - [ - 2102841, - 5930803 - ], - [ - 2102850, - 5930795 - ], - [ - 2102860, - 5930787 - ], - [ - 2102872, - 5930782 - ], - [ - 2102881, - 5930775 - ], - [ - 2102891, - 5930766 - ], - [ - 2102903, - 5930761 - ], - [ - 2102913, - 5930753 - ], - [ - 2102922, - 5930745 - ], - [ - 2102935, - 5930739 - ], - [ - 2102945, - 5930731 - ], - [ - 2102955, - 5930723 - ], - [ - 2102965, - 5930719 - ], - [ - 2102975, - 5930711 - ], - [ - 2102985, - 5930702 - ], - [ - 2102996, - 5930698 - ], - [ - 2103005, - 5930689 - ], - [ - 2103015, - 5930682 - ], - [ - 2103028, - 5930677 - ], - [ - 2103038, - 5930669 - ], - [ - 2103047, - 5930660 - ], - [ - 2103058, - 5930654 - ], - [ - 2103068, - 5930646 - ], - [ - 2103078, - 5930638 - ], - [ - 2103089, - 5930632 - ], - [ - 2103099, - 5930624 - ], - [ - 2103109, - 5930616 - ], - [ - 2103120, - 5930610 - ], - [ - 2103128, - 5930603 - ], - [ - 2103138, - 5930594 - ], - [ - 2103150, - 5930590 - ], - [ - 2103159, - 5930581 - ], - [ - 2103169, - 5930573 - ], - [ - 2103181, - 5930569 - ], - [ - 2103191, - 5930561 - ], - [ - 2103200, - 5930553 - ], - [ - 2103212, - 5930548 - ], - [ - 2103221, - 5930541 - ], - [ - 2103231, - 5930532 - ], - [ - 2103243, - 5930528 - ], - [ - 2103252, - 5930520 - ], - [ - 2103262, - 5930512 - ], - [ - 2103275, - 5930508 - ], - [ - 2103285, - 5930500 - ], - [ - 2103294, - 5930492 - ], - [ - 2103307, - 5930489 - ], - [ - 2103317, - 5930480 - ], - [ - 2103327, - 5930473 - ], - [ - 2103340, - 5930468 - ], - [ - 2103350, - 5930461 - ], - [ - 2103360, - 5930453 - ], - [ - 2103372, - 5930447 - ], - [ - 2103381, - 5930439 - ], - [ - 2103392, - 5930431 - ], - [ - 2103403, - 5930424 - ], - [ - 2103413, - 5930416 - ], - [ - 2103422, - 5930409 - ], - [ - 2103432, - 5930401 - ], - [ - 2103443, - 5930394 - ], - [ - 2103452, - 5930385 - ], - [ - 2103463, - 5930380 - ], - [ - 2103473, - 5930372 - ], - [ - 2103483, - 5930364 - ], - [ - 2103494, - 5930360 - ], - [ - 2103504, - 5930352 - ], - [ - 2103514, - 5930344 - ], - [ - 2103523, - 5930338 - ], - [ - 2103532, - 5930331 - ], - [ - 2103542, - 5930322 - ], - [ - 2103555, - 5930319 - ], - [ - 2103565, - 5930310 - ], - [ - 2103574, - 5930303 - ], - [ - 2103588, - 5930298 - ], - [ - 2103598, - 5930290 - ], - [ - 2103608, - 5930283 - ], - [ - 2103621, - 5930279 - ], - [ - 2103630, - 5930271 - ], - [ - 2103640, - 5930263 - ], - [ - 2103652, - 5930258 - ], - [ - 2103662, - 5930250 - ], - [ - 2103671, - 5930242 - ], - [ - 2103683, - 5930235 - ], - [ - 2103693, - 5930228 - ], - [ - 2103702, - 5930219 - ], - [ - 2103713, - 5930214 - ], - [ - 2103723, - 5930207 - ], - [ - 2103733, - 5930198 - ], - [ - 2103744, - 5930193 - ], - [ - 2103754, - 5930185 - ], - [ - 2103764, - 5930177 - ], - [ - 2103776, - 5930171 - ], - [ - 2103785, - 5930163 - ], - [ - 2103795, - 5930155 - ], - [ - 2103807, - 5930151 - ], - [ - 2103817, - 5930142 - ], - [ - 2103826, - 5930134 - ], - [ - 2103838, - 5930129 - ], - [ - 2103848, - 5930121 - ], - [ - 2103858, - 5930114 - ], - [ - 2103869, - 5930109 - ], - [ - 2103879, - 5930101 - ], - [ - 2103889, - 5930092 - ], - [ - 2103901, - 5930088 - ], - [ - 2103910, - 5930080 - ], - [ - 2103920, - 5930072 - ], - [ - 2103932, - 5930066 - ], - [ - 2103942, - 5930059 - ], - [ - 2103951, - 5930050 - ], - [ - 2103962, - 5930045 - ], - [ - 2103972, - 5930038 - ], - [ - 2103982, - 5930029 - ], - [ - 2103992, - 5930024 - ], - [ - 2104002, - 5930016 - ], - [ - 2104012, - 5930008 - ], - [ - 2104023, - 5930002 - ], - [ - 2104032, - 5929994 - ], - [ - 2104042, - 5929986 - ], - [ - 2104054, - 5929981 - ], - [ - 2104063, - 5929972 - ], - [ - 2104073, - 5929964 - ], - [ - 2104086, - 5929959 - ], - [ - 2104096, - 5929951 - ], - [ - 2104105, - 5929943 - ], - [ - 2104117, - 5929939 - ], - [ - 2104126, - 5929931 - ], - [ - 2104136, - 5929922 - ], - [ - 2104148, - 5929919 - ], - [ - 2104157, - 5929910 - ], - [ - 2104167, - 5929902 - ], - [ - 2104180, - 5929898 - ], - [ - 2104190, - 5929890 - ], - [ - 2104199, - 5929882 - ], - [ - 2104212, - 5929878 - ], - [ - 2104222, - 5929869 - ], - [ - 2104232, - 5929862 - ], - [ - 2104243, - 5929857 - ], - [ - 2104253, - 5929848 - ], - [ - 2104263, - 5929840 - ], - [ - 2104275, - 5929835 - ], - [ - 2104284, - 5929827 - ], - [ - 2104294, - 5929819 - ], - [ - 2104306, - 5929814 - ], - [ - 2104315, - 5929806 - ], - [ - 2104325, - 5929798 - ], - [ - 2104337, - 5929793 - ], - [ - 2104347, - 5929786 - ], - [ - 2104356, - 5929778 - ], - [ - 2104368, - 5929773 - ], - [ - 2104378, - 5929765 - ], - [ - 2104388, - 5929756 - ], - [ - 2104399, - 5929752 - ], - [ - 2104408, - 5929743 - ], - [ - 2104418, - 5929735 - ], - [ - 2104430, - 5929730 - ], - [ - 2104439, - 5929722 - ], - [ - 2104449, - 5929713 - ], - [ - 2104461, - 5929708 - ], - [ - 2104471, - 5929700 - ], - [ - 2104480, - 5929692 - ], - [ - 2104492, - 5929687 - ], - [ - 2104502, - 5929678 - ], - [ - 2104512, - 5929671 - ], - [ - 2104522, - 5929665 - ], - [ - 2104532, - 5929658 - ], - [ - 2104542, - 5929649 - ], - [ - 2104553, - 5929646 - ], - [ - 2104562, - 5929637 - ], - [ - 2104572, - 5929629 - ], - [ - 2104585, - 5929625 - ], - [ - 2104595, - 5929617 - ], - [ - 2104604, - 5929609 - ], - [ - 2104616, - 5929604 - ], - [ - 2104626, - 5929597 - ], - [ - 2104636, - 5929588 - ], - [ - 2104648, - 5929583 - ], - [ - 2104658, - 5929575 - ], - [ - 2104668, - 5929567 - ], - [ - 2104680, - 5929561 - ], - [ - 2104690, - 5929554 - ], - [ - 2104700, - 5929545 - ], - [ - 2104711, - 5929540 - ], - [ - 2104721, - 5929532 - ], - [ - 2104730, - 5929524 - ], - [ - 2104741, - 5929519 - ], - [ - 2104751, - 5929510 - ], - [ - 2104761, - 5929503 - ], - [ - 2104772, - 5929497 - ], - [ - 2104782, - 5929489 - ], - [ - 2104792, - 5929481 - ], - [ - 2104804, - 5929477 - ], - [ - 2104813, - 5929468 - ], - [ - 2104823, - 5929461 - ], - [ - 2104835, - 5929458 - ], - [ - 2104845, - 5929450 - ], - [ - 2104854, - 5929442 - ], - [ - 2104867, - 5929438 - ], - [ - 2104877, - 5929430 - ], - [ - 2104887, - 5929422 - ], - [ - 2104898, - 5929418 - ], - [ - 2104908, - 5929409 - ], - [ - 2104918, - 5929402 - ], - [ - 2104931, - 5929396 - ], - [ - 2104940, - 5929388 - ], - [ - 2104950, - 5929380 - ], - [ - 2104962, - 5929375 - ], - [ - 2104972, - 5929366 - ], - [ - 2104982, - 5929358 - ], - [ - 2104993, - 5929352 - ], - [ - 2105003, - 5929344 - ], - [ - 2105012, - 5929336 - ], - [ - 2105022, - 5929330 - ], - [ - 2105032, - 5929322 - ], - [ - 2105042, - 5929314 - ], - [ - 2105053, - 5929309 - ], - [ - 2105062, - 5929300 - ], - [ - 2105072, - 5929292 - ], - [ - 2105083, - 5929287 - ], - [ - 2105092, - 5929279 - ], - [ - 2105102, - 5929271 - ], - [ - 2105114, - 5929266 - ], - [ - 2105124, - 5929258 - ], - [ - 2105133, - 5929249 - ], - [ - 2105145, - 5929244 - ], - [ - 2105155, - 5929236 - ], - [ - 2105165, - 5929228 - ], - [ - 2105177, - 5929222 - ], - [ - 2105187, - 5929215 - ], - [ - 2105196, - 5929206 - ], - [ - 2105208, - 5929201 - ], - [ - 2105217, - 5929192 - ], - [ - 2105227, - 5929185 - ], - [ - 2105239, - 5929180 - ], - [ - 2105249, - 5929172 - ], - [ - 2105258, - 5929164 - ], - [ - 2105269, - 5929158 - ], - [ - 2105279, - 5929150 - ], - [ - 2105288, - 5929142 - ], - [ - 2105300, - 5929138 - ], - [ - 2105310, - 5929129 - ], - [ - 2105320, - 5929121 - ], - [ - 2105331, - 5929117 - ], - [ - 2105340, - 5929109 - ], - [ - 2105350, - 5929101 - ], - [ - 2105361, - 5929096 - ], - [ - 2105370, - 5929088 - ], - [ - 2105380, - 5929079 - ], - [ - 2105393, - 5929074 - ], - [ - 2105403, - 5929066 - ], - [ - 2105412, - 5929058 - ], - [ - 2105424, - 5929051 - ], - [ - 2105434, - 5929044 - ], - [ - 2105444, - 5929035 - ], - [ - 2105456, - 5929031 - ], - [ - 2105466, - 5929022 - ], - [ - 2105476, - 5929015 - ], - [ - 2105487, - 5929009 - ], - [ - 2105496, - 5929000 - ], - [ - 2105506, - 5928992 - ], - [ - 2105517, - 5928986 - ], - [ - 2105527, - 5928978 - ], - [ - 2105536, - 5928969 - ], - [ - 2105547, - 5928964 - ], - [ - 2105557, - 5928955 - ], - [ - 2105566, - 5928947 - ], - [ - 2105578, - 5928942 - ], - [ - 2105588, - 5928934 - ], - [ - 2105598, - 5928926 - ], - [ - 2105609, - 5928921 - ], - [ - 2105619, - 5928913 - ], - [ - 2105629, - 5928905 - ], - [ - 2105640, - 5928900 - ], - [ - 2105649, - 5928891 - ], - [ - 2105659, - 5928884 - ], - [ - 2105670, - 5928879 - ], - [ - 2105680, - 5928871 - ], - [ - 2105689, - 5928863 - ], - [ - 2105701, - 5928859 - ], - [ - 2105710, - 5928851 - ], - [ - 2105720, - 5928842 - ], - [ - 2105731, - 5928839 - ], - [ - 2105741, - 5928830 - ], - [ - 2105751, - 5928822 - ], - [ - 2105763, - 5928818 - ], - [ - 2105772, - 5928811 - ], - [ - 2105782, - 5928802 - ], - [ - 2105795, - 5928799 - ], - [ - 2105805, - 5928790 - ], - [ - 2105814, - 5928783 - ], - [ - 2105828, - 5928778 - ], - [ - 2105838, - 5928771 - ], - [ - 2105848, - 5928763 - ], - [ - 2105861, - 5928757 - ], - [ - 2105870, - 5928750 - ], - [ - 2105880, - 5928741 - ], - [ - 2105893, - 5928737 - ], - [ - 2105903, - 5928728 - ], - [ - 2105912, - 5928721 - ], - [ - 2105923, - 5928714 - ], - [ - 2105933, - 5928707 - ], - [ - 2105943, - 5928699 - ], - [ - 2105953, - 5928693 - ], - [ - 2105963, - 5928685 - ], - [ - 2105974, - 5928678 - ], - [ - 2105983, - 5928672 - ], - [ - 2105993, - 5928663 - ], - [ - 2106003, - 5928656 - ], - [ - 2106013, - 5928648 - ], - [ - 2106022, - 5928641 - ], - [ - 2106032, - 5928632 - ], - [ - 2106044, - 5928627 - ], - [ - 2106054, - 5928618 - ], - [ - 2106063, - 5928611 - ], - [ - 2106074, - 5928605 - ], - [ - 2106084, - 5928596 - ], - [ - 2106093, - 5928588 - ], - [ - 2106105, - 5928582 - ], - [ - 2106115, - 5928574 - ], - [ - 2106125, - 5928566 - ], - [ - 2106135, - 5928560 - ], - [ - 2106145, - 5928552 - ], - [ - 2106155, - 5928544 - ], - [ - 2106167, - 5928538 - ], - [ - 2106176, - 5928530 - ], - [ - 2106185, - 5928522 - ], - [ - 2106197, - 5928517 - ], - [ - 2106207, - 5928509 - ], - [ - 2106216, - 5928500 - ], - [ - 2106227, - 5928496 - ], - [ - 2106237, - 5928487 - ], - [ - 2106246, - 5928480 - ], - [ - 2106258, - 5928474 - ], - [ - 2106268, - 5928467 - ], - [ - 2106278, - 5928459 - ], - [ - 2106289, - 5928453 - ], - [ - 2106299, - 5928445 - ], - [ - 2106309, - 5928437 - ], - [ - 2106321, - 5928432 - ], - [ - 2106330, - 5928424 - ], - [ - 2106340, - 5928416 - ], - [ - 2106352, - 5928410 - ], - [ - 2106362, - 5928403 - ], - [ - 2106371, - 5928394 - ], - [ - 2106383, - 5928389 - ], - [ - 2106393, - 5928380 - ], - [ - 2106403, - 5928373 - ], - [ - 2106413, - 5928368 - ], - [ - 2106423, - 5928359 - ], - [ - 2106433, - 5928352 - ], - [ - 2106445, - 5928346 - ], - [ - 2106454, - 5928338 - ], - [ - 2106464, - 5928330 - ], - [ - 2106475, - 5928325 - ], - [ - 2106485, - 5928316 - ], - [ - 2106494, - 5928309 - ], - [ - 2106505, - 5928302 - ], - [ - 2106515, - 5928295 - ], - [ - 2106524, - 5928287 - ], - [ - 2106536, - 5928281 - ], - [ - 2106546, - 5928273 - ], - [ - 2106556, - 5928265 - ], - [ - 2106566, - 5928259 - ], - [ - 2106576, - 5928251 - ], - [ - 2106586, - 5928243 - ], - [ - 2106598, - 5928236 - ], - [ - 2106607, - 5928229 - ], - [ - 2106617, - 5928221 - ], - [ - 2106628, - 5928214 - ], - [ - 2106638, - 5928207 - ], - [ - 2106647, - 5928198 - ], - [ - 2106659, - 5928191 - ], - [ - 2106669, - 5928182 - ], - [ - 2106678, - 5928175 - ], - [ - 2106690, - 5928167 - ], - [ - 2106700, - 5928159 - ], - [ - 2106711, - 5928151 - ], - [ - 2106721, - 5928143 - ], - [ - 2106731, - 5928135 - ], - [ - 2106741, - 5928128 - ], - [ - 2106752, - 5928121 - ], - [ - 2106762, - 5928113 - ], - [ - 2106772, - 5928106 - ], - [ - 2106784, - 5928099 - ], - [ - 2106793, - 5928092 - ], - [ - 2106803, - 5928084 - ], - [ - 2106815, - 5928079 - ], - [ - 2106825, - 5928070 - ], - [ - 2106835, - 5928063 - ], - [ - 2106844, - 5928059 - ], - [ - 2106855, - 5928051 - ], - [ - 2106865, - 5928044 - ], - [ - 2106874, - 5928039 - ], - [ - 2106884, - 5928032 - ], - [ - 2106894, - 5928024 - ], - [ - 2106904, - 5928019 - ], - [ - 2106913, - 5928010 - ], - [ - 2106924, - 5928003 - ], - [ - 2106935, - 5927996 - ], - [ - 2106945, - 5927989 - ], - [ - 2106955, - 5927982 - ], - [ - 2106966, - 5927976 - ], - [ - 2106976, - 5927968 - ], - [ - 2106986, - 5927960 - ], - [ - 2106997, - 5927955 - ], - [ - 2107007, - 5927947 - ], - [ - 2107017, - 5927940 - ], - [ - 2107029, - 5927934 - ], - [ - 2107038, - 5927927 - ], - [ - 2107048, - 5927919 - ], - [ - 2107060, - 5927914 - ], - [ - 2107070, - 5927906 - ], - [ - 2107079, - 5927899 - ], - [ - 2107090, - 5927895 - ], - [ - 2107100, - 5927887 - ], - [ - 2107111, - 5927880 - ], - [ - 2107120, - 5927874 - ], - [ - 2107131, - 5927867 - ], - [ - 2107141, - 5927859 - ], - [ - 2107154, - 5927853 - ], - [ - 2107164, - 5927845 - ], - [ - 2107174, - 5927838 - ], - [ - 2107186, - 5927831 - ], - [ - 2107197, - 5927824 - ], - [ - 2107207, - 5927816 - ], - [ - 2107217, - 5927810 - ], - [ - 2107227, - 5927803 - ], - [ - 2107238, - 5927795 - ], - [ - 2107247, - 5927789 - ], - [ - 2107257, - 5927782 - ], - [ - 2107268, - 5927775 - ], - [ - 2107279, - 5927768 - ], - [ - 2107288, - 5927761 - ], - [ - 2107299, - 5927753 - ], - [ - 2107309, - 5927746 - ], - [ - 2107320, - 5927739 - ], - [ - 2107329, - 5927732 - ], - [ - 2107339, - 5927724 - ], - [ - 2107350, - 5927717 - ], - [ - 2107360, - 5927710 - ], - [ - 2107372, - 5927704 - ], - [ - 2107382, - 5927697 - ], - [ - 2107393, - 5927689 - ], - [ - 2107405, - 5927684 - ], - [ - 2107414, - 5927676 - ], - [ - 2107425, - 5927669 - ], - [ - 2107436, - 5927662 - ], - [ - 2107447, - 5927655 - ], - [ - 2107456, - 5927648 - ], - [ - 2107467, - 5927641 - ], - [ - 2107478, - 5927633 - ], - [ - 2107488, - 5927627 - ], - [ - 2107498, - 5927620 - ], - [ - 2107509, - 5927612 - ], - [ - 2107519, - 5927606 - ], - [ - 2107530, - 5927599 - ], - [ - 2107539, - 5927592 - ], - [ - 2107550, - 5927584 - ], - [ - 2107560, - 5927578 - ], - [ - 2107571, - 5927570 - ], - [ - 2107580, - 5927564 - ], - [ - 2107590, - 5927557 - ], - [ - 2107601, - 5927550 - ], - [ - 2107612, - 5927543 - ], - [ - 2107621, - 5927535 - ], - [ - 2107631, - 5927528 - ], - [ - 2107642, - 5927521 - ], - [ - 2107652, - 5927514 - ], - [ - 2107662, - 5927507 - ], - [ - 2107673, - 5927500 - ], - [ - 2107683, - 5927493 - ], - [ - 2107693, - 5927486 - ], - [ - 2107704, - 5927479 - ], - [ - 2107715, - 5927473 - ], - [ - 2107725, - 5927467 - ], - [ - 2107736, - 5927459 - ], - [ - 2107746, - 5927452 - ], - [ - 2107757, - 5927444 - ], - [ - 2107767, - 5927437 - ], - [ - 2107776, - 5927430 - ], - [ - 2107787, - 5927423 - ], - [ - 2107798, - 5927415 - ], - [ - 2107808, - 5927409 - ], - [ - 2107817, - 5927402 - ], - [ - 2107828, - 5927395 - ], - [ - 2107839, - 5927388 - ], - [ - 2107850, - 5927381 - ], - [ - 2107859, - 5927374 - ], - [ - 2107871, - 5927367 - ], - [ - 2107881, - 5927360 - ], - [ - 2107892, - 5927352 - ], - [ - 2107902, - 5927345 - ], - [ - 2107913, - 5927338 - ], - [ - 2107924, - 5927331 - ], - [ - 2107935, - 5927323 - ], - [ - 2107944, - 5927316 - ], - [ - 2107955, - 5927309 - ], - [ - 2107966, - 5927302 - ], - [ - 2107976, - 5927295 - ], - [ - 2107986, - 5927288 - ], - [ - 2107998, - 5927282 - ], - [ - 2108008, - 5927276 - ], - [ - 2108019, - 5927269 - ], - [ - 2108030, - 5927263 - ], - [ - 2108041, - 5927256 - ], - [ - 2108051, - 5927249 - ], - [ - 2108062, - 5927244 - ], - [ - 2108071, - 5927236 - ], - [ - 2108082, - 5927230 - ], - [ - 2108092, - 5927223 - ], - [ - 2108103, - 5927216 - ], - [ - 2108114, - 5927209 - ], - [ - 2108123, - 5927202 - ], - [ - 2108134, - 5927195 - ], - [ - 2108145, - 5927189 - ], - [ - 2108154, - 5927181 - ], - [ - 2108165, - 5927174 - ], - [ - 2108176, - 5927168 - ], - [ - 2108186, - 5927159 - ], - [ - 2108196, - 5927153 - ], - [ - 2108206, - 5927145 - ], - [ - 2108217, - 5927138 - ], - [ - 2108228, - 5927131 - ], - [ - 2108237, - 5927124 - ], - [ - 2108247, - 5927117 - ], - [ - 2108258, - 5927110 - ], - [ - 2108269, - 5927102 - ], - [ - 2108278, - 5927095 - ], - [ - 2108289, - 5927089 - ], - [ - 2108299, - 5927081 - ], - [ - 2108309, - 5927075 - ], - [ - 2108319, - 5927067 - ], - [ - 2108330, - 5927061 - ], - [ - 2108340, - 5927054 - ], - [ - 2108351, - 5927047 - ], - [ - 2108360, - 5927039 - ], - [ - 2108371, - 5927033 - ], - [ - 2108382, - 5927026 - ], - [ - 2108393, - 5927019 - ], - [ - 2108402, - 5927013 - ], - [ - 2108413, - 5927006 - ], - [ - 2108424, - 5926999 - ], - [ - 2108433, - 5926991 - ], - [ - 2108443, - 5926985 - ], - [ - 2108454, - 5926977 - ], - [ - 2108465, - 5926971 - ], - [ - 2108475, - 5926963 - ], - [ - 2108485, - 5926957 - ], - [ - 2108495, - 5926949 - ], - [ - 2108506, - 5926942 - ], - [ - 2108517, - 5926936 - ], - [ - 2108526, - 5926928 - ], - [ - 2108537, - 5926922 - ], - [ - 2108548, - 5926914 - ], - [ - 2108558, - 5926908 - ], - [ - 2108568, - 5926901 - ], - [ - 2108579, - 5926895 - ], - [ - 2108590, - 5926888 - ], - [ - 2108601, - 5926882 - ], - [ - 2108611, - 5926874 - ], - [ - 2108622, - 5926868 - ], - [ - 2108633, - 5926861 - ], - [ - 2108644, - 5926854 - ], - [ - 2108653, - 5926847 - ], - [ - 2108664, - 5926841 - ], - [ - 2108675, - 5926834 - ], - [ - 2108685, - 5926827 - ], - [ - 2108695, - 5926820 - ], - [ - 2108705, - 5926813 - ], - [ - 2108716, - 5926807 - ], - [ - 2108727, - 5926800 - ], - [ - 2108738, - 5926793 - ], - [ - 2108747, - 5926785 - ], - [ - 2108758, - 5926779 - ], - [ - 2108769, - 5926771 - ], - [ - 2108778, - 5926764 - ], - [ - 2108789, - 5926756 - ], - [ - 2108800, - 5926750 - ], - [ - 2108810, - 5926744 - ], - [ - 2108821, - 5926737 - ], - [ - 2108831, - 5926730 - ], - [ - 2108841, - 5926724 - ], - [ - 2108852, - 5926718 - ], - [ - 2108863, - 5926710 - ], - [ - 2108873, - 5926705 - ], - [ - 2108883, - 5926698 - ], - [ - 2108894, - 5926691 - ], - [ - 2108906, - 5926683 - ], - [ - 2108916, - 5926677 - ], - [ - 2108927, - 5926669 - ], - [ - 2108939, - 5926662 - ], - [ - 2108950, - 5926654 - ], - [ - 2108959, - 5926648 - ], - [ - 2108970, - 5926640 - ], - [ - 2108981, - 5926633 - ], - [ - 2108992, - 5926627 - ], - [ - 2109001, - 5926619 - ], - [ - 2109011, - 5926613 - ], - [ - 2109022, - 5926606 - ], - [ - 2109031, - 5926599 - ], - [ - 2109041, - 5926591 - ], - [ - 2109052, - 5926585 - ], - [ - 2109062, - 5926576 - ], - [ - 2109071, - 5926570 - ], - [ - 2109082, - 5926563 - ], - [ - 2109092, - 5926555 - ], - [ - 2109103, - 5926548 - ], - [ - 2109112, - 5926541 - ], - [ - 2109122, - 5926534 - ], - [ - 2109133, - 5926526 - ], - [ - 2109144, - 5926520 - ], - [ - 2109153, - 5926514 - ], - [ - 2109164, - 5926507 - ], - [ - 2109175, - 5926499 - ], - [ - 2109185, - 5926494 - ], - [ - 2109195, - 5926487 - ], - [ - 2109206, - 5926479 - ], - [ - 2109217, - 5926473 - ], - [ - 2109228, - 5926466 - ], - [ - 2109237, - 5926459 - ], - [ - 2109248, - 5926451 - ], - [ - 2109259, - 5926444 - ], - [ - 2109270, - 5926437 - ], - [ - 2109279, - 5926430 - ], - [ - 2109290, - 5926422 - ], - [ - 2109301, - 5926415 - ], - [ - 2109311, - 5926408 - ], - [ - 2109320, - 5926401 - ], - [ - 2109331, - 5926394 - ], - [ - 2109341, - 5926386 - ], - [ - 2109351, - 5926380 - ], - [ - 2109361, - 5926372 - ], - [ - 2109372, - 5926366 - ], - [ - 2109383, - 5926358 - ], - [ - 2109393, - 5926351 - ], - [ - 2109404, - 5926344 - ], - [ - 2109414, - 5926337 - ], - [ - 2109425, - 5926330 - ], - [ - 2109436, - 5926324 - ], - [ - 2109446, - 5926317 - ], - [ - 2109457, - 5926310 - ], - [ - 2109466, - 5926304 - ], - [ - 2109477, - 5926296 - ], - [ - 2109487, - 5926289 - ], - [ - 2109497, - 5926282 - ], - [ - 2109508, - 5926276 - ], - [ - 2109518, - 5926268 - ], - [ - 2109528, - 5926261 - ], - [ - 2109539, - 5926254 - ], - [ - 2109550, - 5926247 - ], - [ - 2109561, - 5926240 - ], - [ - 2109570, - 5926234 - ], - [ - 2109581, - 5926226 - ], - [ - 2109592, - 5926220 - ], - [ - 2109602, - 5926213 - ], - [ - 2109612, - 5926206 - ], - [ - 2109622, - 5926199 - ], - [ - 2109633, - 5926191 - ], - [ - 2109643, - 5926185 - ], - [ - 2109653, - 5926178 - ], - [ - 2109664, - 5926171 - ], - [ - 2109674, - 5926163 - ], - [ - 2109685, - 5926157 - ], - [ - 2109695, - 5926150 - ], - [ - 2109706, - 5926143 - ], - [ - 2109717, - 5926136 - ], - [ - 2109727, - 5926129 - ], - [ - 2109737, - 5926122 - ], - [ - 2109746, - 5926115 - ], - [ - 2109757, - 5926108 - ], - [ - 2109768, - 5926101 - ], - [ - 2109777, - 5926094 - ], - [ - 2109788, - 5926087 - ], - [ - 2109798, - 5926080 - ], - [ - 2109810, - 5926072 - ], - [ - 2109820, - 5926065 - ], - [ - 2109830, - 5926058 - ], - [ - 2109841, - 5926050 - ], - [ - 2109851, - 5926043 - ], - [ - 2109861, - 5926036 - ], - [ - 2109872, - 5926028 - ], - [ - 2109882, - 5926020 - ], - [ - 2109892, - 5926013 - ], - [ - 2109903, - 5926006 - ], - [ - 2109913, - 5926000 - ], - [ - 2109924, - 5925992 - ], - [ - 2109935, - 5925986 - ], - [ - 2109945, - 5925979 - ], - [ - 2109956, - 5925972 - ], - [ - 2109967, - 5925965 - ], - [ - 2109977, - 5925959 - ], - [ - 2109988, - 5925951 - ], - [ - 2109999, - 5925944 - ], - [ - 2110010, - 5925937 - ], - [ - 2110019, - 5925930 - ], - [ - 2110030, - 5925922 - ], - [ - 2110040, - 5925914 - ], - [ - 2110051, - 5925908 - ], - [ - 2110061, - 5925900 - ], - [ - 2110072, - 5925893 - ], - [ - 2110082, - 5925886 - ], - [ - 2110093, - 5925879 - ], - [ - 2110103, - 5925871 - ], - [ - 2110114, - 5925865 - ], - [ - 2110125, - 5925857 - ], - [ - 2110136, - 5925851 - ], - [ - 2110145, - 5925843 - ], - [ - 2110157, - 5925836 - ], - [ - 2110167, - 5925830 - ], - [ - 2110177, - 5925822 - ], - [ - 2110188, - 5925815 - ], - [ - 2110199, - 5925808 - ], - [ - 2110210, - 5925801 - ], - [ - 2110220, - 5925794 - ], - [ - 2110231, - 5925787 - ], - [ - 2110241, - 5925779 - ], - [ - 2110252, - 5925772 - ], - [ - 2110262, - 5925765 - ], - [ - 2110273, - 5925758 - ], - [ - 2110284, - 5925750 - ], - [ - 2110294, - 5925743 - ], - [ - 2110304, - 5925735 - ], - [ - 2110315, - 5925728 - ], - [ - 2110326, - 5925721 - ], - [ - 2110336, - 5925714 - ], - [ - 2110346, - 5925707 - ], - [ - 2110357, - 5925699 - ], - [ - 2110368, - 5925693 - ], - [ - 2110378, - 5925685 - ], - [ - 2110388, - 5925678 - ], - [ - 2110399, - 5925671 - ], - [ - 2110409, - 5925664 - ], - [ - 2110420, - 5925656 - ], - [ - 2110430, - 5925650 - ], - [ - 2110441, - 5925642 - ], - [ - 2110451, - 5925635 - ], - [ - 2110461, - 5925628 - ], - [ - 2110471, - 5925621 - ], - [ - 2110482, - 5925615 - ], - [ - 2110492, - 5925607 - ], - [ - 2110501, - 5925602 - ], - [ - 2110511, - 5925594 - ], - [ - 2110522, - 5925587 - ], - [ - 2110532, - 5925581 - ], - [ - 2110542, - 5925574 - ], - [ - 2110552, - 5925566 - ], - [ - 2110562, - 5925562 - ], - [ - 2110572, - 5925555 - ], - [ - 2110583, - 5925547 - ], - [ - 2110591, - 5925543 - ], - [ - 2110601, - 5925535 - ], - [ - 2110612, - 5925528 - ], - [ - 2110621, - 5925523 - ], - [ - 2110630, - 5925516 - ], - [ - 2110641, - 5925509 - ], - [ - 2110651, - 5925504 - ], - [ - 2110661, - 5925498 - ], - [ - 2110672, - 5925490 - ], - [ - 2110683, - 5925485 - ], - [ - 2110694, - 5925478 - ], - [ - 2110705, - 5925471 - ], - [ - 2110715, - 5925465 - ], - [ - 2110725, - 5925458 - ], - [ - 2110736, - 5925451 - ], - [ - 2110746, - 5925444 - ], - [ - 2110757, - 5925437 - ], - [ - 2110767, - 5925430 - ], - [ - 2110778, - 5925423 - ], - [ - 2110788, - 5925416 - ], - [ - 2110799, - 5925410 - ], - [ - 2110810, - 5925401 - ], - [ - 2110820, - 5925395 - ], - [ - 2110831, - 5925388 - ], - [ - 2110842, - 5925380 - ], - [ - 2110852, - 5925373 - ], - [ - 2110862, - 5925366 - ], - [ - 2110871, - 5925357 - ], - [ - 2110882, - 5925351 - ], - [ - 2110892, - 5925343 - ], - [ - 2110901, - 5925336 - ], - [ - 2110912, - 5925329 - ], - [ - 2110921, - 5925322 - ], - [ - 2110931, - 5925314 - ], - [ - 2110941, - 5925306 - ], - [ - 2110952, - 5925299 - ], - [ - 2110961, - 5925291 - ], - [ - 2110972, - 5925284 - ], - [ - 2110982, - 5925277 - ], - [ - 2110993, - 5925270 - ], - [ - 2111002, - 5925264 - ], - [ - 2111013, - 5925256 - ], - [ - 2111024, - 5925250 - ], - [ - 2111035, - 5925242 - ], - [ - 2111044, - 5925235 - ], - [ - 2111055, - 5925229 - ], - [ - 2111066, - 5925222 - ], - [ - 2111076, - 5925214 - ], - [ - 2111086, - 5925208 - ], - [ - 2111097, - 5925200 - ], - [ - 2111108, - 5925193 - ], - [ - 2111118, - 5925186 - ], - [ - 2111128, - 5925179 - ], - [ - 2111138, - 5925173 - ], - [ - 2111148, - 5925166 - ], - [ - 2111159, - 5925159 - ], - [ - 2111169, - 5925152 - ], - [ - 2111179, - 5925146 - ], - [ - 2111190, - 5925138 - ], - [ - 2111201, - 5925132 - ], - [ - 2111211, - 5925125 - ], - [ - 2111221, - 5925118 - ], - [ - 2111232, - 5925110 - ], - [ - 2111243, - 5925104 - ], - [ - 2111252, - 5925096 - ], - [ - 2111263, - 5925090 - ], - [ - 2111274, - 5925083 - ], - [ - 2111285, - 5925075 - ], - [ - 2111295, - 5925069 - ], - [ - 2111305, - 5925061 - ], - [ - 2111316, - 5925054 - ], - [ - 2111327, - 5925047 - ], - [ - 2111336, - 5925041 - ], - [ - 2111347, - 5925033 - ], - [ - 2111358, - 5925026 - ], - [ - 2111368, - 5925019 - ], - [ - 2111378, - 5925012 - ], - [ - 2111388, - 5925004 - ], - [ - 2111399, - 5924997 - ], - [ - 2111408, - 5924990 - ], - [ - 2111419, - 5924982 - ], - [ - 2111429, - 5924976 - ], - [ - 2111440, - 5924968 - ], - [ - 2111449, - 5924961 - ], - [ - 2111460, - 5924954 - ], - [ - 2111470, - 5924947 - ], - [ - 2111481, - 5924939 - ], - [ - 2111491, - 5924932 - ], - [ - 2111502, - 5924925 - ], - [ - 2111512, - 5924918 - ], - [ - 2111524, - 5924911 - ], - [ - 2111533, - 5924904 - ], - [ - 2111544, - 5924897 - ], - [ - 2111555, - 5924891 - ], - [ - 2111566, - 5924884 - ], - [ - 2111575, - 5924876 - ], - [ - 2111586, - 5924870 - ], - [ - 2111597, - 5924862 - ], - [ - 2111607, - 5924856 - ], - [ - 2111618, - 5924848 - ], - [ - 2111628, - 5924842 - ], - [ - 2111639, - 5924834 - ], - [ - 2111650, - 5924828 - ], - [ - 2111660, - 5924820 - ], - [ - 2111670, - 5924814 - ], - [ - 2111681, - 5924807 - ], - [ - 2111692, - 5924800 - ], - [ - 2111701, - 5924793 - ], - [ - 2111712, - 5924786 - ], - [ - 2111722, - 5924779 - ], - [ - 2111733, - 5924771 - ], - [ - 2111741, - 5924766 - ], - [ - 2111752, - 5924758 - ], - [ - 2111762, - 5924751 - ], - [ - 2111773, - 5924745 - ], - [ - 2111782, - 5924739 - ], - [ - 2111793, - 5924732 - ], - [ - 2111804, - 5924725 - ], - [ - 2111815, - 5924719 - ], - [ - 2111825, - 5924711 - ], - [ - 2111836, - 5924705 - ], - [ - 2111846, - 5924698 - ], - [ - 2111857, - 5924691 - ], - [ - 2111866, - 5924684 - ], - [ - 2111877, - 5924677 - ], - [ - 2111888, - 5924669 - ], - [ - 2111899, - 5924663 - ], - [ - 2111908, - 5924655 - ], - [ - 2111919, - 5924648 - ], - [ - 2111930, - 5924641 - ], - [ - 2111940, - 5924633 - ], - [ - 2111950, - 5924626 - ], - [ - 2111960, - 5924618 - ], - [ - 2111971, - 5924611 - ], - [ - 2111981, - 5924604 - ], - [ - 2111991, - 5924597 - ], - [ - 2112002, - 5924589 - ], - [ - 2112012, - 5924582 - ], - [ - 2112024, - 5924576 - ], - [ - 2112034, - 5924569 - ], - [ - 2112044, - 5924561 - ] - ], - [ - [ - 2074642, - 5829079 - ], - [ - 2074648, - 5829068 - ], - [ - 2074656, - 5829058 - ], - [ - 2074663, - 5829048 - ], - [ - 2074671, - 5829038 - ], - [ - 2074679, - 5829029 - ], - [ - 2074686, - 5829018 - ], - [ - 2074695, - 5829009 - ], - [ - 2074702, - 5828999 - ], - [ - 2074710, - 5828989 - ], - [ - 2074718, - 5828980 - ], - [ - 2074725, - 5828970 - ], - [ - 2074733, - 5828960 - ], - [ - 2074742, - 5828951 - ], - [ - 2074749, - 5828940 - ], - [ - 2074757, - 5828931 - ], - [ - 2074764, - 5828922 - ], - [ - 2074773, - 5828912 - ], - [ - 2074781, - 5828902 - ], - [ - 2074788, - 5828893 - ], - [ - 2074797, - 5828883 - ], - [ - 2074804, - 5828874 - ], - [ - 2074813, - 5828863 - ], - [ - 2074821, - 5828854 - ], - [ - 2074828, - 5828845 - ], - [ - 2074837, - 5828835 - ], - [ - 2074845, - 5828826 - ], - [ - 2074853, - 5828817 - ], - [ - 2074861, - 5828807 - ], - [ - 2074869, - 5828798 - ], - [ - 2074877, - 5828788 - ], - [ - 2074886, - 5828779 - ], - [ - 2074894, - 5828770 - ], - [ - 2074902, - 5828760 - ], - [ - 2074911, - 5828751 - ], - [ - 2074919, - 5828742 - ], - [ - 2074927, - 5828732 - ], - [ - 2074935, - 5828723 - ], - [ - 2074944, - 5828713 - ], - [ - 2074953, - 5828705 - ], - [ - 2074961, - 5828696 - ], - [ - 2074969, - 5828686 - ], - [ - 2074978, - 5828677 - ], - [ - 2074986, - 5828668 - ], - [ - 2074995, - 5828659 - ], - [ - 2075004, - 5828650 - ], - [ - 2075012, - 5828641 - ], - [ - 2075021, - 5828632 - ], - [ - 2075030, - 5828622 - ], - [ - 2075038, - 5828614 - ], - [ - 2075047, - 5828605 - ], - [ - 2075055, - 5828595 - ], - [ - 2075064, - 5828587 - ], - [ - 2075073, - 5828577 - ], - [ - 2075081, - 5828569 - ], - [ - 2075090, - 5828560 - ], - [ - 2075099, - 5828551 - ], - [ - 2075107, - 5828542 - ], - [ - 2075116, - 5828533 - ], - [ - 2075125, - 5828524 - ], - [ - 2075133, - 5828516 - ], - [ - 2075142, - 5828506 - ], - [ - 2075151, - 5828498 - ], - [ - 2075160, - 5828488 - ], - [ - 2075169, - 5828480 - ], - [ - 2075178, - 5828472 - ], - [ - 2075186, - 5828462 - ], - [ - 2075196, - 5828454 - ], - [ - 2075205, - 5828445 - ], - [ - 2075213, - 5828437 - ], - [ - 2075223, - 5828428 - ], - [ - 2075232, - 5828419 - ], - [ - 2075241, - 5828411 - ], - [ - 2075250, - 5828402 - ], - [ - 2075260, - 5828394 - ], - [ - 2075268, - 5828385 - ], - [ - 2075278, - 5828377 - ], - [ - 2075288, - 5828369 - ], - [ - 2075296, - 5828361 - ], - [ - 2075306, - 5828353 - ], - [ - 2075316, - 5828344 - ], - [ - 2075325, - 5828336 - ], - [ - 2075334, - 5828328 - ], - [ - 2075344, - 5828320 - ], - [ - 2075354, - 5828313 - ], - [ - 2075363, - 5828304 - ], - [ - 2075373, - 5828297 - ], - [ - 2075383, - 5828289 - ], - [ - 2075393, - 5828281 - ], - [ - 2075403, - 5828273 - ], - [ - 2075413, - 5828266 - ], - [ - 2075422, - 5828258 - ], - [ - 2075433, - 5828251 - ], - [ - 2075443, - 5828244 - ], - [ - 2075453, - 5828236 - ], - [ - 2075463, - 5828230 - ], - [ - 2075473, - 5828222 - ], - [ - 2075484, - 5828215 - ], - [ - 2075495, - 5828208 - ], - [ - 2075504, - 5828201 - ], - [ - 2075515, - 5828194 - ], - [ - 2075526, - 5828188 - ], - [ - 2075537, - 5828181 - ], - [ - 2075547, - 5828175 - ], - [ - 2075558, - 5828168 - ], - [ - 2075569, - 5828162 - ], - [ - 2075580, - 5828155 - ], - [ - 2075590, - 5828149 - ], - [ - 2075601, - 5828143 - ], - [ - 2075612, - 5828138 - ], - [ - 2075623, - 5828131 - ], - [ - 2075635, - 5828126 - ], - [ - 2075645, - 5828120 - ], - [ - 2075657, - 5828115 - ], - [ - 2075668, - 5828109 - ], - [ - 2075680, - 5828105 - ], - [ - 2075691, - 5828099 - ], - [ - 2075702, - 5828095 - ], - [ - 2075714, - 5828090 - ], - [ - 2075726, - 5828086 - ], - [ - 2075738, - 5828081 - ], - [ - 2075750, - 5828078 - ], - [ - 2075762, - 5828074 - ], - [ - 2075774, - 5828071 - ], - [ - 2075786, - 5828067 - ], - [ - 2075797, - 5828064 - ], - [ - 2075809, - 5828061 - ], - [ - 2075822, - 5828059 - ], - [ - 2075834, - 5828056 - ], - [ - 2075847, - 5828054 - ], - [ - 2075859, - 5828052 - ], - [ - 2075872, - 5828051 - ], - [ - 2075884, - 5828049 - ], - [ - 2075896, - 5828048 - ], - [ - 2075909, - 5828047 - ], - [ - 2075921, - 5828046 - ], - [ - 2075934, - 5828046 - ], - [ - 2075947, - 5828045 - ], - [ - 2075959, - 5828046 - ], - [ - 2075971, - 5828046 - ], - [ - 2075984, - 5828047 - ], - [ - 2075997, - 5828048 - ], - [ - 2076010, - 5828049 - ], - [ - 2076022, - 5828050 - ], - [ - 2076034, - 5828052 - ], - [ - 2076047, - 5828054 - ], - [ - 2076059, - 5828057 - ], - [ - 2076071, - 5828059 - ], - [ - 2076083, - 5828062 - ], - [ - 2076096, - 5828064 - ], - [ - 2076108, - 5828068 - ], - [ - 2076120, - 5828071 - ], - [ - 2076132, - 5828075 - ], - [ - 2076143, - 5828078 - ], - [ - 2076156, - 5828083 - ], - [ - 2076168, - 5828087 - ], - [ - 2076179, - 5828092 - ], - [ - 2076190, - 5828096 - ], - [ - 2076202, - 5828102 - ], - [ - 2076213, - 5828107 - ], - [ - 2076224, - 5828113 - ], - [ - 2076235, - 5828118 - ], - [ - 2076247, - 5828125 - ], - [ - 2076258, - 5828130 - ], - [ - 2076268, - 5828137 - ], - [ - 2076279, - 5828144 - ], - [ - 2076290, - 5828151 - ], - [ - 2076300, - 5828158 - ], - [ - 2076310, - 5828165 - ], - [ - 2076320, - 5828172 - ], - [ - 2076330, - 5828180 - ], - [ - 2076340, - 5828188 - ], - [ - 2076350, - 5828196 - ], - [ - 2076359, - 5828204 - ], - [ - 2076369, - 5828212 - ], - [ - 2076377, - 5828221 - ], - [ - 2076387, - 5828229 - ], - [ - 2076396, - 5828238 - ], - [ - 2076405, - 5828247 - ], - [ - 2076414, - 5828255 - ], - [ - 2076423, - 5828264 - ], - [ - 2076432, - 5828273 - ], - [ - 2076441, - 5828282 - ], - [ - 2076449, - 5828291 - ], - [ - 2076458, - 5828301 - ], - [ - 2076466, - 5828309 - ], - [ - 2076475, - 5828319 - ], - [ - 2076483, - 5828328 - ], - [ - 2076492, - 5828337 - ], - [ - 2076500, - 5828347 - ], - [ - 2076508, - 5828356 - ], - [ - 2076516, - 5828365 - ], - [ - 2076524, - 5828375 - ], - [ - 2076532, - 5828385 - ], - [ - 2076540, - 5828394 - ], - [ - 2076549, - 5828404 - ], - [ - 2076556, - 5828414 - ], - [ - 2076563, - 5828423 - ], - [ - 2076572, - 5828433 - ], - [ - 2076579, - 5828443 - ], - [ - 2076587, - 5828453 - ], - [ - 2076594, - 5828463 - ], - [ - 2076603, - 5828473 - ], - [ - 2076610, - 5828483 - ], - [ - 2076618, - 5828492 - ], - [ - 2076625, - 5828503 - ], - [ - 2076633, - 5828513 - ], - [ - 2076640, - 5828523 - ], - [ - 2076647, - 5828533 - ], - [ - 2076655, - 5828543 - ], - [ - 2076662, - 5828553 - ], - [ - 2076670, - 5828563 - ], - [ - 2076677, - 5828573 - ], - [ - 2076685, - 5828583 - ], - [ - 2076692, - 5828594 - ], - [ - 2076700, - 5828603 - ], - [ - 2076707, - 5828614 - ], - [ - 2076715, - 5828624 - ], - [ - 2076721, - 5828635 - ], - [ - 2076728, - 5828644 - ], - [ - 2076736, - 5828655 - ], - [ - 2076743, - 5828665 - ], - [ - 2076751, - 5828675 - ], - [ - 2076757, - 5828685 - ], - [ - 2076765, - 5828696 - ], - [ - 2076772, - 5828706 - ], - [ - 2076780, - 5828716 - ], - [ - 2076787, - 5828726 - ], - [ - 2076794, - 5828737 - ], - [ - 2076801, - 5828746 - ], - [ - 2076809, - 5828757 - ], - [ - 2076815, - 5828767 - ], - [ - 2076822, - 5828778 - ], - [ - 2076830, - 5828788 - ], - [ - 2076836, - 5828798 - ], - [ - 2076844, - 5828809 - ], - [ - 2076851, - 5828819 - ], - [ - 2076858, - 5828829 - ], - [ - 2076865, - 5828840 - ], - [ - 2076873, - 5828850 - ], - [ - 2076879, - 5828861 - ], - [ - 2076887, - 5828870 - ], - [ - 2076893, - 5828881 - ], - [ - 2076901, - 5828892 - ], - [ - 2076908, - 5828901 - ], - [ - 2076914, - 5828912 - ], - [ - 2076922, - 5828922 - ], - [ - 2076928, - 5828933 - ], - [ - 2076936, - 5828943 - ], - [ - 2076942, - 5828954 - ], - [ - 2076950, - 5828964 - ], - [ - 2076956, - 5828975 - ], - [ - 2076964, - 5828984 - ], - [ - 2076970, - 5828995 - ], - [ - 2076978, - 5829006 - ], - [ - 2076984, - 5829017 - ], - [ - 2076992, - 5829026 - ], - [ - 2076998, - 5829037 - ], - [ - 2077006, - 5829048 - ], - [ - 2077012, - 5829058 - ], - [ - 2077020, - 5829068 - ], - [ - 2077026, - 5829079 - ], - [ - 2077033, - 5829090 - ], - [ - 2077040, - 5829100 - ], - [ - 2077047, - 5829110 - ], - [ - 2077054, - 5829121 - ], - [ - 2077061, - 5829131 - ], - [ - 2077068, - 5829142 - ], - [ - 2077075, - 5829152 - ], - [ - 2077082, - 5829163 - ], - [ - 2077088, - 5829173 - ], - [ - 2077096, - 5829183 - ], - [ - 2077102, - 5829194 - ], - [ - 2077110, - 5829204 - ], - [ - 2077116, - 5829215 - ], - [ - 2077124, - 5829225 - ], - [ - 2077130, - 5829236 - ], - [ - 2077137, - 5829246 - ], - [ - 2077144, - 5829257 - ], - [ - 2077151, - 5829267 - ], - [ - 2077158, - 5829278 - ], - [ - 2077165, - 5829288 - ], - [ - 2077172, - 5829299 - ], - [ - 2077178, - 5829309 - ], - [ - 2077186, - 5829320 - ], - [ - 2077192, - 5829330 - ], - [ - 2077200, - 5829341 - ], - [ - 2077206, - 5829351 - ], - [ - 2077214, - 5829361 - ], - [ - 2077220, - 5829372 - ], - [ - 2077227, - 5829383 - ], - [ - 2077234, - 5829392 - ], - [ - 2077242, - 5829403 - ], - [ - 2077248, - 5829414 - ], - [ - 2077255, - 5829424 - ], - [ - 2077262, - 5829434 - ], - [ - 2077269, - 5829445 - ], - [ - 2077277, - 5829455 - ], - [ - 2077283, - 5829466 - ], - [ - 2077291, - 5829476 - ], - [ - 2077298, - 5829486 - ], - [ - 2077305, - 5829497 - ], - [ - 2077311, - 5829507 - ], - [ - 2077319, - 5829517 - ], - [ - 2077326, - 5829528 - ], - [ - 2077333, - 5829539 - ], - [ - 2077340, - 5829548 - ], - [ - 2077348, - 5829559 - ], - [ - 2077354, - 5829570 - ], - [ - 2077361, - 5829580 - ], - [ - 2077368, - 5829590 - ], - [ - 2077375, - 5829601 - ], - [ - 2077382, - 5829611 - ], - [ - 2077389, - 5829622 - ], - [ - 2077396, - 5829632 - ], - [ - 2077403, - 5829642 - ], - [ - 2077410, - 5829653 - ], - [ - 2077417, - 5829664 - ], - [ - 2077425, - 5829673 - ], - [ - 2077431, - 5829684 - ], - [ - 2077438, - 5829695 - ], - [ - 2077446, - 5829704 - ], - [ - 2077453, - 5829714 - ], - [ - 2077459, - 5829725 - ], - [ - 2077466, - 5829735 - ], - [ - 2077474, - 5829745 - ], - [ - 2077480, - 5829756 - ], - [ - 2077488, - 5829766 - ], - [ - 2077495, - 5829777 - ], - [ - 2077502, - 5829787 - ], - [ - 2077509, - 5829797 - ], - [ - 2077516, - 5829808 - ], - [ - 2077523, - 5829819 - ], - [ - 2077531, - 5829828 - ], - [ - 2077537, - 5829839 - ], - [ - 2077545, - 5829850 - ], - [ - 2077552, - 5829859 - ], - [ - 2077559, - 5829870 - ], - [ - 2077566, - 5829880 - ], - [ - 2077572, - 5829891 - ], - [ - 2077580, - 5829901 - ], - [ - 2077586, - 5829911 - ], - [ - 2077594, - 5829922 - ], - [ - 2077601, - 5829932 - ], - [ - 2077608, - 5829942 - ], - [ - 2077615, - 5829952 - ], - [ - 2077622, - 5829963 - ], - [ - 2077629, - 5829974 - ], - [ - 2077636, - 5829983 - ], - [ - 2077643, - 5829994 - ], - [ - 2077650, - 5830005 - ], - [ - 2077657, - 5830015 - ], - [ - 2077664, - 5830025 - ], - [ - 2077671, - 5830036 - ], - [ - 2077677, - 5830047 - ], - [ - 2077685, - 5830057 - ], - [ - 2077691, - 5830067 - ], - [ - 2077699, - 5830078 - ], - [ - 2077705, - 5830089 - ], - [ - 2077713, - 5830099 - ], - [ - 2077720, - 5830109 - ], - [ - 2077727, - 5830119 - ], - [ - 2077734, - 5830130 - ], - [ - 2077741, - 5830140 - ], - [ - 2077748, - 5830150 - ], - [ - 2077755, - 5830161 - ], - [ - 2077762, - 5830172 - ], - [ - 2077768, - 5830181 - ], - [ - 2077776, - 5830192 - ], - [ - 2077782, - 5830203 - ], - [ - 2077789, - 5830213 - ], - [ - 2077796, - 5830223 - ], - [ - 2077803, - 5830234 - ], - [ - 2077810, - 5830245 - ], - [ - 2077817, - 5830255 - ], - [ - 2077824, - 5830265 - ], - [ - 2077831, - 5830276 - ], - [ - 2077838, - 5830287 - ], - [ - 2077845, - 5830297 - ], - [ - 2077852, - 5830307 - ], - [ - 2077860, - 5830318 - ], - [ - 2077866, - 5830328 - ], - [ - 2077873, - 5830339 - ], - [ - 2077880, - 5830349 - ], - [ - 2077886, - 5830359 - ], - [ - 2077894, - 5830370 - ], - [ - 2077900, - 5830379 - ], - [ - 2077908, - 5830390 - ], - [ - 2077914, - 5830401 - ], - [ - 2077922, - 5830411 - ], - [ - 2077929, - 5830421 - ], - [ - 2077936, - 5830431 - ], - [ - 2077943, - 5830442 - ], - [ - 2077951, - 5830452 - ], - [ - 2077957, - 5830462 - ], - [ - 2077965, - 5830473 - ], - [ - 2077971, - 5830483 - ], - [ - 2077979, - 5830494 - ], - [ - 2077985, - 5830504 - ], - [ - 2077992, - 5830514 - ], - [ - 2077999, - 5830525 - ], - [ - 2078006, - 5830536 - ], - [ - 2078013, - 5830546 - ], - [ - 2078020, - 5830556 - ], - [ - 2078027, - 5830567 - ], - [ - 2078034, - 5830577 - ], - [ - 2078041, - 5830587 - ], - [ - 2078048, - 5830598 - ], - [ - 2078055, - 5830609 - ], - [ - 2078061, - 5830619 - ], - [ - 2078069, - 5830629 - ], - [ - 2078075, - 5830640 - ], - [ - 2078083, - 5830651 - ], - [ - 2078090, - 5830660 - ], - [ - 2078096, - 5830671 - ], - [ - 2078104, - 5830681 - ], - [ - 2078110, - 5830692 - ], - [ - 2078117, - 5830702 - ], - [ - 2078124, - 5830712 - ], - [ - 2078132, - 5830723 - ], - [ - 2078138, - 5830734 - ], - [ - 2078146, - 5830743 - ], - [ - 2078152, - 5830754 - ], - [ - 2078159, - 5830765 - ], - [ - 2078166, - 5830775 - ], - [ - 2078174, - 5830785 - ], - [ - 2078180, - 5830796 - ], - [ - 2078187, - 5830806 - ], - [ - 2078194, - 5830817 - ], - [ - 2078201, - 5830826 - ], - [ - 2078209, - 5830837 - ], - [ - 2078215, - 5830848 - ], - [ - 2078223, - 5830857 - ], - [ - 2078230, - 5830868 - ], - [ - 2078237, - 5830879 - ], - [ - 2078244, - 5830889 - ], - [ - 2078251, - 5830899 - ], - [ - 2078258, - 5830910 - ], - [ - 2078265, - 5830920 - ], - [ - 2078272, - 5830931 - ], - [ - 2078280, - 5830940 - ], - [ - 2078286, - 5830951 - ], - [ - 2078293, - 5830961 - ], - [ - 2078300, - 5830972 - ], - [ - 2078306, - 5830982 - ], - [ - 2078314, - 5830992 - ], - [ - 2078321, - 5831003 - ], - [ - 2078328, - 5831014 - ], - [ - 2078335, - 5831023 - ], - [ - 2078343, - 5831034 - ], - [ - 2078349, - 5831045 - ], - [ - 2078357, - 5831054 - ], - [ - 2078364, - 5831065 - ], - [ - 2078371, - 5831075 - ], - [ - 2078378, - 5831086 - ], - [ - 2078386, - 5831096 - ], - [ - 2078391, - 5831106 - ], - [ - 2078398, - 5831117 - ], - [ - 2078406, - 5831128 - ], - [ - 2078412, - 5831137 - ], - [ - 2078420, - 5831148 - ], - [ - 2078427, - 5831159 - ], - [ - 2078434, - 5831169 - ], - [ - 2078440, - 5831179 - ], - [ - 2078448, - 5831190 - ], - [ - 2078454, - 5831200 - ], - [ - 2078462, - 5831211 - ], - [ - 2078469, - 5831221 - ], - [ - 2078476, - 5831231 - ], - [ - 2078483, - 5831242 - ], - [ - 2078491, - 5831252 - ], - [ - 2078497, - 5831262 - ], - [ - 2078505, - 5831273 - ], - [ - 2078512, - 5831284 - ], - [ - 2078518, - 5831293 - ], - [ - 2078526, - 5831303 - ], - [ - 2078532, - 5831314 - ], - [ - 2078539, - 5831325 - ], - [ - 2078546, - 5831334 - ], - [ - 2078554, - 5831345 - ], - [ - 2078560, - 5831356 - ], - [ - 2078568, - 5831366 - ], - [ - 2078575, - 5831376 - ], - [ - 2078582, - 5831387 - ], - [ - 2078589, - 5831397 - ], - [ - 2078596, - 5831408 - ], - [ - 2078603, - 5831417 - ], - [ - 2078610, - 5831428 - ], - [ - 2078617, - 5831438 - ], - [ - 2078623, - 5831449 - ], - [ - 2078631, - 5831459 - ], - [ - 2078638, - 5831469 - ], - [ - 2078645, - 5831480 - ], - [ - 2078652, - 5831490 - ], - [ - 2078659, - 5831500 - ], - [ - 2078665, - 5831511 - ], - [ - 2078673, - 5831522 - ], - [ - 2078680, - 5831531 - ], - [ - 2078687, - 5831542 - ], - [ - 2078694, - 5831553 - ], - [ - 2078702, - 5831563 - ], - [ - 2078708, - 5831573 - ], - [ - 2078715, - 5831584 - ], - [ - 2078722, - 5831594 - ], - [ - 2078729, - 5831605 - ], - [ - 2078736, - 5831614 - ], - [ - 2078743, - 5831625 - ], - [ - 2078750, - 5831636 - ], - [ - 2078757, - 5831647 - ], - [ - 2078765, - 5831656 - ], - [ - 2078771, - 5831667 - ], - [ - 2078779, - 5831678 - ], - [ - 2078785, - 5831687 - ], - [ - 2078793, - 5831698 - ], - [ - 2078799, - 5831708 - ], - [ - 2078807, - 5831719 - ], - [ - 2078813, - 5831729 - ], - [ - 2078820, - 5831739 - ], - [ - 2078828, - 5831750 - ], - [ - 2078834, - 5831760 - ], - [ - 2078842, - 5831770 - ], - [ - 2078849, - 5831781 - ], - [ - 2078856, - 5831791 - ], - [ - 2078863, - 5831802 - ], - [ - 2078870, - 5831811 - ], - [ - 2078876, - 5831822 - ], - [ - 2078884, - 5831833 - ], - [ - 2078891, - 5831843 - ], - [ - 2078898, - 5831853 - ], - [ - 2078905, - 5831864 - ], - [ - 2078912, - 5831874 - ], - [ - 2078919, - 5831884 - ], - [ - 2078926, - 5831894 - ], - [ - 2078934, - 5831905 - ], - [ - 2078940, - 5831915 - ], - [ - 2078948, - 5831925 - ], - [ - 2078955, - 5831936 - ], - [ - 2078962, - 5831946 - ], - [ - 2078969, - 5831957 - ], - [ - 2078977, - 5831966 - ], - [ - 2078983, - 5831977 - ], - [ - 2078991, - 5831988 - ], - [ - 2078998, - 5831998 - ], - [ - 2079004, - 5832008 - ], - [ - 2079011, - 5832019 - ], - [ - 2079018, - 5832029 - ], - [ - 2079025, - 5832040 - ], - [ - 2079032, - 5832050 - ], - [ - 2079039, - 5832060 - ], - [ - 2079045, - 5832071 - ], - [ - 2079053, - 5832081 - ], - [ - 2079060, - 5832091 - ], - [ - 2079067, - 5832102 - ], - [ - 2079074, - 5832113 - ], - [ - 2079081, - 5832122 - ], - [ - 2079086, - 5832134 - ], - [ - 2079094, - 5832144 - ], - [ - 2079101, - 5832155 - ], - [ - 2079108, - 5832165 - ], - [ - 2079115, - 5832176 - ], - [ - 2079122, - 5832186 - ], - [ - 2079128, - 5832197 - ], - [ - 2079135, - 5832207 - ], - [ - 2079143, - 5832217 - ], - [ - 2079149, - 5832228 - ], - [ - 2079157, - 5832239 - ], - [ - 2079164, - 5832248 - ], - [ - 2079171, - 5832259 - ], - [ - 2079178, - 5832270 - ], - [ - 2079186, - 5832280 - ], - [ - 2079192, - 5832290 - ], - [ - 2079199, - 5832300 - ], - [ - 2079206, - 5832311 - ], - [ - 2079213, - 5832322 - ], - [ - 2079220, - 5832331 - ], - [ - 2079228, - 5832342 - ], - [ - 2079234, - 5832353 - ], - [ - 2079241, - 5832362 - ], - [ - 2079249, - 5832373 - ], - [ - 2079255, - 5832383 - ], - [ - 2079263, - 5832394 - ], - [ - 2079270, - 5832403 - ], - [ - 2079277, - 5832414 - ], - [ - 2079284, - 5832425 - ], - [ - 2079292, - 5832435 - ], - [ - 2079297, - 5832445 - ], - [ - 2079305, - 5832456 - ], - [ - 2079312, - 5832466 - ], - [ - 2079319, - 5832477 - ], - [ - 2079326, - 5832486 - ], - [ - 2079333, - 5832497 - ], - [ - 2079340, - 5832508 - ], - [ - 2079347, - 5832518 - ], - [ - 2079355, - 5832528 - ], - [ - 2079361, - 5832538 - ], - [ - 2079369, - 5832549 - ], - [ - 2079376, - 5832558 - ], - [ - 2079383, - 5832569 - ], - [ - 2079390, - 5832580 - ], - [ - 2079398, - 5832590 - ], - [ - 2079403, - 5832600 - ], - [ - 2079411, - 5832611 - ], - [ - 2079418, - 5832621 - ], - [ - 2079425, - 5832632 - ], - [ - 2079432, - 5832642 - ], - [ - 2079439, - 5832652 - ], - [ - 2079445, - 5832663 - ], - [ - 2079452, - 5832674 - ], - [ - 2079460, - 5832683 - ], - [ - 2079466, - 5832694 - ], - [ - 2079474, - 5832704 - ], - [ - 2079481, - 5832715 - ], - [ - 2079487, - 5832725 - ], - [ - 2079494, - 5832736 - ], - [ - 2079502, - 5832746 - ], - [ - 2079508, - 5832757 - ], - [ - 2079516, - 5832767 - ], - [ - 2079523, - 5832777 - ], - [ - 2079529, - 5832788 - ], - [ - 2079536, - 5832797 - ], - [ - 2079543, - 5832808 - ], - [ - 2079550, - 5832819 - ], - [ - 2079557, - 5832829 - ], - [ - 2079565, - 5832839 - ], - [ - 2079570, - 5832850 - ], - [ - 2079578, - 5832861 - ], - [ - 2079585, - 5832871 - ], - [ - 2079592, - 5832881 - ], - [ - 2079599, - 5832892 - ], - [ - 2079607, - 5832902 - ], - [ - 2079612, - 5832913 - ], - [ - 2079620, - 5832923 - ], - [ - 2079627, - 5832933 - ], - [ - 2079634, - 5832944 - ], - [ - 2079641, - 5832955 - ], - [ - 2079648, - 5832964 - ], - [ - 2079655, - 5832975 - ], - [ - 2079662, - 5832986 - ], - [ - 2079670, - 5832995 - ], - [ - 2079676, - 5833006 - ], - [ - 2079684, - 5833016 - ], - [ - 2079691, - 5833027 - ], - [ - 2079698, - 5833037 - ], - [ - 2079705, - 5833047 - ], - [ - 2079713, - 5833058 - ], - [ - 2079718, - 5833069 - ], - [ - 2079726, - 5833078 - ], - [ - 2079733, - 5833089 - ], - [ - 2079739, - 5833100 - ], - [ - 2079747, - 5833110 - ], - [ - 2079754, - 5833119 - ], - [ - 2079760, - 5833130 - ], - [ - 2079767, - 5833141 - ], - [ - 2079775, - 5833151 - ], - [ - 2079781, - 5833161 - ], - [ - 2079789, - 5833172 - ], - [ - 2079796, - 5833182 - ], - [ - 2079802, - 5833194 - ], - [ - 2079809, - 5833203 - ], - [ - 2079817, - 5833214 - ], - [ - 2079822, - 5833225 - ], - [ - 2079830, - 5833236 - ], - [ - 2079837, - 5833245 - ], - [ - 2079843, - 5833257 - ], - [ - 2079850, - 5833267 - ], - [ - 2079857, - 5833277 - ], - [ - 2079864, - 5833288 - ], - [ - 2079871, - 5833298 - ], - [ - 2079879, - 5833308 - ], - [ - 2079884, - 5833320 - ], - [ - 2079892, - 5833329 - ], - [ - 2079900, - 5833339 - ], - [ - 2079906, - 5833350 - ], - [ - 2079913, - 5833360 - ], - [ - 2079921, - 5833370 - ], - [ - 2079928, - 5833381 - ], - [ - 2079936, - 5833391 - ], - [ - 2079943, - 5833401 - ], - [ - 2079950, - 5833412 - ], - [ - 2079957, - 5833422 - ], - [ - 2079964, - 5833432 - ], - [ - 2079971, - 5833442 - ], - [ - 2079978, - 5833453 - ], - [ - 2079986, - 5833463 - ], - [ - 2079991, - 5833474 - ], - [ - 2080000, - 5833483 - ], - [ - 2080007, - 5833494 - ], - [ - 2080013, - 5833505 - ], - [ - 2080021, - 5833514 - ], - [ - 2080029, - 5833524 - ], - [ - 2080034, - 5833536 - ], - [ - 2080043, - 5833546 - ], - [ - 2080050, - 5833555 - ], - [ - 2080056, - 5833567 - ], - [ - 2080063, - 5833577 - ], - [ - 2080070, - 5833587 - ], - [ - 2080076, - 5833597 - ], - [ - 2080083, - 5833608 - ], - [ - 2080091, - 5833618 - ], - [ - 2080096, - 5833630 - ], - [ - 2080104, - 5833639 - ], - [ - 2080111, - 5833649 - ], - [ - 2080118, - 5833661 - ], - [ - 2080125, - 5833671 - ], - [ - 2080133, - 5833680 - ], - [ - 2080139, - 5833691 - ], - [ - 2080147, - 5833702 - ], - [ - 2080154, - 5833711 - ], - [ - 2080160, - 5833722 - ], - [ - 2080168, - 5833733 - ], - [ - 2080176, - 5833743 - ], - [ - 2080182, - 5833753 - ], - [ - 2080189, - 5833763 - ], - [ - 2080197, - 5833774 - ], - [ - 2080202, - 5833785 - ], - [ - 2080211, - 5833794 - ], - [ - 2080218, - 5833805 - ], - [ - 2080224, - 5833816 - ], - [ - 2080231, - 5833826 - ], - [ - 2080240, - 5833835 - ], - [ - 2080245, - 5833846 - ], - [ - 2080254, - 5833857 - ], - [ - 2080261, - 5833866 - ], - [ - 2080267, - 5833877 - ], - [ - 2080275, - 5833887 - ], - [ - 2080282, - 5833897 - ], - [ - 2080289, - 5833907 - ], - [ - 2080296, - 5833918 - ], - [ - 2080304, - 5833928 - ], - [ - 2080309, - 5833939 - ], - [ - 2080318, - 5833949 - ], - [ - 2080325, - 5833959 - ], - [ - 2080331, - 5833970 - ], - [ - 2080339, - 5833980 - ], - [ - 2080347, - 5833990 - ], - [ - 2080352, - 5834001 - ], - [ - 2080359, - 5834011 - ], - [ - 2080368, - 5834021 - ], - [ - 2080373, - 5834032 - ], - [ - 2080381, - 5834043 - ], - [ - 2080388, - 5834053 - ], - [ - 2080394, - 5834063 - ], - [ - 2080401, - 5834074 - ], - [ - 2080410, - 5834084 - ], - [ - 2080415, - 5834095 - ], - [ - 2080423, - 5834105 - ], - [ - 2080430, - 5834115 - ], - [ - 2080437, - 5834126 - ], - [ - 2080444, - 5834136 - ], - [ - 2080452, - 5834146 - ], - [ - 2080458, - 5834157 - ], - [ - 2080465, - 5834167 - ], - [ - 2080473, - 5834177 - ], - [ - 2080479, - 5834187 - ], - [ - 2080487, - 5834198 - ], - [ - 2080494, - 5834208 - ], - [ - 2080501, - 5834219 - ], - [ - 2080508, - 5834229 - ], - [ - 2080516, - 5834239 - ], - [ - 2080521, - 5834250 - ], - [ - 2080529, - 5834260 - ], - [ - 2080536, - 5834270 - ], - [ - 2080543, - 5834281 - ], - [ - 2080550, - 5834291 - ], - [ - 2080558, - 5834301 - ], - [ - 2080564, - 5834311 - ], - [ - 2080571, - 5834322 - ], - [ - 2080579, - 5834332 - ], - [ - 2080585, - 5834342 - ], - [ - 2080593, - 5834353 - ], - [ - 2080600, - 5834363 - ], - [ - 2080607, - 5834374 - ], - [ - 2080614, - 5834383 - ], - [ - 2080622, - 5834394 - ], - [ - 2080628, - 5834405 - ], - [ - 2080636, - 5834414 - ], - [ - 2080643, - 5834424 - ], - [ - 2080650, - 5834435 - ], - [ - 2080657, - 5834446 - ], - [ - 2080664, - 5834455 - ], - [ - 2080671, - 5834466 - ], - [ - 2080678, - 5834476 - ], - [ - 2080686, - 5834487 - ], - [ - 2080691, - 5834497 - ], - [ - 2080700, - 5834507 - ], - [ - 2080707, - 5834518 - ], - [ - 2080713, - 5834529 - ], - [ - 2080720, - 5834538 - ], - [ - 2080728, - 5834549 - ], - [ - 2080733, - 5834560 - ], - [ - 2080741, - 5834570 - ], - [ - 2080748, - 5834580 - ], - [ - 2080755, - 5834591 - ], - [ - 2080762, - 5834601 - ], - [ - 2080769, - 5834611 - ], - [ - 2080775, - 5834622 - ], - [ - 2080782, - 5834633 - ], - [ - 2080790, - 5834643 - ], - [ - 2080796, - 5834654 - ], - [ - 2080804, - 5834664 - ], - [ - 2080811, - 5834674 - ], - [ - 2080817, - 5834686 - ], - [ - 2080824, - 5834695 - ], - [ - 2080832, - 5834706 - ], - [ - 2080837, - 5834717 - ], - [ - 2080845, - 5834727 - ], - [ - 2080852, - 5834737 - ], - [ - 2080859, - 5834748 - ], - [ - 2080866, - 5834758 - ], - [ - 2080873, - 5834768 - ], - [ - 2080880, - 5834778 - ], - [ - 2080887, - 5834789 - ], - [ - 2080895, - 5834799 - ], - [ - 2080901, - 5834810 - ], - [ - 2080909, - 5834820 - ], - [ - 2080916, - 5834830 - ], - [ - 2080923, - 5834841 - ], - [ - 2080930, - 5834851 - ], - [ - 2080938, - 5834860 - ], - [ - 2080945, - 5834871 - ], - [ - 2080953, - 5834881 - ], - [ - 2080960, - 5834891 - ], - [ - 2080967, - 5834901 - ], - [ - 2080975, - 5834911 - ], - [ - 2080982, - 5834921 - ], - [ - 2080990, - 5834931 - ], - [ - 2080997, - 5834942 - ], - [ - 2081005, - 5834952 - ], - [ - 2081011, - 5834962 - ], - [ - 2081019, - 5834972 - ], - [ - 2081026, - 5834982 - ], - [ - 2081033, - 5834994 - ], - [ - 2081041, - 5835003 - ], - [ - 2081048, - 5835013 - ], - [ - 2081054, - 5835024 - ], - [ - 2081061, - 5835034 - ], - [ - 2081069, - 5835044 - ], - [ - 2081074, - 5835055 - ], - [ - 2081083, - 5835065 - ], - [ - 2081090, - 5835075 - ], - [ - 2081096, - 5835086 - ], - [ - 2081104, - 5835096 - ], - [ - 2081112, - 5835106 - ], - [ - 2081118, - 5835116 - ], - [ - 2081126, - 5835127 - ], - [ - 2081133, - 5835137 - ], - [ - 2081140, - 5835148 - ], - [ - 2081147, - 5835157 - ], - [ - 2081154, - 5835168 - ], - [ - 2081161, - 5835178 - ], - [ - 2081168, - 5835189 - ], - [ - 2081176, - 5835198 - ], - [ - 2081182, - 5835209 - ], - [ - 2081191, - 5835219 - ], - [ - 2081198, - 5835229 - ], - [ - 2081205, - 5835239 - ], - [ - 2081212, - 5835250 - ], - [ - 2081220, - 5835260 - ], - [ - 2081226, - 5835270 - ], - [ - 2081233, - 5835280 - ], - [ - 2081242, - 5835290 - ], - [ - 2081248, - 5835301 - ], - [ - 2081256, - 5835311 - ], - [ - 2081263, - 5835321 - ], - [ - 2081270, - 5835331 - ], - [ - 2081277, - 5835341 - ], - [ - 2081285, - 5835351 - ], - [ - 2081291, - 5835362 - ], - [ - 2081299, - 5835373 - ], - [ - 2081306, - 5835382 - ], - [ - 2081313, - 5835393 - ], - [ - 2081320, - 5835404 - ], - [ - 2081327, - 5835414 - ], - [ - 2081334, - 5835424 - ], - [ - 2081341, - 5835434 - ], - [ - 2081349, - 5835445 - ], - [ - 2081355, - 5835456 - ], - [ - 2081363, - 5835465 - ], - [ - 2081370, - 5835476 - ], - [ - 2081376, - 5835487 - ], - [ - 2081383, - 5835497 - ], - [ - 2081391, - 5835506 - ], - [ - 2081397, - 5835518 - ], - [ - 2081405, - 5835528 - ], - [ - 2081412, - 5835538 - ], - [ - 2081419, - 5835548 - ], - [ - 2081426, - 5835559 - ], - [ - 2081433, - 5835569 - ], - [ - 2081439, - 5835579 - ], - [ - 2081446, - 5835590 - ], - [ - 2081454, - 5835600 - ], - [ - 2081460, - 5835611 - ], - [ - 2081468, - 5835621 - ], - [ - 2081475, - 5835631 - ], - [ - 2081484, - 5835641 - ], - [ - 2081491, - 5835652 - ], - [ - 2081499, - 5835661 - ], - [ - 2081507, - 5835670 - ], - [ - 2081515, - 5835681 - ], - [ - 2081522, - 5835690 - ], - [ - 2081530, - 5835700 - ], - [ - 2081538, - 5835710 - ], - [ - 2081545, - 5835719 - ], - [ - 2081555, - 5835729 - ], - [ - 2081562, - 5835739 - ], - [ - 2081570, - 5835749 - ], - [ - 2081578, - 5835758 - ], - [ - 2081586, - 5835768 - ], - [ - 2081594, - 5835779 - ], - [ - 2081602, - 5835787 - ], - [ - 2081610, - 5835798 - ], - [ - 2081617, - 5835808 - ], - [ - 2081626, - 5835816 - ], - [ - 2081633, - 5835827 - ], - [ - 2081642, - 5835837 - ], - [ - 2081649, - 5835846 - ], - [ - 2081656, - 5835856 - ], - [ - 2081664, - 5835867 - ], - [ - 2081671, - 5835877 - ], - [ - 2081679, - 5835886 - ], - [ - 2081687, - 5835897 - ], - [ - 2081695, - 5835906 - ], - [ - 2081702, - 5835916 - ], - [ - 2081710, - 5835926 - ], - [ - 2081718, - 5835936 - ], - [ - 2081726, - 5835946 - ], - [ - 2081733, - 5835956 - ], - [ - 2081741, - 5835966 - ], - [ - 2081749, - 5835976 - ], - [ - 2081756, - 5835986 - ], - [ - 2081764, - 5835996 - ], - [ - 2081771, - 5836006 - ], - [ - 2081779, - 5836017 - ], - [ - 2081786, - 5836026 - ], - [ - 2081794, - 5836037 - ], - [ - 2081801, - 5836047 - ], - [ - 2081809, - 5836057 - ], - [ - 2081815, - 5836067 - ], - [ - 2081822, - 5836078 - ], - [ - 2081831, - 5836088 - ], - [ - 2081837, - 5836097 - ], - [ - 2081845, - 5836108 - ], - [ - 2081852, - 5836118 - ], - [ - 2081860, - 5836129 - ], - [ - 2081866, - 5836138 - ], - [ - 2081874, - 5836149 - ], - [ - 2081881, - 5836159 - ], - [ - 2081889, - 5836169 - ], - [ - 2081895, - 5836179 - ], - [ - 2081903, - 5836190 - ], - [ - 2081910, - 5836201 - ], - [ - 2081916, - 5836210 - ], - [ - 2081924, - 5836221 - ], - [ - 2081930, - 5836232 - ], - [ - 2081937, - 5836242 - ], - [ - 2081944, - 5836252 - ], - [ - 2081951, - 5836263 - ], - [ - 2081957, - 5836274 - ], - [ - 2081965, - 5836285 - ], - [ - 2081971, - 5836295 - ], - [ - 2081978, - 5836305 - ], - [ - 2081985, - 5836316 - ], - [ - 2081992, - 5836327 - ], - [ - 2081999, - 5836336 - ], - [ - 2082006, - 5836347 - ], - [ - 2082012, - 5836358 - ], - [ - 2082020, - 5836369 - ], - [ - 2082026, - 5836379 - ], - [ - 2082032, - 5836390 - ], - [ - 2082040, - 5836400 - ], - [ - 2082046, - 5836411 - ], - [ - 2082053, - 5836421 - ], - [ - 2082060, - 5836431 - ], - [ - 2082067, - 5836443 - ], - [ - 2082073, - 5836454 - ], - [ - 2082081, - 5836463 - ], - [ - 2082087, - 5836474 - ], - [ - 2082094, - 5836485 - ], - [ - 2082101, - 5836495 - ], - [ - 2082108, - 5836505 - ], - [ - 2082114, - 5836516 - ], - [ - 2082122, - 5836526 - ], - [ - 2082127, - 5836538 - ], - [ - 2082134, - 5836548 - ], - [ - 2082142, - 5836558 - ], - [ - 2082148, - 5836569 - ], - [ - 2082154, - 5836580 - ], - [ - 2082161, - 5836589 - ], - [ - 2082168, - 5836600 - ], - [ - 2082174, - 5836611 - ], - [ - 2082182, - 5836622 - ], - [ - 2082188, - 5836632 - ], - [ - 2082195, - 5836643 - ], - [ - 2082202, - 5836653 - ], - [ - 2082209, - 5836665 - ], - [ - 2082215, - 5836675 - ], - [ - 2082223, - 5836685 - ], - [ - 2082228, - 5836696 - ], - [ - 2082235, - 5836708 - ], - [ - 2082242, - 5836717 - ], - [ - 2082249, - 5836728 - ], - [ - 2082255, - 5836739 - ], - [ - 2082263, - 5836749 - ], - [ - 2082268, - 5836760 - ], - [ - 2082275, - 5836771 - ], - [ - 2082282, - 5836781 - ], - [ - 2082288, - 5836792 - ], - [ - 2082294, - 5836803 - ], - [ - 2082302, - 5836812 - ], - [ - 2082308, - 5836824 - ], - [ - 2082314, - 5836835 - ], - [ - 2082323, - 5836843 - ], - [ - 2082329, - 5836854 - ], - [ - 2082335, - 5836866 - ], - [ - 2082344, - 5836875 - ], - [ - 2082350, - 5836885 - ], - [ - 2082356, - 5836896 - ], - [ - 2082366, - 5836906 - ], - [ - 2082371, - 5836917 - ], - [ - 2082378, - 5836927 - ], - [ - 2082387, - 5836936 - ], - [ - 2082393, - 5836948 - ], - [ - 2082399, - 5836959 - ], - [ - 2082408, - 5836967 - ], - [ - 2082415, - 5836978 - ], - [ - 2082420, - 5836990 - ], - [ - 2082430, - 5836998 - ], - [ - 2082436, - 5837009 - ], - [ - 2082442, - 5837020 - ], - [ - 2082451, - 5837030 - ], - [ - 2082457, - 5837040 - ], - [ - 2082463, - 5837051 - ], - [ - 2082472, - 5837061 - ], - [ - 2082478, - 5837072 - ], - [ - 2082483, - 5837082 - ], - [ - 2082492, - 5837092 - ], - [ - 2082498, - 5837103 - ], - [ - 2082505, - 5837115 - ], - [ - 2082512, - 5837123 - ], - [ - 2082519, - 5837134 - ], - [ - 2082525, - 5837146 - ], - [ - 2082534, - 5837155 - ], - [ - 2082540, - 5837166 - ], - [ - 2082546, - 5837177 - ], - [ - 2082555, - 5837186 - ], - [ - 2082561, - 5837197 - ], - [ - 2082567, - 5837208 - ], - [ - 2082577, - 5837217 - ], - [ - 2082582, - 5837228 - ], - [ - 2082589, - 5837240 - ], - [ - 2082597, - 5837248 - ], - [ - 2082603, - 5837259 - ], - [ - 2082609, - 5837270 - ], - [ - 2082618, - 5837279 - ], - [ - 2082624, - 5837290 - ], - [ - 2082630, - 5837301 - ], - [ - 2082639, - 5837311 - ], - [ - 2082645, - 5837321 - ], - [ - 2082651, - 5837332 - ], - [ - 2082659, - 5837342 - ], - [ - 2082666, - 5837353 - ], - [ - 2082672, - 5837364 - ], - [ - 2082681, - 5837373 - ], - [ - 2082687, - 5837384 - ], - [ - 2082693, - 5837395 - ], - [ - 2082701, - 5837404 - ], - [ - 2082707, - 5837415 - ], - [ - 2082714, - 5837427 - ], - [ - 2082722, - 5837436 - ], - [ - 2082728, - 5837446 - ], - [ - 2082734, - 5837458 - ], - [ - 2082743, - 5837467 - ], - [ - 2082749, - 5837479 - ], - [ - 2082755, - 5837489 - ], - [ - 2082764, - 5837499 - ], - [ - 2082770, - 5837510 - ], - [ - 2082776, - 5837521 - ], - [ - 2082785, - 5837530 - ], - [ - 2082791, - 5837541 - ], - [ - 2082797, - 5837552 - ], - [ - 2082806, - 5837561 - ], - [ - 2082811, - 5837572 - ], - [ - 2082818, - 5837583 - ], - [ - 2082826, - 5837592 - ], - [ - 2082833, - 5837603 - ], - [ - 2082838, - 5837614 - ], - [ - 2082848, - 5837623 - ], - [ - 2082854, - 5837634 - ], - [ - 2082860, - 5837644 - ], - [ - 2082869, - 5837654 - ], - [ - 2082876, - 5837665 - ], - [ - 2082881, - 5837676 - ], - [ - 2082891, - 5837685 - ], - [ - 2082897, - 5837696 - ], - [ - 2082903, - 5837707 - ], - [ - 2082912, - 5837716 - ], - [ - 2082917, - 5837727 - ], - [ - 2082924, - 5837738 - ], - [ - 2082932, - 5837748 - ], - [ - 2082939, - 5837759 - ], - [ - 2082944, - 5837769 - ], - [ - 2082954, - 5837778 - ], - [ - 2082959, - 5837789 - ], - [ - 2082966, - 5837801 - ], - [ - 2082974, - 5837810 - ], - [ - 2082981, - 5837821 - ], - [ - 2082986, - 5837832 - ], - [ - 2082995, - 5837841 - ], - [ - 2083001, - 5837852 - ], - [ - 2083007, - 5837863 - ], - [ - 2083015, - 5837873 - ], - [ - 2083021, - 5837884 - ], - [ - 2083027, - 5837895 - ], - [ - 2083036, - 5837904 - ], - [ - 2083042, - 5837916 - ], - [ - 2083048, - 5837926 - ], - [ - 2083057, - 5837935 - ], - [ - 2083063, - 5837947 - ], - [ - 2083069, - 5837958 - ], - [ - 2083078, - 5837966 - ], - [ - 2083085, - 5837978 - ], - [ - 2083090, - 5837989 - ], - [ - 2083099, - 5837998 - ], - [ - 2083105, - 5838008 - ], - [ - 2083111, - 5838020 - ], - [ - 2083119, - 5838029 - ], - [ - 2083125, - 5838041 - ], - [ - 2083132, - 5838051 - ], - [ - 2083140, - 5838061 - ], - [ - 2083147, - 5838072 - ], - [ - 2083153, - 5838083 - ], - [ - 2083162, - 5838091 - ], - [ - 2083168, - 5838103 - ], - [ - 2083174, - 5838114 - ], - [ - 2083183, - 5838122 - ], - [ - 2083190, - 5838133 - ], - [ - 2083195, - 5838145 - ], - [ - 2083205, - 5838154 - ], - [ - 2083210, - 5838164 - ], - [ - 2083217, - 5838175 - ], - [ - 2083225, - 5838185 - ], - [ - 2083231, - 5838196 - ], - [ - 2083237, - 5838206 - ], - [ - 2083246, - 5838216 - ], - [ - 2083252, - 5838227 - ], - [ - 2083258, - 5838239 - ], - [ - 2083267, - 5838247 - ], - [ - 2083272, - 5838258 - ], - [ - 2083279, - 5838270 - ], - [ - 2083287, - 5838279 - ], - [ - 2083293, - 5838289 - ], - [ - 2083299, - 5838301 - ], - [ - 2083308, - 5838310 - ], - [ - 2083314, - 5838321 - ], - [ - 2083320, - 5838332 - ], - [ - 2083329, - 5838341 - ], - [ - 2083335, - 5838353 - ], - [ - 2083341, - 5838364 - ], - [ - 2083349, - 5838372 - ], - [ - 2083356, - 5838384 - ], - [ - 2083361, - 5838395 - ], - [ - 2083371, - 5838404 - ], - [ - 2083376, - 5838415 - ], - [ - 2083383, - 5838426 - ], - [ - 2083391, - 5838436 - ], - [ - 2083397, - 5838447 - ], - [ - 2083403, - 5838457 - ], - [ - 2083413, - 5838466 - ], - [ - 2083419, - 5838478 - ], - [ - 2083425, - 5838489 - ], - [ - 2083433, - 5838497 - ], - [ - 2083439, - 5838509 - ], - [ - 2083446, - 5838520 - ], - [ - 2083454, - 5838528 - ], - [ - 2083460, - 5838540 - ], - [ - 2083466, - 5838551 - ], - [ - 2083475, - 5838561 - ], - [ - 2083480, - 5838571 - ], - [ - 2083487, - 5838582 - ], - [ - 2083495, - 5838592 - ], - [ - 2083502, - 5838603 - ], - [ - 2083507, - 5838613 - ], - [ - 2083517, - 5838623 - ], - [ - 2083522, - 5838634 - ], - [ - 2083529, - 5838645 - ], - [ - 2083538, - 5838654 - ], - [ - 2083543, - 5838665 - ], - [ - 2083550, - 5838676 - ], - [ - 2083558, - 5838686 - ], - [ - 2083565, - 5838696 - ], - [ - 2083570, - 5838708 - ], - [ - 2083579, - 5838717 - ], - [ - 2083585, - 5838728 - ], - [ - 2083592, - 5838739 - ], - [ - 2083600, - 5838748 - ], - [ - 2083607, - 5838759 - ], - [ - 2083612, - 5838771 - ], - [ - 2083622, - 5838779 - ], - [ - 2083627, - 5838790 - ], - [ - 2083634, - 5838802 - ], - [ - 2083643, - 5838810 - ], - [ - 2083648, - 5838821 - ], - [ - 2083655, - 5838832 - ], - [ - 2083664, - 5838841 - ], - [ - 2083671, - 5838852 - ], - [ - 2083676, - 5838863 - ], - [ - 2083686, - 5838872 - ], - [ - 2083691, - 5838883 - ], - [ - 2083698, - 5838894 - ], - [ - 2083706, - 5838903 - ], - [ - 2083713, - 5838915 - ], - [ - 2083718, - 5838926 - ], - [ - 2083727, - 5838934 - ], - [ - 2083732, - 5838946 - ], - [ - 2083739, - 5838957 - ], - [ - 2083747, - 5838967 - ], - [ - 2083753, - 5838977 - ], - [ - 2083760, - 5838988 - ], - [ - 2083768, - 5838997 - ], - [ - 2083775, - 5839008 - ], - [ - 2083781, - 5839019 - ], - [ - 2083791, - 5839028 - ], - [ - 2083796, - 5839039 - ], - [ - 2083803, - 5839049 - ], - [ - 2083812, - 5839059 - ], - [ - 2083818, - 5839070 - ], - [ - 2083824, - 5839081 - ], - [ - 2083834, - 5839089 - ], - [ - 2083839, - 5839101 - ], - [ - 2083846, - 5839112 - ], - [ - 2083854, - 5839121 - ], - [ - 2083860, - 5839131 - ], - [ - 2083867, - 5839143 - ], - [ - 2083875, - 5839152 - ], - [ - 2083882, - 5839162 - ], - [ - 2083888, - 5839174 - ], - [ - 2083897, - 5839183 - ], - [ - 2083903, - 5839194 - ], - [ - 2083909, - 5839205 - ], - [ - 2083918, - 5839214 - ], - [ - 2083925, - 5839225 - ], - [ - 2083930, - 5839236 - ], - [ - 2083939, - 5839244 - ], - [ - 2083946, - 5839255 - ], - [ - 2083951, - 5839267 - ], - [ - 2083961, - 5839276 - ], - [ - 2083967, - 5839286 - ], - [ - 2083973, - 5839297 - ], - [ - 2083981, - 5839307 - ], - [ - 2083988, - 5839318 - ], - [ - 2083994, - 5839328 - ], - [ - 2084003, - 5839338 - ], - [ - 2084009, - 5839349 - ], - [ - 2084015, - 5839360 - ], - [ - 2084024, - 5839369 - ], - [ - 2084030, - 5839380 - ], - [ - 2084036, - 5839391 - ], - [ - 2084045, - 5839399 - ], - [ - 2084051, - 5839411 - ], - [ - 2084057, - 5839422 - ], - [ - 2084067, - 5839431 - ], - [ - 2084073, - 5839441 - ], - [ - 2084079, - 5839453 - ], - [ - 2084088, - 5839462 - ], - [ - 2084094, - 5839473 - ], - [ - 2084100, - 5839483 - ], - [ - 2084109, - 5839493 - ], - [ - 2084115, - 5839504 - ], - [ - 2084122, - 5839515 - ], - [ - 2084130, - 5839524 - ], - [ - 2084137, - 5839535 - ], - [ - 2084142, - 5839546 - ], - [ - 2084151, - 5839555 - ], - [ - 2084157, - 5839566 - ], - [ - 2084163, - 5839577 - ], - [ - 2084173, - 5839586 - ], - [ - 2084179, - 5839596 - ], - [ - 2084185, - 5839607 - ], - [ - 2084194, - 5839616 - ], - [ - 2084201, - 5839628 - ], - [ - 2084207, - 5839638 - ], - [ - 2084217, - 5839647 - ], - [ - 2084223, - 5839658 - ], - [ - 2084230, - 5839669 - ], - [ - 2084238, - 5839677 - ], - [ - 2084244, - 5839689 - ], - [ - 2084250, - 5839700 - ], - [ - 2084259, - 5839708 - ], - [ - 2084266, - 5839719 - ], - [ - 2084272, - 5839730 - ], - [ - 2084281, - 5839740 - ], - [ - 2084286, - 5839750 - ], - [ - 2084293, - 5839762 - ], - [ - 2084302, - 5839772 - ], - [ - 2084308, - 5839783 - ], - [ - 2084314, - 5839793 - ], - [ - 2084323, - 5839803 - ], - [ - 2084329, - 5839814 - ], - [ - 2084335, - 5839825 - ], - [ - 2084343, - 5839834 - ], - [ - 2084349, - 5839845 - ], - [ - 2084355, - 5839856 - ], - [ - 2084364, - 5839866 - ], - [ - 2084371, - 5839876 - ], - [ - 2084376, - 5839887 - ], - [ - 2084386, - 5839896 - ], - [ - 2084391, - 5839908 - ], - [ - 2084398, - 5839918 - ], - [ - 2084406, - 5839927 - ], - [ - 2084413, - 5839939 - ], - [ - 2084418, - 5839950 - ], - [ - 2084428, - 5839958 - ], - [ - 2084434, - 5839970 - ], - [ - 2084440, - 5839981 - ], - [ - 2084449, - 5839989 - ], - [ - 2084455, - 5840000 - ], - [ - 2084462, - 5840011 - ], - [ - 2084470, - 5840020 - ], - [ - 2084477, - 5840031 - ], - [ - 2084483, - 5840042 - ], - [ - 2084492, - 5840051 - ], - [ - 2084498, - 5840062 - ], - [ - 2084505, - 5840073 - ], - [ - 2084513, - 5840082 - ], - [ - 2084520, - 5840093 - ], - [ - 2084526, - 5840104 - ], - [ - 2084535, - 5840113 - ], - [ - 2084541, - 5840124 - ], - [ - 2084547, - 5840135 - ], - [ - 2084557, - 5840144 - ], - [ - 2084562, - 5840155 - ], - [ - 2084569, - 5840166 - ], - [ - 2084578, - 5840175 - ], - [ - 2084585, - 5840185 - ], - [ - 2084590, - 5840197 - ], - [ - 2084600, - 5840206 - ], - [ - 2084605, - 5840217 - ], - [ - 2084612, - 5840227 - ], - [ - 2084621, - 5840237 - ], - [ - 2084627, - 5840248 - ], - [ - 2084633, - 5840259 - ], - [ - 2084641, - 5840267 - ], - [ - 2084647, - 5840279 - ], - [ - 2084653, - 5840290 - ], - [ - 2084662, - 5840299 - ], - [ - 2084668, - 5840310 - ], - [ - 2084674, - 5840321 - ], - [ - 2084683, - 5840331 - ], - [ - 2084690, - 5840341 - ], - [ - 2084695, - 5840352 - ], - [ - 2084705, - 5840361 - ], - [ - 2084710, - 5840373 - ], - [ - 2084717, - 5840383 - ], - [ - 2084725, - 5840392 - ], - [ - 2084732, - 5840403 - ], - [ - 2084737, - 5840415 - ], - [ - 2084746, - 5840423 - ], - [ - 2084753, - 5840434 - ], - [ - 2084758, - 5840446 - ], - [ - 2084768, - 5840455 - ], - [ - 2084773, - 5840466 - ], - [ - 2084780, - 5840477 - ], - [ - 2084788, - 5840486 - ], - [ - 2084795, - 5840498 - ], - [ - 2084800, - 5840508 - ], - [ - 2084810, - 5840517 - ], - [ - 2084815, - 5840529 - ], - [ - 2084822, - 5840540 - ], - [ - 2084830, - 5840549 - ], - [ - 2084837, - 5840560 - ], - [ - 2084842, - 5840571 - ], - [ - 2084851, - 5840579 - ], - [ - 2084858, - 5840591 - ], - [ - 2084863, - 5840602 - ], - [ - 2084873, - 5840612 - ], - [ - 2084878, - 5840622 - ], - [ - 2084885, - 5840633 - ], - [ - 2084893, - 5840643 - ], - [ - 2084899, - 5840654 - ], - [ - 2084905, - 5840665 - ], - [ - 2084914, - 5840674 - ], - [ - 2084920, - 5840685 - ], - [ - 2084926, - 5840697 - ], - [ - 2084934, - 5840705 - ], - [ - 2084941, - 5840717 - ], - [ - 2084946, - 5840728 - ], - [ - 2084955, - 5840737 - ], - [ - 2084961, - 5840748 - ], - [ - 2084967, - 5840759 - ], - [ - 2084977, - 5840768 - ], - [ - 2084982, - 5840780 - ], - [ - 2084989, - 5840790 - ], - [ - 2084997, - 5840799 - ], - [ - 2085004, - 5840811 - ], - [ - 2085009, - 5840822 - ], - [ - 2085019, - 5840830 - ], - [ - 2085024, - 5840842 - ], - [ - 2085031, - 5840853 - ], - [ - 2085039, - 5840861 - ], - [ - 2085046, - 5840872 - ], - [ - 2085051, - 5840884 - ], - [ - 2085060, - 5840893 - ], - [ - 2085066, - 5840903 - ], - [ - 2085072, - 5840914 - ], - [ - 2085082, - 5840924 - ], - [ - 2085087, - 5840935 - ], - [ - 2085094, - 5840946 - ], - [ - 2085103, - 5840955 - ], - [ - 2085109, - 5840966 - ], - [ - 2085115, - 5840977 - ], - [ - 2085124, - 5840986 - ], - [ - 2085130, - 5840997 - ], - [ - 2085137, - 5841008 - ], - [ - 2085145, - 5841018 - ], - [ - 2085152, - 5841028 - ], - [ - 2085157, - 5841039 - ], - [ - 2085165, - 5841049 - ], - [ - 2085172, - 5841060 - ], - [ - 2085177, - 5841070 - ], - [ - 2085187, - 5841080 - ], - [ - 2085192, - 5841091 - ], - [ - 2085199, - 5841102 - ], - [ - 2085207, - 5841111 - ], - [ - 2085214, - 5841122 - ], - [ - 2085219, - 5841133 - ], - [ - 2085229, - 5841141 - ], - [ - 2085235, - 5841153 - ], - [ - 2085241, - 5841164 - ], - [ - 2085250, - 5841173 - ], - [ - 2085257, - 5841183 - ], - [ - 2085262, - 5841194 - ], - [ - 2085272, - 5841203 - ], - [ - 2085278, - 5841215 - ], - [ - 2085284, - 5841225 - ], - [ - 2085293, - 5841234 - ], - [ - 2085299, - 5841246 - ], - [ - 2085305, - 5841257 - ], - [ - 2085313, - 5841265 - ], - [ - 2085320, - 5841277 - ], - [ - 2085326, - 5841288 - ], - [ - 2085335, - 5841296 - ], - [ - 2085340, - 5841307 - ], - [ - 2085347, - 5841319 - ], - [ - 2085355, - 5841328 - ], - [ - 2085361, - 5841338 - ], - [ - 2085368, - 5841349 - ], - [ - 2085377, - 5841359 - ], - [ - 2085383, - 5841370 - ], - [ - 2085389, - 5841380 - ], - [ - 2085399, - 5841390 - ], - [ - 2085404, - 5841401 - ], - [ - 2085411, - 5841412 - ], - [ - 2085419, - 5841421 - ], - [ - 2085426, - 5841432 - ], - [ - 2085431, - 5841443 - ], - [ - 2085441, - 5841453 - ], - [ - 2085446, - 5841463 - ], - [ - 2085453, - 5841475 - ], - [ - 2085461, - 5841484 - ], - [ - 2085468, - 5841496 - ], - [ - 2085473, - 5841506 - ], - [ - 2085482, - 5841515 - ], - [ - 2085488, - 5841526 - ], - [ - 2085494, - 5841538 - ], - [ - 2085503, - 5841546 - ], - [ - 2085509, - 5841557 - ], - [ - 2085515, - 5841568 - ], - [ - 2085524, - 5841577 - ], - [ - 2085530, - 5841588 - ], - [ - 2085536, - 5841599 - ], - [ - 2085546, - 5841608 - ], - [ - 2085551, - 5841619 - ], - [ - 2085558, - 5841630 - ], - [ - 2085566, - 5841639 - ], - [ - 2085571, - 5841651 - ], - [ - 2085578, - 5841661 - ], - [ - 2085587, - 5841670 - ], - [ - 2085593, - 5841682 - ], - [ - 2085599, - 5841693 - ], - [ - 2085609, - 5841702 - ], - [ - 2085614, - 5841713 - ], - [ - 2085621, - 5841724 - ], - [ - 2085630, - 5841733 - ], - [ - 2085636, - 5841743 - ], - [ - 2085642, - 5841755 - ], - [ - 2085652, - 5841764 - ], - [ - 2085657, - 5841775 - ], - [ - 2085664, - 5841785 - ], - [ - 2085672, - 5841795 - ], - [ - 2085678, - 5841806 - ], - [ - 2085684, - 5841818 - ], - [ - 2085692, - 5841826 - ], - [ - 2085699, - 5841837 - ], - [ - 2085704, - 5841849 - ], - [ - 2085713, - 5841857 - ], - [ - 2085719, - 5841869 - ], - [ - 2085726, - 5841880 - ], - [ - 2085734, - 5841889 - ], - [ - 2085740, - 5841900 - ], - [ - 2085746, - 5841911 - ], - [ - 2085755, - 5841921 - ], - [ - 2085761, - 5841932 - ], - [ - 2085767, - 5841942 - ], - [ - 2085776, - 5841951 - ], - [ - 2085782, - 5841963 - ], - [ - 2085788, - 5841974 - ], - [ - 2085797, - 5841982 - ], - [ - 2085804, - 5841994 - ], - [ - 2085809, - 5842005 - ], - [ - 2085819, - 5842014 - ], - [ - 2085825, - 5842024 - ], - [ - 2085831, - 5842036 - ], - [ - 2085839, - 5842045 - ], - [ - 2085846, - 5842056 - ], - [ - 2085851, - 5842067 - ], - [ - 2085861, - 5842076 - ], - [ - 2085867, - 5842087 - ], - [ - 2085873, - 5842098 - ], - [ - 2085881, - 5842107 - ], - [ - 2085887, - 5842118 - ], - [ - 2085893, - 5842130 - ], - [ - 2085902, - 5842138 - ], - [ - 2085908, - 5842149 - ], - [ - 2085914, - 5842160 - ], - [ - 2085924, - 5842170 - ], - [ - 2085929, - 5842180 - ], - [ - 2085936, - 5842191 - ], - [ - 2085946, - 5842200 - ], - [ - 2085952, - 5842211 - ], - [ - 2085958, - 5842222 - ], - [ - 2085967, - 5842230 - ], - [ - 2085974, - 5842242 - ], - [ - 2085979, - 5842253 - ], - [ - 2085989, - 5842261 - ], - [ - 2085994, - 5842273 - ], - [ - 2086001, - 5842284 - ], - [ - 2086009, - 5842292 - ], - [ - 2086015, - 5842304 - ], - [ - 2086021, - 5842315 - ], - [ - 2086030, - 5842325 - ], - [ - 2086035, - 5842335 - ], - [ - 2086042, - 5842346 - ], - [ - 2086050, - 5842356 - ], - [ - 2086057, - 5842367 - ], - [ - 2086062, - 5842378 - ], - [ - 2086071, - 5842387 - ], - [ - 2086077, - 5842399 - ], - [ - 2086083, - 5842410 - ], - [ - 2086091, - 5842419 - ], - [ - 2086097, - 5842430 - ], - [ - 2086103, - 5842441 - ], - [ - 2086111, - 5842451 - ], - [ - 2086117, - 5842461 - ], - [ - 2086123, - 5842473 - ], - [ - 2086132, - 5842482 - ], - [ - 2086137, - 5842494 - ], - [ - 2086144, - 5842504 - ], - [ - 2086153, - 5842514 - ], - [ - 2086159, - 5842525 - ], - [ - 2086165, - 5842536 - ], - [ - 2086175, - 5842544 - ], - [ - 2086180, - 5842556 - ], - [ - 2086187, - 5842567 - ], - [ - 2086196, - 5842576 - ], - [ - 2086201, - 5842586 - ], - [ - 2086208, - 5842597 - ], - [ - 2086216, - 5842607 - ], - [ - 2086223, - 5842618 - ], - [ - 2086228, - 5842629 - ], - [ - 2086238, - 5842638 - ], - [ - 2086243, - 5842649 - ], - [ - 2086250, - 5842660 - ], - [ - 2086258, - 5842669 - ], - [ - 2086265, - 5842680 - ], - [ - 2086271, - 5842691 - ], - [ - 2086280, - 5842699 - ], - [ - 2086286, - 5842711 - ], - [ - 2086293, - 5842722 - ], - [ - 2086301, - 5842731 - ], - [ - 2086307, - 5842741 - ], - [ - 2086314, - 5842752 - ], - [ - 2086323, - 5842762 - ], - [ - 2086329, - 5842773 - ], - [ - 2086335, - 5842783 - ], - [ - 2086345, - 5842792 - ], - [ - 2086351, - 5842803 - ], - [ - 2086357, - 5842814 - ], - [ - 2086366, - 5842823 - ], - [ - 2086373, - 5842834 - ], - [ - 2086378, - 5842845 - ], - [ - 2086387, - 5842854 - ], - [ - 2086394, - 5842865 - ], - [ - 2086399, - 5842876 - ], - [ - 2086408, - 5842886 - ], - [ - 2086414, - 5842896 - ], - [ - 2086421, - 5842907 - ], - [ - 2086429, - 5842917 - ], - [ - 2086436, - 5842928 - ], - [ - 2086442, - 5842938 - ], - [ - 2086451, - 5842947 - ], - [ - 2086457, - 5842959 - ], - [ - 2086464, - 5842970 - ], - [ - 2086472, - 5842978 - ], - [ - 2086479, - 5842989 - ], - [ - 2086485, - 5843001 - ], - [ - 2086493, - 5843010 - ], - [ - 2086499, - 5843021 - ], - [ - 2086505, - 5843032 - ], - [ - 2086514, - 5843041 - ], - [ - 2086520, - 5843052 - ], - [ - 2086526, - 5843063 - ], - [ - 2086535, - 5843072 - ], - [ - 2086542, - 5843083 - ], - [ - 2086547, - 5843094 - ], - [ - 2086557, - 5843103 - ], - [ - 2086562, - 5843115 - ], - [ - 2086569, - 5843126 - ], - [ - 2086577, - 5843134 - ], - [ - 2086583, - 5843146 - ], - [ - 2086589, - 5843157 - ], - [ - 2086598, - 5843167 - ], - [ - 2086604, - 5843177 - ], - [ - 2086610, - 5843188 - ], - [ - 2086619, - 5843197 - ], - [ - 2086624, - 5843209 - ], - [ - 2086631, - 5843219 - ], - [ - 2086639, - 5843228 - ], - [ - 2086646, - 5843239 - ], - [ - 2086652, - 5843251 - ], - [ - 2086661, - 5843259 - ], - [ - 2086666, - 5843271 - ], - [ - 2086673, - 5843282 - ], - [ - 2086681, - 5843291 - ], - [ - 2086687, - 5843301 - ], - [ - 2086694, - 5843313 - ], - [ - 2086702, - 5843322 - ], - [ - 2086709, - 5843332 - ], - [ - 2086715, - 5843344 - ], - [ - 2086724, - 5843353 - ], - [ - 2086730, - 5843364 - ], - [ - 2086736, - 5843375 - ], - [ - 2086745, - 5843384 - ], - [ - 2086752, - 5843395 - ], - [ - 2086758, - 5843406 - ], - [ - 2086768, - 5843415 - ], - [ - 2086773, - 5843426 - ], - [ - 2086780, - 5843437 - ], - [ - 2086788, - 5843446 - ], - [ - 2086795, - 5843457 - ], - [ - 2086801, - 5843468 - ], - [ - 2086809, - 5843477 - ], - [ - 2086816, - 5843488 - ], - [ - 2086821, - 5843499 - ], - [ - 2086831, - 5843508 - ], - [ - 2086836, - 5843519 - ], - [ - 2086843, - 5843531 - ], - [ - 2086851, - 5843539 - ], - [ - 2086858, - 5843550 - ], - [ - 2086863, - 5843562 - ], - [ - 2086872, - 5843570 - ], - [ - 2086878, - 5843581 - ], - [ - 2086885, - 5843593 - ], - [ - 2086892, - 5843602 - ], - [ - 2086898, - 5843612 - ], - [ - 2086905, - 5843623 - ], - [ - 2086912, - 5843633 - ], - [ - 2086919, - 5843644 - ], - [ - 2086925, - 5843655 - ], - [ - 2086934, - 5843664 - ], - [ - 2086940, - 5843676 - ], - [ - 2086947, - 5843687 - ], - [ - 2086955, - 5843695 - ], - [ - 2086962, - 5843707 - ], - [ - 2086968, - 5843718 - ], - [ - 2086977, - 5843727 - ], - [ - 2086982, - 5843738 - ], - [ - 2086989, - 5843749 - ], - [ - 2086997, - 5843759 - ], - [ - 2087002, - 5843770 - ], - [ - 2087009, - 5843781 - ], - [ - 2087017, - 5843790 - ], - [ - 2087023, - 5843801 - ], - [ - 2087029, - 5843813 - ], - [ - 2087039, - 5843821 - ], - [ - 2087044, - 5843832 - ], - [ - 2087051, - 5843843 - ], - [ - 2087060, - 5843851 - ], - [ - 2087066, - 5843862 - ], - [ - 2087072, - 5843874 - ], - [ - 2087082, - 5843883 - ], - [ - 2087087, - 5843893 - ], - [ - 2087094, - 5843904 - ], - [ - 2087102, - 5843914 - ], - [ - 2087108, - 5843925 - ], - [ - 2087115, - 5843935 - ], - [ - 2087123, - 5843945 - ], - [ - 2087129, - 5843956 - ], - [ - 2087135, - 5843967 - ], - [ - 2087144, - 5843976 - ], - [ - 2087150, - 5843987 - ], - [ - 2087156, - 5843999 - ], - [ - 2087165, - 5844008 - ], - [ - 2087171, - 5844018 - ], - [ - 2087177, - 5844030 - ], - [ - 2087186, - 5844039 - ], - [ - 2087192, - 5844051 - ], - [ - 2087198, - 5844061 - ], - [ - 2087208, - 5844070 - ], - [ - 2087213, - 5844081 - ], - [ - 2087220, - 5844092 - ], - [ - 2087228, - 5844101 - ], - [ - 2087235, - 5844112 - ], - [ - 2087241, - 5844123 - ], - [ - 2087251, - 5844131 - ], - [ - 2087256, - 5844142 - ], - [ - 2087263, - 5844154 - ], - [ - 2087272, - 5844163 - ], - [ - 2087278, - 5844173 - ], - [ - 2087284, - 5844184 - ], - [ - 2087293, - 5844194 - ], - [ - 2087299, - 5844205 - ], - [ - 2087304, - 5844215 - ], - [ - 2087314, - 5844224 - ], - [ - 2087319, - 5844236 - ], - [ - 2087326, - 5844247 - ], - [ - 2087334, - 5844255 - ], - [ - 2087341, - 5844266 - ], - [ - 2087347, - 5844277 - ], - [ - 2087356, - 5844286 - ], - [ - 2087362, - 5844297 - ], - [ - 2087369, - 5844308 - ], - [ - 2087377, - 5844318 - ], - [ - 2087384, - 5844328 - ], - [ - 2087390, - 5844339 - ], - [ - 2087398, - 5844349 - ], - [ - 2087405, - 5844360 - ], - [ - 2087410, - 5844370 - ], - [ - 2087419, - 5844380 - ], - [ - 2087425, - 5844391 - ], - [ - 2087432, - 5844402 - ], - [ - 2087440, - 5844411 - ], - [ - 2087447, - 5844422 - ], - [ - 2087452, - 5844433 - ], - [ - 2087462, - 5844443 - ], - [ - 2087468, - 5844453 - ], - [ - 2087474, - 5844464 - ], - [ - 2087483, - 5844473 - ], - [ - 2087490, - 5844485 - ], - [ - 2087495, - 5844495 - ], - [ - 2087503, - 5844504 - ], - [ - 2087510, - 5844516 - ], - [ - 2087516, - 5844527 - ], - [ - 2087524, - 5844535 - ], - [ - 2087530, - 5844546 - ], - [ - 2087537, - 5844558 - ], - [ - 2087545, - 5844566 - ], - [ - 2087552, - 5844578 - ], - [ - 2087557, - 5844589 - ], - [ - 2087567, - 5844598 - ], - [ - 2087573, - 5844608 - ], - [ - 2087580, - 5844620 - ], - [ - 2087588, - 5844629 - ], - [ - 2087594, - 5844640 - ], - [ - 2087600, - 5844651 - ], - [ - 2087608, - 5844660 - ], - [ - 2087615, - 5844672 - ], - [ - 2087620, - 5844683 - ], - [ - 2087629, - 5844692 - ], - [ - 2087635, - 5844703 - ], - [ - 2087642, - 5844714 - ], - [ - 2087650, - 5844724 - ], - [ - 2087657, - 5844734 - ], - [ - 2087663, - 5844745 - ], - [ - 2087672, - 5844754 - ], - [ - 2087678, - 5844765 - ], - [ - 2087685, - 5844776 - ], - [ - 2087693, - 5844785 - ], - [ - 2087700, - 5844796 - ], - [ - 2087705, - 5844807 - ], - [ - 2087713, - 5844816 - ], - [ - 2087720, - 5844827 - ], - [ - 2087726, - 5844838 - ], - [ - 2087734, - 5844847 - ], - [ - 2087740, - 5844858 - ], - [ - 2087747, - 5844869 - ], - [ - 2087755, - 5844879 - ], - [ - 2087762, - 5844889 - ], - [ - 2087768, - 5844900 - ], - [ - 2087777, - 5844909 - ], - [ - 2087783, - 5844921 - ], - [ - 2087790, - 5844931 - ], - [ - 2087798, - 5844940 - ], - [ - 2087804, - 5844951 - ], - [ - 2087811, - 5844962 - ], - [ - 2087819, - 5844971 - ], - [ - 2087826, - 5844982 - ], - [ - 2087831, - 5844993 - ], - [ - 2087842, - 5845002 - ], - [ - 2087847, - 5845013 - ], - [ - 2087854, - 5845024 - ], - [ - 2087863, - 5845033 - ], - [ - 2087869, - 5845043 - ], - [ - 2087875, - 5845055 - ], - [ - 2087885, - 5845064 - ], - [ - 2087890, - 5845075 - ], - [ - 2087897, - 5845085 - ], - [ - 2087905, - 5845095 - ], - [ - 2087911, - 5845106 - ], - [ - 2087918, - 5845117 - ], - [ - 2087926, - 5845126 - ], - [ - 2087933, - 5845137 - ], - [ - 2087939, - 5845148 - ], - [ - 2087948, - 5845158 - ], - [ - 2087954, - 5845168 - ], - [ - 2087960, - 5845179 - ], - [ - 2087969, - 5845188 - ], - [ - 2087976, - 5845199 - ], - [ - 2087981, - 5845210 - ], - [ - 2087990, - 5845220 - ], - [ - 2087996, - 5845231 - ], - [ - 2088003, - 5845242 - ], - [ - 2088011, - 5845250 - ], - [ - 2088017, - 5845261 - ], - [ - 2088023, - 5845273 - ], - [ - 2088031, - 5845281 - ], - [ - 2088038, - 5845293 - ], - [ - 2088044, - 5845304 - ], - [ - 2088053, - 5845313 - ], - [ - 2088058, - 5845324 - ], - [ - 2088065, - 5845335 - ], - [ - 2088072, - 5845345 - ], - [ - 2088079, - 5845356 - ], - [ - 2088084, - 5845368 - ], - [ - 2088094, - 5845376 - ], - [ - 2088099, - 5845387 - ], - [ - 2088106, - 5845398 - ], - [ - 2088115, - 5845407 - ], - [ - 2088120, - 5845418 - ], - [ - 2088127, - 5845429 - ], - [ - 2088136, - 5845438 - ], - [ - 2088143, - 5845449 - ], - [ - 2088148, - 5845460 - ], - [ - 2088158, - 5845469 - ], - [ - 2088163, - 5845480 - ], - [ - 2088170, - 5845491 - ], - [ - 2088179, - 5845500 - ], - [ - 2088185, - 5845511 - ], - [ - 2088191, - 5845522 - ], - [ - 2088200, - 5845531 - ], - [ - 2088205, - 5845542 - ], - [ - 2088211, - 5845553 - ], - [ - 2088220, - 5845562 - ], - [ - 2088226, - 5845573 - ], - [ - 2088232, - 5845585 - ], - [ - 2088240, - 5845594 - ], - [ - 2088247, - 5845605 - ], - [ - 2088252, - 5845616 - ], - [ - 2088262, - 5845625 - ], - [ - 2088268, - 5845636 - ], - [ - 2088275, - 5845646 - ], - [ - 2088284, - 5845655 - ], - [ - 2088290, - 5845667 - ], - [ - 2088296, - 5845678 - ], - [ - 2088305, - 5845686 - ], - [ - 2088312, - 5845697 - ], - [ - 2088317, - 5845709 - ], - [ - 2088327, - 5845717 - ], - [ - 2088333, - 5845728 - ], - [ - 2088340, - 5845740 - ], - [ - 2088348, - 5845749 - ], - [ - 2088355, - 5845759 - ], - [ - 2088360, - 5845770 - ], - [ - 2088370, - 5845780 - ], - [ - 2088375, - 5845791 - ], - [ - 2088382, - 5845801 - ], - [ - 2088390, - 5845810 - ], - [ - 2088397, - 5845821 - ], - [ - 2088403, - 5845833 - ], - [ - 2088412, - 5845841 - ], - [ - 2088418, - 5845852 - ], - [ - 2088424, - 5845863 - ], - [ - 2088434, - 5845872 - ], - [ - 2088440, - 5845883 - ], - [ - 2088446, - 5845894 - ], - [ - 2088454, - 5845903 - ], - [ - 2088461, - 5845914 - ], - [ - 2088467, - 5845925 - ], - [ - 2088476, - 5845934 - ], - [ - 2088482, - 5845946 - ], - [ - 2088489, - 5845956 - ], - [ - 2088497, - 5845965 - ], - [ - 2088503, - 5845977 - ], - [ - 2088509, - 5845988 - ], - [ - 2088517, - 5845997 - ], - [ - 2088524, - 5846008 - ], - [ - 2088530, - 5846019 - ], - [ - 2088538, - 5846029 - ], - [ - 2088544, - 5846039 - ], - [ - 2088551, - 5846050 - ], - [ - 2088558, - 5846060 - ], - [ - 2088565, - 5846071 - ], - [ - 2088571, - 5846081 - ], - [ - 2088580, - 5846090 - ], - [ - 2088586, - 5846102 - ], - [ - 2088593, - 5846113 - ], - [ - 2088601, - 5846121 - ], - [ - 2088607, - 5846132 - ], - [ - 2088614, - 5846144 - ], - [ - 2088622, - 5846153 - ], - [ - 2088628, - 5846163 - ], - [ - 2088634, - 5846175 - ], - [ - 2088644, - 5846184 - ], - [ - 2088650, - 5846194 - ], - [ - 2088657, - 5846206 - ], - [ - 2088665, - 5846215 - ], - [ - 2088672, - 5846226 - ], - [ - 2088678, - 5846237 - ], - [ - 2088687, - 5846246 - ], - [ - 2088693, - 5846257 - ], - [ - 2088700, - 5846268 - ], - [ - 2088707, - 5846277 - ], - [ - 2088713, - 5846288 - ], - [ - 2088720, - 5846299 - ], - [ - 2088728, - 5846309 - ], - [ - 2088735, - 5846319 - ], - [ - 2088740, - 5846330 - ], - [ - 2088749, - 5846340 - ], - [ - 2088755, - 5846351 - ], - [ - 2088762, - 5846361 - ], - [ - 2088770, - 5846371 - ], - [ - 2088776, - 5846382 - ], - [ - 2088782, - 5846393 - ], - [ - 2088791, - 5846402 - ], - [ - 2088797, - 5846413 - ], - [ - 2088803, - 5846424 - ], - [ - 2088812, - 5846434 - ], - [ - 2088818, - 5846444 - ], - [ - 2088824, - 5846455 - ], - [ - 2088833, - 5846464 - ], - [ - 2088840, - 5846474 - ], - [ - 2088845, - 5846485 - ], - [ - 2088856, - 5846494 - ], - [ - 2088861, - 5846506 - ], - [ - 2088868, - 5846516 - ], - [ - 2088877, - 5846525 - ], - [ - 2088883, - 5846537 - ], - [ - 2088889, - 5846548 - ], - [ - 2088897, - 5846556 - ], - [ - 2088904, - 5846567 - ], - [ - 2088910, - 5846579 - ], - [ - 2088919, - 5846588 - ], - [ - 2088925, - 5846598 - ], - [ - 2088931, - 5846610 - ], - [ - 2088939, - 5846619 - ], - [ - 2088946, - 5846630 - ], - [ - 2088952, - 5846640 - ], - [ - 2088961, - 5846650 - ], - [ - 2088967, - 5846661 - ], - [ - 2088974, - 5846672 - ], - [ - 2088982, - 5846681 - ], - [ - 2088988, - 5846692 - ], - [ - 2088994, - 5846704 - ], - [ - 2089002, - 5846712 - ], - [ - 2089009, - 5846723 - ], - [ - 2089015, - 5846734 - ], - [ - 2089024, - 5846744 - ], - [ - 2089030, - 5846754 - ], - [ - 2089037, - 5846765 - ], - [ - 2089046, - 5846775 - ], - [ - 2089052, - 5846786 - ], - [ - 2089058, - 5846796 - ], - [ - 2089068, - 5846805 - ], - [ - 2089073, - 5846817 - ], - [ - 2089080, - 5846828 - ], - [ - 2089088, - 5846836 - ], - [ - 2089095, - 5846848 - ], - [ - 2089101, - 5846859 - ], - [ - 2089109, - 5846867 - ], - [ - 2089115, - 5846878 - ], - [ - 2089121, - 5846890 - ], - [ - 2089130, - 5846899 - ], - [ - 2089136, - 5846910 - ], - [ - 2089142, - 5846921 - ], - [ - 2089151, - 5846930 - ], - [ - 2089157, - 5846942 - ], - [ - 2089163, - 5846952 - ], - [ - 2089173, - 5846961 - ], - [ - 2089178, - 5846972 - ], - [ - 2089185, - 5846984 - ], - [ - 2089194, - 5846992 - ], - [ - 2089200, - 5847003 - ], - [ - 2089206, - 5847015 - ], - [ - 2089214, - 5847024 - ], - [ - 2089221, - 5847034 - ], - [ - 2089226, - 5847046 - ], - [ - 2089236, - 5847055 - ], - [ - 2089242, - 5847066 - ], - [ - 2089248, - 5847076 - ], - [ - 2089256, - 5847086 - ], - [ - 2089263, - 5847097 - ], - [ - 2089268, - 5847108 - ], - [ - 2089277, - 5847117 - ], - [ - 2089283, - 5847128 - ], - [ - 2089290, - 5847139 - ], - [ - 2089298, - 5847148 - ], - [ - 2089305, - 5847159 - ], - [ - 2089310, - 5847170 - ], - [ - 2089318, - 5847180 - ], - [ - 2089325, - 5847190 - ], - [ - 2089330, - 5847202 - ], - [ - 2089340, - 5847211 - ], - [ - 2089346, - 5847222 - ], - [ - 2089352, - 5847233 - ], - [ - 2089360, - 5847242 - ], - [ - 2089367, - 5847254 - ], - [ - 2089372, - 5847265 - ], - [ - 2089382, - 5847273 - ], - [ - 2089388, - 5847284 - ], - [ - 2089394, - 5847296 - ], - [ - 2089403, - 5847305 - ], - [ - 2089409, - 5847315 - ], - [ - 2089415, - 5847327 - ], - [ - 2089424, - 5847336 - ], - [ - 2089431, - 5847347 - ], - [ - 2089436, - 5847357 - ], - [ - 2089446, - 5847367 - ], - [ - 2089451, - 5847378 - ], - [ - 2089458, - 5847389 - ], - [ - 2089466, - 5847398 - ], - [ - 2089473, - 5847409 - ], - [ - 2089479, - 5847420 - ], - [ - 2089488, - 5847429 - ], - [ - 2089494, - 5847440 - ], - [ - 2089500, - 5847451 - ], - [ - 2089509, - 5847460 - ], - [ - 2089515, - 5847471 - ], - [ - 2089521, - 5847482 - ], - [ - 2089530, - 5847491 - ], - [ - 2089536, - 5847502 - ], - [ - 2089542, - 5847513 - ], - [ - 2089552, - 5847522 - ], - [ - 2089557, - 5847533 - ], - [ - 2089564, - 5847544 - ], - [ - 2089573, - 5847553 - ], - [ - 2089579, - 5847564 - ], - [ - 2089585, - 5847575 - ], - [ - 2089594, - 5847584 - ], - [ - 2089600, - 5847594 - ], - [ - 2089607, - 5847606 - ], - [ - 2089615, - 5847615 - ], - [ - 2089621, - 5847626 - ], - [ - 2089627, - 5847636 - ], - [ - 2089636, - 5847646 - ], - [ - 2089642, - 5847657 - ], - [ - 2089648, - 5847668 - ], - [ - 2089658, - 5847677 - ], - [ - 2089663, - 5847688 - ], - [ - 2089670, - 5847699 - ], - [ - 2089678, - 5847707 - ], - [ - 2089685, - 5847719 - ], - [ - 2089691, - 5847730 - ], - [ - 2089699, - 5847739 - ], - [ - 2089706, - 5847749 - ], - [ - 2089713, - 5847761 - ], - [ - 2089721, - 5847770 - ], - [ - 2089727, - 5847781 - ], - [ - 2089733, - 5847792 - ], - [ - 2089741, - 5847801 - ], - [ - 2089748, - 5847812 - ], - [ - 2089754, - 5847824 - ], - [ - 2089763, - 5847832 - ], - [ - 2089769, - 5847843 - ], - [ - 2089775, - 5847855 - ], - [ - 2089784, - 5847863 - ], - [ - 2089791, - 5847874 - ], - [ - 2089796, - 5847885 - ], - [ - 2089805, - 5847895 - ], - [ - 2089812, - 5847905 - ], - [ - 2089817, - 5847916 - ], - [ - 2089827, - 5847926 - ], - [ - 2089832, - 5847937 - ], - [ - 2089839, - 5847947 - ], - [ - 2089848, - 5847957 - ], - [ - 2089854, - 5847968 - ], - [ - 2089860, - 5847979 - ], - [ - 2089869, - 5847988 - ], - [ - 2089875, - 5847999 - ], - [ - 2089881, - 5848010 - ], - [ - 2089889, - 5848020 - ], - [ - 2089896, - 5848030 - ], - [ - 2089901, - 5848041 - ], - [ - 2089910, - 5848051 - ], - [ - 2089916, - 5848062 - ], - [ - 2089922, - 5848072 - ], - [ - 2089931, - 5848082 - ], - [ - 2089937, - 5848093 - ], - [ - 2089944, - 5848104 - ], - [ - 2089953, - 5848112 - ], - [ - 2089959, - 5848123 - ], - [ - 2089965, - 5848135 - ], - [ - 2089975, - 5848143 - ], - [ - 2089980, - 5848154 - ], - [ - 2089987, - 5848165 - ], - [ - 2089997, - 5848174 - ], - [ - 2090002, - 5848184 - ], - [ - 2090009, - 5848196 - ], - [ - 2090017, - 5848205 - ], - [ - 2090024, - 5848216 - ], - [ - 2090030, - 5848227 - ], - [ - 2090039, - 5848236 - ], - [ - 2090045, - 5848247 - ], - [ - 2090051, - 5848259 - ], - [ - 2090060, - 5848267 - ], - [ - 2090066, - 5848278 - ], - [ - 2090072, - 5848289 - ], - [ - 2090081, - 5848298 - ], - [ - 2090087, - 5848309 - ], - [ - 2090094, - 5848321 - ], - [ - 2090102, - 5848330 - ], - [ - 2090108, - 5848340 - ], - [ - 2090114, - 5848352 - ], - [ - 2090123, - 5848361 - ], - [ - 2090130, - 5848372 - ], - [ - 2090135, - 5848383 - ], - [ - 2090144, - 5848392 - ], - [ - 2090150, - 5848403 - ], - [ - 2090156, - 5848415 - ], - [ - 2090164, - 5848423 - ], - [ - 2090171, - 5848435 - ], - [ - 2090177, - 5848446 - ], - [ - 2090186, - 5848455 - ], - [ - 2090192, - 5848465 - ], - [ - 2090198, - 5848477 - ], - [ - 2090208, - 5848485 - ], - [ - 2090213, - 5848497 - ], - [ - 2090220, - 5848507 - ], - [ - 2090229, - 5848516 - ], - [ - 2090236, - 5848527 - ], - [ - 2090241, - 5848539 - ], - [ - 2090251, - 5848547 - ], - [ - 2090256, - 5848558 - ], - [ - 2090263, - 5848569 - ], - [ - 2090271, - 5848578 - ], - [ - 2090278, - 5848589 - ], - [ - 2090284, - 5848601 - ], - [ - 2090293, - 5848610 - ], - [ - 2090299, - 5848620 - ], - [ - 2090305, - 5848632 - ], - [ - 2090314, - 5848641 - ], - [ - 2090319, - 5848652 - ], - [ - 2090326, - 5848662 - ], - [ - 2090334, - 5848671 - ], - [ - 2090341, - 5848683 - ], - [ - 2090347, - 5848694 - ], - [ - 2090356, - 5848703 - ], - [ - 2090362, - 5848714 - ], - [ - 2090368, - 5848725 - ], - [ - 2090376, - 5848735 - ], - [ - 2090383, - 5848746 - ], - [ - 2090388, - 5848757 - ], - [ - 2090398, - 5848766 - ], - [ - 2090403, - 5848778 - ], - [ - 2090410, - 5848788 - ], - [ - 2090418, - 5848798 - ], - [ - 2090423, - 5848809 - ], - [ - 2090430, - 5848820 - ], - [ - 2090438, - 5848829 - ], - [ - 2090444, - 5848841 - ], - [ - 2090449, - 5848852 - ], - [ - 2090459, - 5848861 - ], - [ - 2090465, - 5848871 - ], - [ - 2090471, - 5848882 - ], - [ - 2090480, - 5848892 - ], - [ - 2090487, - 5848902 - ], - [ - 2090492, - 5848913 - ], - [ - 2090502, - 5848922 - ], - [ - 2090508, - 5848934 - ], - [ - 2090514, - 5848944 - ], - [ - 2090522, - 5848953 - ], - [ - 2090528, - 5848964 - ], - [ - 2090534, - 5848976 - ], - [ - 2090544, - 5848984 - ], - [ - 2090550, - 5848995 - ], - [ - 2090556, - 5849006 - ], - [ - 2090566, - 5849015 - ], - [ - 2090571, - 5849025 - ], - [ - 2090578, - 5849037 - ], - [ - 2090587, - 5849046 - ], - [ - 2090594, - 5849057 - ], - [ - 2090599, - 5849067 - ], - [ - 2090608, - 5849076 - ], - [ - 2090614, - 5849088 - ], - [ - 2090620, - 5849099 - ], - [ - 2090629, - 5849107 - ], - [ - 2090635, - 5849118 - ], - [ - 2090642, - 5849130 - ], - [ - 2090650, - 5849138 - ], - [ - 2090657, - 5849150 - ], - [ - 2090662, - 5849161 - ], - [ - 2090672, - 5849171 - ], - [ - 2090677, - 5849181 - ], - [ - 2090684, - 5849192 - ], - [ - 2090692, - 5849202 - ], - [ - 2090699, - 5849213 - ], - [ - 2090704, - 5849224 - ], - [ - 2090712, - 5849233 - ], - [ - 2090719, - 5849245 - ], - [ - 2090724, - 5849256 - ], - [ - 2090734, - 5849264 - ], - [ - 2090740, - 5849275 - ], - [ - 2090746, - 5849287 - ], - [ - 2090756, - 5849295 - ], - [ - 2090762, - 5849306 - ], - [ - 2090768, - 5849317 - ], - [ - 2090777, - 5849327 - ], - [ - 2090783, - 5849337 - ], - [ - 2090789, - 5849348 - ], - [ - 2090797, - 5849358 - ], - [ - 2090804, - 5849369 - ], - [ - 2090809, - 5849381 - ], - [ - 2090818, - 5849389 - ], - [ - 2090824, - 5849400 - ], - [ - 2090830, - 5849412 - ], - [ - 2090839, - 5849420 - ], - [ - 2090845, - 5849431 - ], - [ - 2090851, - 5849442 - ], - [ - 2090861, - 5849451 - ], - [ - 2090867, - 5849462 - ], - [ - 2090873, - 5849473 - ], - [ - 2090883, - 5849482 - ], - [ - 2090888, - 5849493 - ], - [ - 2090895, - 5849503 - ], - [ - 2090904, - 5849513 - ], - [ - 2090910, - 5849524 - ], - [ - 2090916, - 5849535 - ], - [ - 2090924, - 5849544 - ], - [ - 2090931, - 5849556 - ], - [ - 2090936, - 5849567 - ], - [ - 2090945, - 5849576 - ], - [ - 2090951, - 5849587 - ], - [ - 2090957, - 5849598 - ], - [ - 2090965, - 5849608 - ], - [ - 2090972, - 5849619 - ], - [ - 2090978, - 5849629 - ], - [ - 2090987, - 5849639 - ], - [ - 2090992, - 5849650 - ], - [ - 2090999, - 5849661 - ], - [ - 2091007, - 5849670 - ], - [ - 2091014, - 5849681 - ], - [ - 2091019, - 5849692 - ], - [ - 2091028, - 5849701 - ], - [ - 2091034, - 5849712 - ], - [ - 2091039, - 5849723 - ], - [ - 2091049, - 5849733 - ], - [ - 2091054, - 5849743 - ], - [ - 2091061, - 5849754 - ], - [ - 2091069, - 5849764 - ], - [ - 2091075, - 5849775 - ], - [ - 2091081, - 5849785 - ], - [ - 2091092, - 5849794 - ], - [ - 2091097, - 5849805 - ], - [ - 2091103, - 5849816 - ], - [ - 2091113, - 5849824 - ], - [ - 2091119, - 5849836 - ], - [ - 2091125, - 5849847 - ], - [ - 2091134, - 5849855 - ], - [ - 2091141, - 5849866 - ], - [ - 2091146, - 5849878 - ], - [ - 2091156, - 5849887 - ], - [ - 2091162, - 5849897 - ], - [ - 2091168, - 5849908 - ], - [ - 2091177, - 5849918 - ], - [ - 2091183, - 5849929 - ], - [ - 2091189, - 5849939 - ], - [ - 2091198, - 5849949 - ], - [ - 2091204, - 5849960 - ], - [ - 2091211, - 5849971 - ], - [ - 2091219, - 5849979 - ], - [ - 2091225, - 5849991 - ], - [ - 2091231, - 5850002 - ], - [ - 2091240, - 5850011 - ], - [ - 2091247, - 5850021 - ], - [ - 2091252, - 5850033 - ], - [ - 2091261, - 5850042 - ], - [ - 2091267, - 5850054 - ], - [ - 2091273, - 5850064 - ], - [ - 2091282, - 5850074 - ], - [ - 2091288, - 5850085 - ], - [ - 2091294, - 5850096 - ], - [ - 2091303, - 5850105 - ], - [ - 2091308, - 5850117 - ], - [ - 2091315, - 5850128 - ], - [ - 2091323, - 5850137 - ], - [ - 2091330, - 5850148 - ], - [ - 2091335, - 5850159 - ], - [ - 2091344, - 5850169 - ], - [ - 2091350, - 5850180 - ], - [ - 2091356, - 5850191 - ], - [ - 2091366, - 5850200 - ], - [ - 2091371, - 5850211 - ], - [ - 2091378, - 5850223 - ], - [ - 2091386, - 5850231 - ], - [ - 2091392, - 5850243 - ], - [ - 2091398, - 5850254 - ], - [ - 2091408, - 5850262 - ], - [ - 2091413, - 5850274 - ], - [ - 2091420, - 5850285 - ], - [ - 2091429, - 5850295 - ], - [ - 2091435, - 5850305 - ], - [ - 2091441, - 5850316 - ], - [ - 2091449, - 5850325 - ], - [ - 2091456, - 5850337 - ], - [ - 2091461, - 5850347 - ], - [ - 2091471, - 5850356 - ], - [ - 2091477, - 5850368 - ], - [ - 2091484, - 5850379 - ], - [ - 2091492, - 5850387 - ], - [ - 2091499, - 5850399 - ], - [ - 2091504, - 5850410 - ], - [ - 2091514, - 5850418 - ], - [ - 2091519, - 5850430 - ], - [ - 2091526, - 5850441 - ], - [ - 2091534, - 5850450 - ], - [ - 2091541, - 5850462 - ], - [ - 2091546, - 5850472 - ], - [ - 2091555, - 5850482 - ], - [ - 2091561, - 5850493 - ], - [ - 2091567, - 5850504 - ], - [ - 2091576, - 5850513 - ], - [ - 2091582, - 5850524 - ], - [ - 2091588, - 5850535 - ], - [ - 2091597, - 5850544 - ], - [ - 2091604, - 5850555 - ], - [ - 2091609, - 5850566 - ], - [ - 2091620, - 5850575 - ], - [ - 2091625, - 5850586 - ], - [ - 2091632, - 5850597 - ], - [ - 2091641, - 5850606 - ], - [ - 2091646, - 5850617 - ], - [ - 2091653, - 5850628 - ], - [ - 2091662, - 5850637 - ], - [ - 2091669, - 5850648 - ], - [ - 2091674, - 5850659 - ], - [ - 2091683, - 5850667 - ], - [ - 2091689, - 5850679 - ], - [ - 2091696, - 5850690 - ], - [ - 2091704, - 5850698 - ], - [ - 2091711, - 5850709 - ], - [ - 2091717, - 5850720 - ], - [ - 2091726, - 5850729 - ], - [ - 2091731, - 5850740 - ], - [ - 2091738, - 5850751 - ], - [ - 2091746, - 5850760 - ], - [ - 2091752, - 5850771 - ], - [ - 2091758, - 5850781 - ], - [ - 2091767, - 5850790 - ], - [ - 2091773, - 5850802 - ], - [ - 2091779, - 5850813 - ], - [ - 2091788, - 5850821 - ], - [ - 2091794, - 5850832 - ], - [ - 2091800, - 5850843 - ], - [ - 2091808, - 5850853 - ], - [ - 2091815, - 5850863 - ], - [ - 2091821, - 5850874 - ], - [ - 2091829, - 5850884 - ], - [ - 2091835, - 5850895 - ], - [ - 2091841, - 5850905 - ], - [ - 2091850, - 5850915 - ], - [ - 2091856, - 5850926 - ], - [ - 2091862, - 5850937 - ], - [ - 2091871, - 5850946 - ], - [ - 2091877, - 5850957 - ], - [ - 2091883, - 5850968 - ], - [ - 2091893, - 5850976 - ], - [ - 2091898, - 5850987 - ], - [ - 2091905, - 5850999 - ], - [ - 2091914, - 5851008 - ], - [ - 2091920, - 5851018 - ], - [ - 2091926, - 5851030 - ], - [ - 2091934, - 5851039 - ], - [ - 2091941, - 5851050 - ], - [ - 2091946, - 5851061 - ], - [ - 2091956, - 5851070 - ], - [ - 2091962, - 5851081 - ], - [ - 2091969, - 5851092 - ], - [ - 2091977, - 5851100 - ], - [ - 2091984, - 5851112 - ], - [ - 2091989, - 5851123 - ], - [ - 2091999, - 5851132 - ], - [ - 2092005, - 5851143 - ], - [ - 2092011, - 5851154 - ], - [ - 2092019, - 5851163 - ], - [ - 2092026, - 5851175 - ], - [ - 2092032, - 5851185 - ], - [ - 2092039, - 5851194 - ], - [ - 2092046, - 5851206 - ], - [ - 2092052, - 5851217 - ], - [ - 2092061, - 5851225 - ], - [ - 2092067, - 5851237 - ], - [ - 2092073, - 5851248 - ], - [ - 2092082, - 5851256 - ], - [ - 2092088, - 5851267 - ], - [ - 2092094, - 5851279 - ], - [ - 2092104, - 5851288 - ], - [ - 2092109, - 5851298 - ], - [ - 2092116, - 5851310 - ], - [ - 2092124, - 5851320 - ], - [ - 2092130, - 5851331 - ], - [ - 2092136, - 5851341 - ], - [ - 2092144, - 5851351 - ], - [ - 2092151, - 5851362 - ], - [ - 2092156, - 5851373 - ], - [ - 2092166, - 5851382 - ], - [ - 2092171, - 5851393 - ], - [ - 2092178, - 5851404 - ], - [ - 2092186, - 5851413 - ], - [ - 2092193, - 5851424 - ], - [ - 2092199, - 5851435 - ], - [ - 2092209, - 5851444 - ], - [ - 2092215, - 5851455 - ], - [ - 2092221, - 5851465 - ], - [ - 2092230, - 5851474 - ], - [ - 2092236, - 5851486 - ], - [ - 2092242, - 5851497 - ], - [ - 2092251, - 5851505 - ], - [ - 2092258, - 5851516 - ], - [ - 2092263, - 5851528 - ], - [ - 2092273, - 5851536 - ], - [ - 2092278, - 5851547 - ], - [ - 2092285, - 5851559 - ], - [ - 2092293, - 5851568 - ], - [ - 2092300, - 5851578 - ], - [ - 2092306, - 5851589 - ], - [ - 2092315, - 5851599 - ], - [ - 2092320, - 5851610 - ], - [ - 2092327, - 5851621 - ], - [ - 2092336, - 5851630 - ], - [ - 2092341, - 5851642 - ], - [ - 2092348, - 5851653 - ], - [ - 2092356, - 5851661 - ], - [ - 2092363, - 5851673 - ], - [ - 2092368, - 5851684 - ], - [ - 2092377, - 5851694 - ], - [ - 2092382, - 5851704 - ], - [ - 2092389, - 5851715 - ], - [ - 2092397, - 5851725 - ], - [ - 2092404, - 5851736 - ], - [ - 2092409, - 5851746 - ], - [ - 2092418, - 5851756 - ], - [ - 2092424, - 5851767 - ], - [ - 2092430, - 5851779 - ], - [ - 2092440, - 5851786 - ], - [ - 2092445, - 5851798 - ], - [ - 2092452, - 5851809 - ], - [ - 2092460, - 5851817 - ], - [ - 2092467, - 5851828 - ], - [ - 2092472, - 5851839 - ], - [ - 2092482, - 5851848 - ], - [ - 2092488, - 5851859 - ], - [ - 2092495, - 5851870 - ], - [ - 2092504, - 5851878 - ], - [ - 2092510, - 5851890 - ], - [ - 2092516, - 5851900 - ], - [ - 2092525, - 5851910 - ], - [ - 2092531, - 5851921 - ], - [ - 2092537, - 5851932 - ], - [ - 2092546, - 5851941 - ], - [ - 2092552, - 5851952 - ], - [ - 2092558, - 5851963 - ], - [ - 2092567, - 5851973 - ], - [ - 2092573, - 5851983 - ], - [ - 2092579, - 5851995 - ], - [ - 2092588, - 5852004 - ], - [ - 2092593, - 5852015 - ], - [ - 2092600, - 5852026 - ], - [ - 2092608, - 5852035 - ], - [ - 2092615, - 5852047 - ], - [ - 2092620, - 5852058 - ], - [ - 2092629, - 5852067 - ], - [ - 2092635, - 5852078 - ], - [ - 2092641, - 5852089 - ], - [ - 2092651, - 5852097 - ], - [ - 2092656, - 5852109 - ], - [ - 2092663, - 5852120 - ], - [ - 2092671, - 5852129 - ], - [ - 2092678, - 5852139 - ], - [ - 2092683, - 5852151 - ], - [ - 2092693, - 5852160 - ], - [ - 2092698, - 5852171 - ], - [ - 2092705, - 5852182 - ], - [ - 2092713, - 5852191 - ], - [ - 2092720, - 5852203 - ], - [ - 2092725, - 5852214 - ], - [ - 2092733, - 5852222 - ], - [ - 2092740, - 5852233 - ], - [ - 2092746, - 5852245 - ], - [ - 2092755, - 5852254 - ], - [ - 2092761, - 5852265 - ], - [ - 2092767, - 5852276 - ], - [ - 2092776, - 5852285 - ], - [ - 2092783, - 5852297 - ], - [ - 2092788, - 5852307 - ], - [ - 2092798, - 5852316 - ], - [ - 2092803, - 5852328 - ], - [ - 2092810, - 5852339 - ], - [ - 2092818, - 5852347 - ], - [ - 2092825, - 5852359 - ], - [ - 2092830, - 5852370 - ], - [ - 2092838, - 5852379 - ], - [ - 2092845, - 5852390 - ], - [ - 2092851, - 5852401 - ], - [ - 2092859, - 5852410 - ], - [ - 2092865, - 5852422 - ], - [ - 2092871, - 5852432 - ], - [ - 2092880, - 5852441 - ], - [ - 2092887, - 5852452 - ], - [ - 2092892, - 5852464 - ], - [ - 2092903, - 5852472 - ], - [ - 2092908, - 5852483 - ], - [ - 2092915, - 5852494 - ], - [ - 2092923, - 5852503 - ], - [ - 2092930, - 5852514 - ], - [ - 2092935, - 5852525 - ], - [ - 2092944, - 5852535 - ], - [ - 2092950, - 5852545 - ], - [ - 2092956, - 5852556 - ], - [ - 2092965, - 5852566 - ], - [ - 2092971, - 5852577 - ], - [ - 2092977, - 5852587 - ], - [ - 2092986, - 5852597 - ], - [ - 2092993, - 5852608 - ], - [ - 2092998, - 5852619 - ], - [ - 2093008, - 5852627 - ], - [ - 2093014, - 5852638 - ], - [ - 2093020, - 5852650 - ], - [ - 2093030, - 5852658 - ], - [ - 2093035, - 5852669 - ], - [ - 2093042, - 5852680 - ], - [ - 2093050, - 5852690 - ], - [ - 2093057, - 5852700 - ], - [ - 2093062, - 5852711 - ], - [ - 2093072, - 5852721 - ], - [ - 2093077, - 5852732 - ], - [ - 2093084, - 5852742 - ], - [ - 2093092, - 5852752 - ], - [ - 2093098, - 5852763 - ], - [ - 2093104, - 5852775 - ], - [ - 2093113, - 5852783 - ], - [ - 2093119, - 5852794 - ], - [ - 2093126, - 5852805 - ], - [ - 2093134, - 5852814 - ], - [ - 2093140, - 5852825 - ], - [ - 2093147, - 5852836 - ], - [ - 2093156, - 5852845 - ], - [ - 2093162, - 5852856 - ], - [ - 2093168, - 5852867 - ], - [ - 2093177, - 5852876 - ], - [ - 2093183, - 5852888 - ], - [ - 2093189, - 5852899 - ], - [ - 2093197, - 5852908 - ], - [ - 2093204, - 5852919 - ], - [ - 2093210, - 5852930 - ], - [ - 2093218, - 5852940 - ], - [ - 2093224, - 5852950 - ], - [ - 2093231, - 5852961 - ], - [ - 2093238, - 5852971 - ], - [ - 2093244, - 5852982 - ], - [ - 2093251, - 5852992 - ], - [ - 2093259, - 5853002 - ], - [ - 2093265, - 5853013 - ], - [ - 2093271, - 5853024 - ], - [ - 2093281, - 5853033 - ], - [ - 2093287, - 5853044 - ], - [ - 2093293, - 5853055 - ], - [ - 2093302, - 5853063 - ], - [ - 2093309, - 5853075 - ], - [ - 2093314, - 5853086 - ], - [ - 2093324, - 5853096 - ], - [ - 2093329, - 5853106 - ], - [ - 2093336, - 5853117 - ], - [ - 2093344, - 5853127 - ], - [ - 2093350, - 5853138 - ], - [ - 2093356, - 5853148 - ], - [ - 2093364, - 5853158 - ], - [ - 2093371, - 5853169 - ], - [ - 2093377, - 5853180 - ], - [ - 2093386, - 5853188 - ], - [ - 2093392, - 5853199 - ], - [ - 2093399, - 5853211 - ], - [ - 2093407, - 5853220 - ], - [ - 2093414, - 5853230 - ], - [ - 2093420, - 5853241 - ], - [ - 2093430, - 5853251 - ], - [ - 2093435, - 5853261 - ], - [ - 2093441, - 5853272 - ], - [ - 2093450, - 5853281 - ], - [ - 2093456, - 5853293 - ], - [ - 2093463, - 5853303 - ], - [ - 2093471, - 5853313 - ], - [ - 2093477, - 5853324 - ], - [ - 2093483, - 5853335 - ], - [ - 2093492, - 5853344 - ], - [ - 2093498, - 5853355 - ], - [ - 2093505, - 5853366 - ], - [ - 2093513, - 5853376 - ], - [ - 2093519, - 5853386 - ], - [ - 2093525, - 5853397 - ], - [ - 2093534, - 5853406 - ], - [ - 2093540, - 5853418 - ], - [ - 2093546, - 5853428 - ], - [ - 2093555, - 5853437 - ], - [ - 2093561, - 5853449 - ], - [ - 2093567, - 5853460 - ], - [ - 2093575, - 5853468 - ], - [ - 2093582, - 5853480 - ], - [ - 2093588, - 5853491 - ], - [ - 2093597, - 5853501 - ], - [ - 2093602, - 5853511 - ], - [ - 2093609, - 5853522 - ], - [ - 2093618, - 5853531 - ], - [ - 2093624, - 5853543 - ], - [ - 2093630, - 5853553 - ], - [ - 2093639, - 5853563 - ], - [ - 2093645, - 5853574 - ], - [ - 2093650, - 5853585 - ], - [ - 2093659, - 5853594 - ], - [ - 2093665, - 5853605 - ], - [ - 2093672, - 5853616 - ], - [ - 2093679, - 5853625 - ], - [ - 2093686, - 5853636 - ], - [ - 2093692, - 5853647 - ], - [ - 2093701, - 5853657 - ], - [ - 2093706, - 5853668 - ], - [ - 2093713, - 5853678 - ], - [ - 2093722, - 5853688 - ], - [ - 2093728, - 5853699 - ], - [ - 2093734, - 5853709 - ], - [ - 2093743, - 5853718 - ], - [ - 2093750, - 5853729 - ], - [ - 2093755, - 5853740 - ], - [ - 2093765, - 5853749 - ], - [ - 2093771, - 5853760 - ], - [ - 2093777, - 5853771 - ], - [ - 2093786, - 5853781 - ], - [ - 2093792, - 5853791 - ], - [ - 2093798, - 5853802 - ], - [ - 2093807, - 5853812 - ], - [ - 2093813, - 5853823 - ], - [ - 2093819, - 5853833 - ], - [ - 2093827, - 5853843 - ], - [ - 2093834, - 5853854 - ], - [ - 2093840, - 5853866 - ], - [ - 2093848, - 5853874 - ], - [ - 2093855, - 5853885 - ], - [ - 2093861, - 5853896 - ], - [ - 2093871, - 5853904 - ], - [ - 2093876, - 5853916 - ], - [ - 2093883, - 5853927 - ], - [ - 2093892, - 5853936 - ], - [ - 2093899, - 5853946 - ], - [ - 2093905, - 5853957 - ], - [ - 2093914, - 5853967 - ], - [ - 2093919, - 5853978 - ], - [ - 2093926, - 5853988 - ], - [ - 2093934, - 5853998 - ], - [ - 2093940, - 5854009 - ], - [ - 2093947, - 5854020 - ], - [ - 2093956, - 5854028 - ], - [ - 2093963, - 5854039 - ], - [ - 2093969, - 5854050 - ], - [ - 2093978, - 5854058 - ], - [ - 2093984, - 5854069 - ], - [ - 2093991, - 5854081 - ], - [ - 2093999, - 5854090 - ], - [ - 2094006, - 5854101 - ], - [ - 2094012, - 5854112 - ], - [ - 2094020, - 5854121 - ], - [ - 2094026, - 5854132 - ], - [ - 2094033, - 5854143 - ], - [ - 2094041, - 5854152 - ], - [ - 2094047, - 5854163 - ], - [ - 2094054, - 5854174 - ], - [ - 2094061, - 5854183 - ], - [ - 2094068, - 5854194 - ], - [ - 2094074, - 5854205 - ], - [ - 2094084, - 5854214 - ], - [ - 2094089, - 5854225 - ], - [ - 2094096, - 5854236 - ], - [ - 2094104, - 5854246 - ], - [ - 2094111, - 5854257 - ], - [ - 2094117, - 5854267 - ], - [ - 2094126, - 5854277 - ], - [ - 2094131, - 5854288 - ], - [ - 2094137, - 5854299 - ], - [ - 2094146, - 5854308 - ], - [ - 2094152, - 5854319 - ], - [ - 2094159, - 5854330 - ], - [ - 2094166, - 5854339 - ], - [ - 2094173, - 5854350 - ], - [ - 2094179, - 5854362 - ], - [ - 2094187, - 5854371 - ], - [ - 2094193, - 5854383 - ], - [ - 2094200, - 5854393 - ], - [ - 2094207, - 5854403 - ], - [ - 2094214, - 5854414 - ], - [ - 2094220, - 5854425 - ], - [ - 2094229, - 5854434 - ], - [ - 2094235, - 5854445 - ], - [ - 2094241, - 5854456 - ], - [ - 2094250, - 5854464 - ], - [ - 2094256, - 5854475 - ], - [ - 2094263, - 5854487 - ], - [ - 2094270, - 5854496 - ], - [ - 2094277, - 5854506 - ], - [ - 2094283, - 5854518 - ], - [ - 2094292, - 5854528 - ], - [ - 2094298, - 5854539 - ], - [ - 2094305, - 5854549 - ], - [ - 2094311, - 5854559 - ], - [ - 2094318, - 5854571 - ], - [ - 2094324, - 5854582 - ], - [ - 2094333, - 5854591 - ], - [ - 2094338, - 5854602 - ], - [ - 2094345, - 5854613 - ], - [ - 2094352, - 5854623 - ], - [ - 2094358, - 5854633 - ], - [ - 2094365, - 5854644 - ], - [ - 2094372, - 5854654 - ], - [ - 2094379, - 5854666 - ], - [ - 2094385, - 5854676 - ], - [ - 2094393, - 5854686 - ], - [ - 2094399, - 5854698 - ], - [ - 2094406, - 5854709 - ], - [ - 2094414, - 5854717 - ], - [ - 2094421, - 5854728 - ], - [ - 2094427, - 5854740 - ], - [ - 2094437, - 5854749 - ], - [ - 2094443, - 5854759 - ], - [ - 2094449, - 5854770 - ], - [ - 2094458, - 5854779 - ], - [ - 2094463, - 5854791 - ], - [ - 2094470, - 5854801 - ], - [ - 2094479, - 5854810 - ], - [ - 2094485, - 5854821 - ], - [ - 2094491, - 5854832 - ], - [ - 2094500, - 5854840 - ], - [ - 2094506, - 5854851 - ], - [ - 2094513, - 5854863 - ], - [ - 2094521, - 5854871 - ], - [ - 2094528, - 5854882 - ], - [ - 2094534, - 5854893 - ], - [ - 2094543, - 5854903 - ], - [ - 2094549, - 5854913 - ], - [ - 2094555, - 5854924 - ], - [ - 2094564, - 5854934 - ], - [ - 2094570, - 5854945 - ], - [ - 2094577, - 5854955 - ], - [ - 2094585, - 5854965 - ], - [ - 2094592, - 5854976 - ], - [ - 2094598, - 5854987 - ], - [ - 2094606, - 5854996 - ], - [ - 2094612, - 5855007 - ], - [ - 2094619, - 5855018 - ], - [ - 2094626, - 5855028 - ], - [ - 2094633, - 5855038 - ], - [ - 2094639, - 5855049 - ], - [ - 2094647, - 5855058 - ], - [ - 2094654, - 5855070 - ], - [ - 2094660, - 5855080 - ], - [ - 2094669, - 5855089 - ], - [ - 2094675, - 5855100 - ], - [ - 2094682, - 5855111 - ], - [ - 2094690, - 5855120 - ], - [ - 2094697, - 5855131 - ], - [ - 2094703, - 5855142 - ], - [ - 2094712, - 5855151 - ], - [ - 2094717, - 5855162 - ], - [ - 2094724, - 5855173 - ], - [ - 2094733, - 5855183 - ], - [ - 2094740, - 5855193 - ], - [ - 2094746, - 5855204 - ], - [ - 2094753, - 5855214 - ], - [ - 2094760, - 5855225 - ], - [ - 2094766, - 5855235 - ], - [ - 2094775, - 5855245 - ], - [ - 2094781, - 5855256 - ], - [ - 2094788, - 5855267 - ], - [ - 2094795, - 5855276 - ], - [ - 2094802, - 5855287 - ], - [ - 2094808, - 5855298 - ], - [ - 2094817, - 5855308 - ], - [ - 2094823, - 5855318 - ], - [ - 2094830, - 5855329 - ], - [ - 2094837, - 5855339 - ], - [ - 2094844, - 5855350 - ], - [ - 2094850, - 5855360 - ], - [ - 2094858, - 5855370 - ], - [ - 2094865, - 5855381 - ], - [ - 2094871, - 5855392 - ], - [ - 2094879, - 5855402 - ], - [ - 2094885, - 5855413 - ], - [ - 2094892, - 5855424 - ], - [ - 2094900, - 5855432 - ], - [ - 2094907, - 5855444 - ], - [ - 2094913, - 5855455 - ], - [ - 2094921, - 5855464 - ], - [ - 2094927, - 5855474 - ], - [ - 2094934, - 5855485 - ], - [ - 2094942, - 5855495 - ], - [ - 2094949, - 5855506 - ], - [ - 2094955, - 5855516 - ], - [ - 2094963, - 5855526 - ], - [ - 2094970, - 5855537 - ], - [ - 2094976, - 5855548 - ], - [ - 2094985, - 5855556 - ], - [ - 2094991, - 5855567 - ], - [ - 2094998, - 5855578 - ], - [ - 2095006, - 5855588 - ], - [ - 2095013, - 5855598 - ], - [ - 2095019, - 5855609 - ], - [ - 2095028, - 5855618 - ], - [ - 2095034, - 5855628 - ], - [ - 2095040, - 5855639 - ], - [ - 2095048, - 5855650 - ], - [ - 2095054, - 5855661 - ], - [ - 2095061, - 5855672 - ], - [ - 2095068, - 5855682 - ], - [ - 2095075, - 5855693 - ], - [ - 2095081, - 5855704 - ], - [ - 2095089, - 5855713 - ], - [ - 2095095, - 5855724 - ], - [ - 2095102, - 5855735 - ], - [ - 2095110, - 5855745 - ], - [ - 2095116, - 5855756 - ], - [ - 2095122, - 5855766 - ], - [ - 2095131, - 5855776 - ], - [ - 2095137, - 5855787 - ], - [ - 2095144, - 5855797 - ], - [ - 2095151, - 5855807 - ], - [ - 2095157, - 5855818 - ], - [ - 2095164, - 5855829 - ], - [ - 2095171, - 5855838 - ], - [ - 2095178, - 5855850 - ], - [ - 2095184, - 5855861 - ], - [ - 2095193, - 5855870 - ], - [ - 2095199, - 5855880 - ], - [ - 2095206, - 5855892 - ], - [ - 2095213, - 5855901 - ], - [ - 2095220, - 5855912 - ], - [ - 2095226, - 5855923 - ], - [ - 2095235, - 5855932 - ], - [ - 2095241, - 5855943 - ], - [ - 2095248, - 5855954 - ], - [ - 2095255, - 5855964 - ], - [ - 2095262, - 5855975 - ], - [ - 2095268, - 5855986 - ], - [ - 2095276, - 5855996 - ], - [ - 2095283, - 5856006 - ], - [ - 2095289, - 5856017 - ], - [ - 2095297, - 5856027 - ], - [ - 2095303, - 5856038 - ], - [ - 2095310, - 5856048 - ], - [ - 2095318, - 5856058 - ], - [ - 2095325, - 5856069 - ], - [ - 2095331, - 5856080 - ], - [ - 2095340, - 5856088 - ], - [ - 2095346, - 5856099 - ], - [ - 2095353, - 5856110 - ], - [ - 2095362, - 5856118 - ], - [ - 2095368, - 5856129 - ], - [ - 2095375, - 5856140 - ], - [ - 2095384, - 5856150 - ], - [ - 2095391, - 5856160 - ], - [ - 2095397, - 5856171 - ], - [ - 2095405, - 5856181 - ], - [ - 2095411, - 5856192 - ], - [ - 2095418, - 5856202 - ], - [ - 2095426, - 5856211 - ], - [ - 2095433, - 5856222 - ], - [ - 2095440, - 5856233 - ], - [ - 2095447, - 5856243 - ], - [ - 2095453, - 5856254 - ], - [ - 2095459, - 5856265 - ], - [ - 2095467, - 5856275 - ], - [ - 2095473, - 5856285 - ], - [ - 2095481, - 5856296 - ], - [ - 2095488, - 5856306 - ], - [ - 2095495, - 5856317 - ], - [ - 2095501, - 5856327 - ], - [ - 2095509, - 5856337 - ], - [ - 2095515, - 5856348 - ], - [ - 2095522, - 5856359 - ], - [ - 2095529, - 5856368 - ], - [ - 2095536, - 5856379 - ], - [ - 2095542, - 5856391 - ], - [ - 2095551, - 5856400 - ], - [ - 2095557, - 5856411 - ], - [ - 2095564, - 5856422 - ], - [ - 2095572, - 5856432 - ], - [ - 2095578, - 5856442 - ], - [ - 2095585, - 5856453 - ], - [ - 2095593, - 5856462 - ], - [ - 2095600, - 5856473 - ], - [ - 2095606, - 5856483 - ], - [ - 2095616, - 5856492 - ], - [ - 2095622, - 5856503 - ], - [ - 2095629, - 5856514 - ], - [ - 2095637, - 5856523 - ], - [ - 2095644, - 5856534 - ], - [ - 2095650, - 5856545 - ], - [ - 2095658, - 5856553 - ], - [ - 2095666, - 5856564 - ], - [ - 2095672, - 5856575 - ], - [ - 2095680, - 5856585 - ], - [ - 2095687, - 5856594 - ], - [ - 2095694, - 5856605 - ], - [ - 2095701, - 5856615 - ], - [ - 2095708, - 5856626 - ], - [ - 2095715, - 5856636 - ], - [ - 2095723, - 5856646 - ], - [ - 2095729, - 5856657 - ], - [ - 2095737, - 5856668 - ], - [ - 2095744, - 5856677 - ], - [ - 2095750, - 5856688 - ], - [ - 2095757, - 5856699 - ], - [ - 2095765, - 5856709 - ], - [ - 2095772, - 5856719 - ], - [ - 2095778, - 5856730 - ], - [ - 2095786, - 5856740 - ], - [ - 2095792, - 5856751 - ], - [ - 2095799, - 5856761 - ], - [ - 2095806, - 5856771 - ], - [ - 2095813, - 5856782 - ], - [ - 2095819, - 5856793 - ], - [ - 2095828, - 5856802 - ], - [ - 2095834, - 5856813 - ], - [ - 2095841, - 5856824 - ], - [ - 2095848, - 5856833 - ], - [ - 2095854, - 5856844 - ], - [ - 2095861, - 5856855 - ], - [ - 2095869, - 5856865 - ], - [ - 2095876, - 5856875 - ], - [ - 2095882, - 5856886 - ], - [ - 2095890, - 5856896 - ], - [ - 2095896, - 5856907 - ], - [ - 2095903, - 5856917 - ], - [ - 2095911, - 5856927 - ], - [ - 2095918, - 5856938 - ], - [ - 2095924, - 5856949 - ], - [ - 2095932, - 5856959 - ], - [ - 2095938, - 5856970 - ], - [ - 2095946, - 5856981 - ], - [ - 2095953, - 5856991 - ], - [ - 2095959, - 5857001 - ], - [ - 2095966, - 5857012 - ], - [ - 2095973, - 5857021 - ], - [ - 2095980, - 5857032 - ], - [ - 2095987, - 5857042 - ], - [ - 2095995, - 5857053 - ], - [ - 2096001, - 5857064 - ], - [ - 2096008, - 5857075 - ], - [ - 2096016, - 5857083 - ], - [ - 2096023, - 5857094 - ], - [ - 2096029, - 5857105 - ], - [ - 2096038, - 5857115 - ], - [ - 2096044, - 5857125 - ], - [ - 2096051, - 5857136 - ], - [ - 2096059, - 5857145 - ], - [ - 2096066, - 5857155 - ], - [ - 2096073, - 5857166 - ], - [ - 2096080, - 5857176 - ], - [ - 2096087, - 5857187 - ], - [ - 2096093, - 5857197 - ], - [ - 2096102, - 5857207 - ], - [ - 2096108, - 5857218 - ], - [ - 2096115, - 5857229 - ], - [ - 2096122, - 5857238 - ], - [ - 2096129, - 5857249 - ], - [ - 2096136, - 5857260 - ], - [ - 2096144, - 5857270 - ], - [ - 2096150, - 5857280 - ], - [ - 2096156, - 5857291 - ], - [ - 2096165, - 5857300 - ], - [ - 2096171, - 5857311 - ], - [ - 2096179, - 5857321 - ], - [ - 2096186, - 5857331 - ], - [ - 2096193, - 5857342 - ], - [ - 2096199, - 5857353 - ], - [ - 2096208, - 5857362 - ], - [ - 2096214, - 5857373 - ], - [ - 2096221, - 5857384 - ], - [ - 2096228, - 5857393 - ], - [ - 2096235, - 5857404 - ], - [ - 2096242, - 5857415 - ], - [ - 2096249, - 5857425 - ], - [ - 2096256, - 5857435 - ], - [ - 2096263, - 5857446 - ], - [ - 2096271, - 5857456 - ], - [ - 2096277, - 5857467 - ], - [ - 2096285, - 5857477 - ], - [ - 2096292, - 5857487 - ], - [ - 2096299, - 5857498 - ], - [ - 2096305, - 5857509 - ], - [ - 2096313, - 5857518 - ], - [ - 2096319, - 5857529 - ], - [ - 2096326, - 5857540 - ], - [ - 2096334, - 5857550 - ], - [ - 2096341, - 5857560 - ], - [ - 2096348, - 5857571 - ], - [ - 2096355, - 5857580 - ], - [ - 2096362, - 5857591 - ], - [ - 2096368, - 5857601 - ], - [ - 2096377, - 5857611 - ], - [ - 2096383, - 5857622 - ], - [ - 2096390, - 5857633 - ], - [ - 2096398, - 5857642 - ], - [ - 2096405, - 5857653 - ], - [ - 2096411, - 5857664 - ], - [ - 2096420, - 5857673 - ], - [ - 2096426, - 5857684 - ], - [ - 2096433, - 5857695 - ], - [ - 2096441, - 5857704 - ], - [ - 2096447, - 5857714 - ], - [ - 2096454, - 5857725 - ], - [ - 2096462, - 5857735 - ], - [ - 2096469, - 5857746 - ], - [ - 2096475, - 5857756 - ], - [ - 2096482, - 5857766 - ], - [ - 2096489, - 5857777 - ], - [ - 2096496, - 5857788 - ], - [ - 2096503, - 5857797 - ], - [ - 2096511, - 5857808 - ], - [ - 2096517, - 5857819 - ], - [ - 2096526, - 5857828 - ], - [ - 2096532, - 5857839 - ], - [ - 2096539, - 5857850 - ], - [ - 2096547, - 5857859 - ], - [ - 2096553, - 5857869 - ], - [ - 2096560, - 5857880 - ], - [ - 2096568, - 5857890 - ], - [ - 2096575, - 5857901 - ], - [ - 2096581, - 5857911 - ], - [ - 2096589, - 5857921 - ], - [ - 2096595, - 5857932 - ], - [ - 2096603, - 5857943 - ], - [ - 2096611, - 5857952 - ], - [ - 2096618, - 5857963 - ], - [ - 2096624, - 5857974 - ], - [ - 2096632, - 5857984 - ], - [ - 2096639, - 5857993 - ], - [ - 2096645, - 5858004 - ], - [ - 2096654, - 5858014 - ], - [ - 2096660, - 5858025 - ], - [ - 2096667, - 5858035 - ], - [ - 2096675, - 5858045 - ], - [ - 2096682, - 5858056 - ], - [ - 2096688, - 5858066 - ], - [ - 2096696, - 5858076 - ], - [ - 2096702, - 5858087 - ], - [ - 2096710, - 5858098 - ], - [ - 2096716, - 5858107 - ], - [ - 2096723, - 5858118 - ], - [ - 2096730, - 5858129 - ], - [ - 2096736, - 5858139 - ], - [ - 2096744, - 5858149 - ], - [ - 2096750, - 5858160 - ], - [ - 2096758, - 5858171 - ], - [ - 2096764, - 5858182 - ], - [ - 2096771, - 5858192 - ], - [ - 2096778, - 5858202 - ], - [ - 2096785, - 5858213 - ], - [ - 2096791, - 5858224 - ], - [ - 2096800, - 5858232 - ], - [ - 2096806, - 5858243 - ], - [ - 2096813, - 5858254 - ], - [ - 2096821, - 5858264 - ], - [ - 2096828, - 5858274 - ], - [ - 2096834, - 5858285 - ], - [ - 2096842, - 5858295 - ], - [ - 2096849, - 5858306 - ], - [ - 2096856, - 5858316 - ], - [ - 2096864, - 5858325 - ], - [ - 2096870, - 5858336 - ], - [ - 2096877, - 5858347 - ], - [ - 2096885, - 5858356 - ], - [ - 2096892, - 5858367 - ], - [ - 2096898, - 5858378 - ], - [ - 2096907, - 5858387 - ], - [ - 2096913, - 5858398 - ], - [ - 2096920, - 5858409 - ], - [ - 2096928, - 5858419 - ], - [ - 2096934, - 5858429 - ], - [ - 2096941, - 5858440 - ], - [ - 2096949, - 5858449 - ], - [ - 2096956, - 5858460 - ], - [ - 2096962, - 5858470 - ], - [ - 2096970, - 5858481 - ], - [ - 2096976, - 5858492 - ], - [ - 2096983, - 5858503 - ], - [ - 2096990, - 5858512 - ], - [ - 2096997, - 5858523 - ], - [ - 2097003, - 5858534 - ], - [ - 2097011, - 5858545 - ], - [ - 2097017, - 5858555 - ], - [ - 2097025, - 5858566 - ], - [ - 2097031, - 5858576 - ], - [ - 2097038, - 5858587 - ], - [ - 2097045, - 5858597 - ], - [ - 2097052, - 5858607 - ], - [ - 2097059, - 5858618 - ], - [ - 2097065, - 5858629 - ], - [ - 2097073, - 5858638 - ], - [ - 2097079, - 5858649 - ], - [ - 2097087, - 5858660 - ], - [ - 2097094, - 5858670 - ], - [ - 2097101, - 5858680 - ], - [ - 2097107, - 5858691 - ], - [ - 2097116, - 5858701 - ], - [ - 2097122, - 5858712 - ], - [ - 2097129, - 5858722 - ], - [ - 2097136, - 5858732 - ], - [ - 2097142, - 5858743 - ], - [ - 2097149, - 5858754 - ], - [ - 2097156, - 5858763 - ], - [ - 2097163, - 5858774 - ], - [ - 2097169, - 5858785 - ], - [ - 2097177, - 5858795 - ], - [ - 2097183, - 5858805 - ], - [ - 2097190, - 5858816 - ], - [ - 2097197, - 5858827 - ], - [ - 2097205, - 5858837 - ], - [ - 2097211, - 5858848 - ], - [ - 2097219, - 5858857 - ], - [ - 2097225, - 5858868 - ], - [ - 2097233, - 5858878 - ], - [ - 2097239, - 5858889 - ], - [ - 2097247, - 5858900 - ], - [ - 2097253, - 5858911 - ], - [ - 2097260, - 5858920 - ], - [ - 2097267, - 5858931 - ], - [ - 2097273, - 5858942 - ], - [ - 2097282, - 5858951 - ], - [ - 2097288, - 5858961 - ], - [ - 2097295, - 5858972 - ], - [ - 2097303, - 5858982 - ], - [ - 2097310, - 5858993 - ], - [ - 2097316, - 5859003 - ], - [ - 2097324, - 5859013 - ], - [ - 2097330, - 5859024 - ], - [ - 2097337, - 5859035 - ], - [ - 2097344, - 5859045 - ], - [ - 2097351, - 5859055 - ], - [ - 2097358, - 5859066 - ], - [ - 2097365, - 5859076 - ], - [ - 2097373, - 5859086 - ], - [ - 2097379, - 5859097 - ], - [ - 2097387, - 5859107 - ], - [ - 2097394, - 5859118 - ], - [ - 2097401, - 5859128 - ], - [ - 2097409, - 5859137 - ], - [ - 2097416, - 5859148 - ], - [ - 2097423, - 5859158 - ], - [ - 2097431, - 5859167 - ], - [ - 2097438, - 5859178 - ], - [ - 2097444, - 5859189 - ], - [ - 2097452, - 5859198 - ], - [ - 2097459, - 5859209 - ], - [ - 2097466, - 5859220 - ], - [ - 2097473, - 5859230 - ], - [ - 2097480, - 5859240 - ], - [ - 2097486, - 5859251 - ], - [ - 2097494, - 5859261 - ], - [ - 2097500, - 5859272 - ], - [ - 2097507, - 5859282 - ], - [ - 2097515, - 5859293 - ], - [ - 2097522, - 5859303 - ], - [ - 2097528, - 5859314 - ], - [ - 2097536, - 5859324 - ], - [ - 2097542, - 5859335 - ], - [ - 2097548, - 5859346 - ], - [ - 2097557, - 5859356 - ], - [ - 2097563, - 5859366 - ], - [ - 2097570, - 5859377 - ], - [ - 2097577, - 5859387 - ], - [ - 2097584, - 5859398 - ], - [ - 2097590, - 5859407 - ], - [ - 2097599, - 5859417 - ], - [ - 2097605, - 5859428 - ], - [ - 2097613, - 5859438 - ], - [ - 2097620, - 5859449 - ], - [ - 2097627, - 5859460 - ], - [ - 2097633, - 5859470 - ], - [ - 2097642, - 5859480 - ], - [ - 2097648, - 5859491 - ], - [ - 2097654, - 5859501 - ], - [ - 2097663, - 5859511 - ], - [ - 2097669, - 5859521 - ], - [ - 2097676, - 5859532 - ], - [ - 2097684, - 5859542 - ], - [ - 2097691, - 5859553 - ], - [ - 2097697, - 5859563 - ], - [ - 2097705, - 5859572 - ], - [ - 2097711, - 5859583 - ], - [ - 2097719, - 5859594 - ], - [ - 2097725, - 5859604 - ], - [ - 2097732, - 5859615 - ], - [ - 2097739, - 5859626 - ], - [ - 2097745, - 5859636 - ], - [ - 2097752, - 5859646 - ], - [ - 2097759, - 5859657 - ], - [ - 2097766, - 5859667 - ], - [ - 2097772, - 5859678 - ], - [ - 2097780, - 5859688 - ], - [ - 2097787, - 5859697 - ], - [ - 2097795, - 5859708 - ], - [ - 2097801, - 5859719 - ], - [ - 2097808, - 5859729 - ], - [ - 2097815, - 5859740 - ], - [ - 2097822, - 5859751 - ], - [ - 2097829, - 5859761 - ], - [ - 2097836, - 5859771 - ], - [ - 2097842, - 5859782 - ], - [ - 2097849, - 5859792 - ], - [ - 2097856, - 5859803 - ], - [ - 2097862, - 5859813 - ], - [ - 2097871, - 5859823 - ], - [ - 2097877, - 5859834 - ], - [ - 2097884, - 5859845 - ], - [ - 2097891, - 5859855 - ], - [ - 2097899, - 5859866 - ], - [ - 2097905, - 5859877 - ], - [ - 2097913, - 5859885 - ], - [ - 2097919, - 5859896 - ], - [ - 2097927, - 5859907 - ], - [ - 2097934, - 5859917 - ], - [ - 2097941, - 5859927 - ], - [ - 2097947, - 5859938 - ], - [ - 2097954, - 5859948 - ], - [ - 2097962, - 5859959 - ], - [ - 2097968, - 5859969 - ], - [ - 2097975, - 5859980 - ], - [ - 2097982, - 5859991 - ], - [ - 2097989, - 5860001 - ], - [ - 2097995, - 5860011 - ], - [ - 2098003, - 5860022 - ], - [ - 2098009, - 5860033 - ], - [ - 2098017, - 5860043 - ], - [ - 2098023, - 5860053 - ], - [ - 2098031, - 5860064 - ], - [ - 2098038, - 5860074 - ], - [ - 2098045, - 5860085 - ], - [ - 2098052, - 5860095 - ], - [ - 2098060, - 5860105 - ], - [ - 2098067, - 5860116 - ], - [ - 2098073, - 5860127 - ], - [ - 2098081, - 5860136 - ], - [ - 2098088, - 5860147 - ], - [ - 2098095, - 5860158 - ], - [ - 2098102, - 5860166 - ], - [ - 2098109, - 5860177 - ], - [ - 2098115, - 5860188 - ], - [ - 2098123, - 5860198 - ], - [ - 2098129, - 5860208 - ], - [ - 2098136, - 5860219 - ], - [ - 2098144, - 5860229 - ], - [ - 2098150, - 5860239 - ], - [ - 2098157, - 5860249 - ], - [ - 2098165, - 5860259 - ], - [ - 2098172, - 5860270 - ], - [ - 2098179, - 5860281 - ], - [ - 2098187, - 5860290 - ], - [ - 2098194, - 5860301 - ], - [ - 2098201, - 5860312 - ], - [ - 2098209, - 5860322 - ], - [ - 2098216, - 5860332 - ], - [ - 2098222, - 5860342 - ], - [ - 2098230, - 5860353 - ], - [ - 2098237, - 5860363 - ], - [ - 2098243, - 5860373 - ], - [ - 2098251, - 5860384 - ], - [ - 2098257, - 5860394 - ], - [ - 2098265, - 5860404 - ], - [ - 2098272, - 5860414 - ], - [ - 2098279, - 5860425 - ], - [ - 2098286, - 5860436 - ], - [ - 2098294, - 5860445 - ], - [ - 2098301, - 5860456 - ], - [ - 2098308, - 5860467 - ], - [ - 2098315, - 5860477 - ], - [ - 2098322, - 5860487 - ], - [ - 2098329, - 5860498 - ], - [ - 2098335, - 5860508 - ], - [ - 2098342, - 5860519 - ], - [ - 2098349, - 5860529 - ], - [ - 2098356, - 5860539 - ], - [ - 2098363, - 5860550 - ], - [ - 2098370, - 5860561 - ], - [ - 2098377, - 5860570 - ], - [ - 2098385, - 5860581 - ], - [ - 2098391, - 5860592 - ], - [ - 2098399, - 5860602 - ], - [ - 2098405, - 5860612 - ], - [ - 2098413, - 5860623 - ], - [ - 2098419, - 5860633 - ], - [ - 2098426, - 5860644 - ], - [ - 2098433, - 5860654 - ], - [ - 2098439, - 5860664 - ], - [ - 2098447, - 5860675 - ], - [ - 2098453, - 5860686 - ], - [ - 2098460, - 5860696 - ], - [ - 2098467, - 5860707 - ], - [ - 2098474, - 5860717 - ], - [ - 2098481, - 5860728 - ], - [ - 2098489, - 5860737 - ], - [ - 2098495, - 5860748 - ], - [ - 2098503, - 5860758 - ], - [ - 2098510, - 5860768 - ], - [ - 2098517, - 5860779 - ], - [ - 2098524, - 5860789 - ], - [ - 2098532, - 5860800 - ], - [ - 2098538, - 5860810 - ], - [ - 2098545, - 5860820 - ], - [ - 2098552, - 5860831 - ], - [ - 2098559, - 5860841 - ], - [ - 2098567, - 5860851 - ], - [ - 2098573, - 5860862 - ], - [ - 2098581, - 5860872 - ], - [ - 2098588, - 5860882 - ], - [ - 2098596, - 5860892 - ], - [ - 2098602, - 5860903 - ], - [ - 2098610, - 5860913 - ], - [ - 2098616, - 5860924 - ], - [ - 2098624, - 5860934 - ], - [ - 2098631, - 5860944 - ], - [ - 2098637, - 5860955 - ], - [ - 2098644, - 5860966 - ], - [ - 2098651, - 5860975 - ], - [ - 2098658, - 5860986 - ], - [ - 2098665, - 5860996 - ], - [ - 2098673, - 5861006 - ], - [ - 2098679, - 5861016 - ], - [ - 2098687, - 5861027 - ], - [ - 2098694, - 5861038 - ], - [ - 2098701, - 5861048 - ], - [ - 2098708, - 5861058 - ], - [ - 2098716, - 5861069 - ], - [ - 2098722, - 5861080 - ], - [ - 2098729, - 5861090 - ], - [ - 2098736, - 5861100 - ], - [ - 2098742, - 5861111 - ], - [ - 2098749, - 5861122 - ], - [ - 2098756, - 5861131 - ], - [ - 2098764, - 5861142 - ], - [ - 2098770, - 5861153 - ], - [ - 2098778, - 5861162 - ], - [ - 2098785, - 5861172 - ], - [ - 2098792, - 5861183 - ], - [ - 2098799, - 5861193 - ], - [ - 2098807, - 5861204 - ], - [ - 2098813, - 5861214 - ], - [ - 2098821, - 5861224 - ], - [ - 2098827, - 5861235 - ], - [ - 2098835, - 5861245 - ], - [ - 2098841, - 5861256 - ], - [ - 2098847, - 5861267 - ], - [ - 2098855, - 5861277 - ], - [ - 2098861, - 5861288 - ], - [ - 2098868, - 5861298 - ], - [ - 2098875, - 5861308 - ], - [ - 2098882, - 5861319 - ], - [ - 2098889, - 5861329 - ], - [ - 2098896, - 5861340 - ], - [ - 2098903, - 5861350 - ], - [ - 2098910, - 5861361 - ], - [ - 2098916, - 5861372 - ], - [ - 2098925, - 5861381 - ], - [ - 2098931, - 5861392 - ], - [ - 2098938, - 5861402 - ], - [ - 2098946, - 5861411 - ], - [ - 2098952, - 5861422 - ], - [ - 2098959, - 5861433 - ], - [ - 2098966, - 5861443 - ], - [ - 2098973, - 5861453 - ], - [ - 2098980, - 5861464 - ], - [ - 2098987, - 5861475 - ], - [ - 2098993, - 5861485 - ], - [ - 2099001, - 5861495 - ], - [ - 2099007, - 5861506 - ], - [ - 2099015, - 5861517 - ], - [ - 2099021, - 5861528 - ], - [ - 2099030, - 5861536 - ], - [ - 2099036, - 5861547 - ], - [ - 2099042, - 5861558 - ], - [ - 2099050, - 5861568 - ], - [ - 2099057, - 5861578 - ], - [ - 2099064, - 5861589 - ], - [ - 2099071, - 5861599 - ], - [ - 2099079, - 5861610 - ], - [ - 2099085, - 5861620 - ], - [ - 2099093, - 5861630 - ], - [ - 2099100, - 5861641 - ], - [ - 2099107, - 5861652 - ], - [ - 2099114, - 5861661 - ], - [ - 2099122, - 5861672 - ], - [ - 2099128, - 5861683 - ], - [ - 2099136, - 5861692 - ], - [ - 2099142, - 5861703 - ], - [ - 2099149, - 5861713 - ], - [ - 2099156, - 5861724 - ], - [ - 2099163, - 5861733 - ], - [ - 2099170, - 5861744 - ], - [ - 2099177, - 5861755 - ], - [ - 2099184, - 5861766 - ], - [ - 2099191, - 5861775 - ], - [ - 2099198, - 5861786 - ], - [ - 2099204, - 5861797 - ], - [ - 2099212, - 5861807 - ], - [ - 2099218, - 5861817 - ], - [ - 2099226, - 5861828 - ], - [ - 2099232, - 5861838 - ], - [ - 2099239, - 5861849 - ], - [ - 2099246, - 5861858 - ], - [ - 2099253, - 5861869 - ], - [ - 2099260, - 5861880 - ], - [ - 2099267, - 5861891 - ], - [ - 2099274, - 5861900 - ], - [ - 2099281, - 5861911 - ], - [ - 2099288, - 5861922 - ], - [ - 2099295, - 5861932 - ], - [ - 2099303, - 5861942 - ], - [ - 2099309, - 5861953 - ], - [ - 2099316, - 5861963 - ], - [ - 2099323, - 5861974 - ], - [ - 2099331, - 5861984 - ], - [ - 2099337, - 5861995 - ], - [ - 2099344, - 5862005 - ], - [ - 2099352, - 5862015 - ], - [ - 2099358, - 5862025 - ], - [ - 2099366, - 5862036 - ], - [ - 2099372, - 5862047 - ], - [ - 2099380, - 5862057 - ], - [ - 2099387, - 5862067 - ], - [ - 2099394, - 5862078 - ], - [ - 2099400, - 5862088 - ], - [ - 2099408, - 5862098 - ], - [ - 2099415, - 5862108 - ], - [ - 2099422, - 5862119 - ], - [ - 2099429, - 5862130 - ], - [ - 2099436, - 5862139 - ], - [ - 2099443, - 5862150 - ], - [ - 2099449, - 5862161 - ], - [ - 2099457, - 5862171 - ], - [ - 2099463, - 5862181 - ], - [ - 2099471, - 5862191 - ], - [ - 2099477, - 5862202 - ], - [ - 2099485, - 5862213 - ], - [ - 2099492, - 5862222 - ], - [ - 2099499, - 5862233 - ], - [ - 2099506, - 5862244 - ], - [ - 2099514, - 5862254 - ], - [ - 2099520, - 5862264 - ], - [ - 2099528, - 5862274 - ], - [ - 2099534, - 5862285 - ], - [ - 2099540, - 5862296 - ], - [ - 2099548, - 5862305 - ], - [ - 2099554, - 5862316 - ], - [ - 2099561, - 5862327 - ], - [ - 2099568, - 5862338 - ], - [ - 2099575, - 5862347 - ], - [ - 2099582, - 5862358 - ], - [ - 2099589, - 5862369 - ], - [ - 2099596, - 5862380 - ], - [ - 2099603, - 5862389 - ], - [ - 2099609, - 5862400 - ], - [ - 2099617, - 5862411 - ], - [ - 2099623, - 5862422 - ], - [ - 2099630, - 5862432 - ], - [ - 2099636, - 5862443 - ], - [ - 2099644, - 5862454 - ], - [ - 2099650, - 5862464 - ], - [ - 2099657, - 5862474 - ], - [ - 2099664, - 5862485 - ], - [ - 2099671, - 5862496 - ], - [ - 2099679, - 5862505 - ], - [ - 2099685, - 5862516 - ], - [ - 2099692, - 5862527 - ], - [ - 2099700, - 5862537 - ], - [ - 2099707, - 5862547 - ], - [ - 2099714, - 5862558 - ], - [ - 2099722, - 5862568 - ], - [ - 2099728, - 5862579 - ], - [ - 2099736, - 5862588 - ], - [ - 2099742, - 5862599 - ], - [ - 2099750, - 5862610 - ], - [ - 2099756, - 5862620 - ], - [ - 2099763, - 5862629 - ], - [ - 2099771, - 5862640 - ], - [ - 2099777, - 5862651 - ], - [ - 2099785, - 5862661 - ], - [ - 2099792, - 5862670 - ], - [ - 2099799, - 5862681 - ], - [ - 2099807, - 5862691 - ], - [ - 2099815, - 5862700 - ], - [ - 2099822, - 5862711 - ], - [ - 2099829, - 5862721 - ], - [ - 2099836, - 5862732 - ], - [ - 2099842, - 5862742 - ], - [ - 2099851, - 5862752 - ], - [ - 2099857, - 5862763 - ], - [ - 2099865, - 5862773 - ], - [ - 2099872, - 5862783 - ], - [ - 2099879, - 5862793 - ], - [ - 2099886, - 5862804 - ], - [ - 2099893, - 5862814 - ], - [ - 2099900, - 5862824 - ], - [ - 2099907, - 5862835 - ], - [ - 2099914, - 5862845 - ], - [ - 2099921, - 5862856 - ], - [ - 2099928, - 5862866 - ], - [ - 2099934, - 5862876 - ], - [ - 2099942, - 5862887 - ], - [ - 2099948, - 5862898 - ], - [ - 2099956, - 5862907 - ], - [ - 2099963, - 5862918 - ], - [ - 2099970, - 5862929 - ], - [ - 2099977, - 5862938 - ], - [ - 2099985, - 5862949 - ], - [ - 2099991, - 5862960 - ], - [ - 2099999, - 5862970 - ], - [ - 2100005, - 5862980 - ], - [ - 2100013, - 5862990 - ], - [ - 2100019, - 5863001 - ], - [ - 2100027, - 5863012 - ], - [ - 2100033, - 5863022 - ], - [ - 2100040, - 5863032 - ], - [ - 2100047, - 5863043 - ], - [ - 2100054, - 5863054 - ], - [ - 2100061, - 5863063 - ], - [ - 2100068, - 5863073 - ], - [ - 2100075, - 5863084 - ], - [ - 2100082, - 5863094 - ], - [ - 2100090, - 5863104 - ], - [ - 2100096, - 5863115 - ], - [ - 2100104, - 5863125 - ], - [ - 2100110, - 5863136 - ], - [ - 2100118, - 5863146 - ], - [ - 2100125, - 5863156 - ], - [ - 2100132, - 5863167 - ], - [ - 2100139, - 5863178 - ], - [ - 2100145, - 5863188 - ], - [ - 2100152, - 5863198 - ], - [ - 2100159, - 5863209 - ], - [ - 2100166, - 5863220 - ], - [ - 2100172, - 5863230 - ], - [ - 2100180, - 5863241 - ], - [ - 2100186, - 5863251 - ], - [ - 2100194, - 5863262 - ], - [ - 2100200, - 5863272 - ], - [ - 2100208, - 5863282 - ], - [ - 2100214, - 5863293 - ], - [ - 2100222, - 5863304 - ], - [ - 2100229, - 5863313 - ], - [ - 2100236, - 5863323 - ], - [ - 2100243, - 5863334 - ], - [ - 2100250, - 5863344 - ], - [ - 2100257, - 5863354 - ], - [ - 2100263, - 5863365 - ], - [ - 2100271, - 5863375 - ], - [ - 2100278, - 5863385 - ], - [ - 2100285, - 5863396 - ], - [ - 2100291, - 5863407 - ], - [ - 2100298, - 5863418 - ], - [ - 2100305, - 5863427 - ], - [ - 2100312, - 5863438 - ], - [ - 2100319, - 5863448 - ], - [ - 2100326, - 5863459 - ], - [ - 2100333, - 5863469 - ], - [ - 2100340, - 5863479 - ], - [ - 2100347, - 5863490 - ], - [ - 2100354, - 5863500 - ], - [ - 2100362, - 5863510 - ], - [ - 2100368, - 5863521 - ], - [ - 2100377, - 5863531 - ], - [ - 2100383, - 5863542 - ], - [ - 2100391, - 5863552 - ], - [ - 2100398, - 5863562 - ], - [ - 2100406, - 5863573 - ], - [ - 2100412, - 5863584 - ], - [ - 2100421, - 5863592 - ], - [ - 2100427, - 5863603 - ], - [ - 2100434, - 5863614 - ], - [ - 2100442, - 5863623 - ], - [ - 2100448, - 5863634 - ], - [ - 2100456, - 5863645 - ], - [ - 2100463, - 5863655 - ], - [ - 2100470, - 5863664 - ], - [ - 2100477, - 5863675 - ], - [ - 2100484, - 5863685 - ], - [ - 2100491, - 5863696 - ], - [ - 2100498, - 5863706 - ], - [ - 2100504, - 5863717 - ], - [ - 2100512, - 5863727 - ], - [ - 2100519, - 5863738 - ], - [ - 2100526, - 5863748 - ], - [ - 2100532, - 5863759 - ], - [ - 2100539, - 5863769 - ], - [ - 2100547, - 5863780 - ], - [ - 2100553, - 5863789 - ], - [ - 2100561, - 5863800 - ], - [ - 2100568, - 5863810 - ], - [ - 2100575, - 5863821 - ], - [ - 2100582, - 5863831 - ], - [ - 2100590, - 5863841 - ], - [ - 2100596, - 5863852 - ], - [ - 2100604, - 5863861 - ], - [ - 2100611, - 5863872 - ], - [ - 2100618, - 5863882 - ], - [ - 2100625, - 5863893 - ], - [ - 2100632, - 5863902 - ], - [ - 2100639, - 5863913 - ], - [ - 2100646, - 5863924 - ], - [ - 2100654, - 5863934 - ], - [ - 2100661, - 5863944 - ], - [ - 2100668, - 5863954 - ], - [ - 2100675, - 5863964 - ], - [ - 2100682, - 5863975 - ], - [ - 2100689, - 5863985 - ], - [ - 2100696, - 5863996 - ], - [ - 2100703, - 5864006 - ], - [ - 2100710, - 5864017 - ], - [ - 2100716, - 5864027 - ], - [ - 2100723, - 5864038 - ], - [ - 2100730, - 5864048 - ], - [ - 2100736, - 5864059 - ], - [ - 2100744, - 5864069 - ], - [ - 2100751, - 5864080 - ], - [ - 2100758, - 5864090 - ], - [ - 2100765, - 5864101 - ], - [ - 2100772, - 5864111 - ], - [ - 2100779, - 5864121 - ], - [ - 2100787, - 5864132 - ], - [ - 2100793, - 5864141 - ], - [ - 2100802, - 5864151 - ], - [ - 2100809, - 5864162 - ], - [ - 2100816, - 5864173 - ], - [ - 2100823, - 5864182 - ], - [ - 2100829, - 5864193 - ], - [ - 2100837, - 5864204 - ], - [ - 2100843, - 5864214 - ], - [ - 2100850, - 5864224 - ], - [ - 2100857, - 5864235 - ], - [ - 2100864, - 5864245 - ], - [ - 2100871, - 5864256 - ], - [ - 2100878, - 5864266 - ], - [ - 2100885, - 5864276 - ], - [ - 2100892, - 5864287 - ], - [ - 2100899, - 5864298 - ], - [ - 2100907, - 5864307 - ], - [ - 2100913, - 5864318 - ], - [ - 2100920, - 5864329 - ], - [ - 2100926, - 5864340 - ], - [ - 2100933, - 5864349 - ], - [ - 2100940, - 5864360 - ], - [ - 2100947, - 5864371 - ], - [ - 2100954, - 5864381 - ], - [ - 2100961, - 5864391 - ], - [ - 2100968, - 5864402 - ], - [ - 2100975, - 5864412 - ], - [ - 2100982, - 5864423 - ], - [ - 2100990, - 5864432 - ], - [ - 2100997, - 5864443 - ], - [ - 2101004, - 5864454 - ], - [ - 2101012, - 5864463 - ], - [ - 2101018, - 5864474 - ], - [ - 2101025, - 5864485 - ], - [ - 2101033, - 5864495 - ], - [ - 2101039, - 5864505 - ], - [ - 2101047, - 5864516 - ], - [ - 2101053, - 5864526 - ], - [ - 2101061, - 5864537 - ], - [ - 2101067, - 5864546 - ], - [ - 2101075, - 5864557 - ], - [ - 2101081, - 5864568 - ], - [ - 2101089, - 5864579 - ], - [ - 2101096, - 5864588 - ], - [ - 2101103, - 5864598 - ], - [ - 2101110, - 5864609 - ], - [ - 2101117, - 5864620 - ], - [ - 2101123, - 5864630 - ], - [ - 2101130, - 5864640 - ], - [ - 2101137, - 5864650 - ], - [ - 2101144, - 5864661 - ], - [ - 2101152, - 5864671 - ], - [ - 2101158, - 5864681 - ], - [ - 2101166, - 5864692 - ], - [ - 2101172, - 5864702 - ], - [ - 2101180, - 5864712 - ], - [ - 2101187, - 5864722 - ], - [ - 2101194, - 5864733 - ], - [ - 2101201, - 5864744 - ], - [ - 2101208, - 5864754 - ], - [ - 2101215, - 5864764 - ], - [ - 2101221, - 5864775 - ], - [ - 2101229, - 5864785 - ], - [ - 2101235, - 5864796 - ], - [ - 2101243, - 5864807 - ], - [ - 2101249, - 5864817 - ], - [ - 2101257, - 5864827 - ], - [ - 2101263, - 5864838 - ], - [ - 2101271, - 5864849 - ], - [ - 2101277, - 5864859 - ], - [ - 2101285, - 5864869 - ], - [ - 2101291, - 5864879 - ], - [ - 2101299, - 5864890 - ], - [ - 2101305, - 5864901 - ], - [ - 2101313, - 5864910 - ], - [ - 2101319, - 5864921 - ], - [ - 2101326, - 5864931 - ], - [ - 2101334, - 5864942 - ], - [ - 2101340, - 5864952 - ], - [ - 2101348, - 5864962 - ], - [ - 2101354, - 5864973 - ], - [ - 2101362, - 5864984 - ], - [ - 2101368, - 5864993 - ], - [ - 2101376, - 5865004 - ], - [ - 2101383, - 5865015 - ], - [ - 2101390, - 5865025 - ], - [ - 2101396, - 5865035 - ], - [ - 2101404, - 5865046 - ], - [ - 2101411, - 5865056 - ], - [ - 2101418, - 5865067 - ], - [ - 2101425, - 5865076 - ], - [ - 2101431, - 5865087 - ], - [ - 2101439, - 5865098 - ], - [ - 2101445, - 5865108 - ], - [ - 2101453, - 5865118 - ], - [ - 2101459, - 5865129 - ], - [ - 2101467, - 5865139 - ], - [ - 2101473, - 5865150 - ], - [ - 2101481, - 5865160 - ], - [ - 2101487, - 5865171 - ], - [ - 2101495, - 5865181 - ], - [ - 2101501, - 5865192 - ], - [ - 2101509, - 5865202 - ], - [ - 2101516, - 5865212 - ], - [ - 2101522, - 5865223 - ], - [ - 2101530, - 5865233 - ], - [ - 2101536, - 5865243 - ], - [ - 2101544, - 5865254 - ], - [ - 2101550, - 5865265 - ], - [ - 2101559, - 5865273 - ], - [ - 2101565, - 5865284 - ], - [ - 2101573, - 5865295 - ], - [ - 2101580, - 5865305 - ], - [ - 2101587, - 5865315 - ], - [ - 2101594, - 5865326 - ], - [ - 2101601, - 5865336 - ], - [ - 2101608, - 5865346 - ], - [ - 2101614, - 5865356 - ], - [ - 2101622, - 5865366 - ], - [ - 2101629, - 5865377 - ], - [ - 2101636, - 5865388 - ], - [ - 2101643, - 5865398 - ], - [ - 2101650, - 5865408 - ], - [ - 2101657, - 5865419 - ], - [ - 2101664, - 5865430 - ], - [ - 2101671, - 5865439 - ], - [ - 2101679, - 5865450 - ], - [ - 2101685, - 5865461 - ], - [ - 2101692, - 5865471 - ], - [ - 2101699, - 5865481 - ], - [ - 2101706, - 5865491 - ], - [ - 2101714, - 5865502 - ], - [ - 2101720, - 5865512 - ], - [ - 2101727, - 5865523 - ], - [ - 2101734, - 5865533 - ], - [ - 2101741, - 5865544 - ], - [ - 2101747, - 5865554 - ], - [ - 2101755, - 5865564 - ], - [ - 2101762, - 5865575 - ], - [ - 2101769, - 5865586 - ], - [ - 2101776, - 5865595 - ], - [ - 2101784, - 5865606 - ], - [ - 2101790, - 5865616 - ], - [ - 2101798, - 5865627 - ], - [ - 2101804, - 5865637 - ], - [ - 2101811, - 5865647 - ], - [ - 2101819, - 5865658 - ], - [ - 2101825, - 5865668 - ], - [ - 2101833, - 5865678 - ], - [ - 2101839, - 5865689 - ], - [ - 2101847, - 5865700 - ], - [ - 2101853, - 5865710 - ], - [ - 2101861, - 5865720 - ], - [ - 2101867, - 5865730 - ], - [ - 2101875, - 5865741 - ], - [ - 2101882, - 5865751 - ], - [ - 2101889, - 5865761 - ], - [ - 2101896, - 5865771 - ], - [ - 2101904, - 5865782 - ], - [ - 2101910, - 5865792 - ], - [ - 2101917, - 5865802 - ], - [ - 2101925, - 5865813 - ], - [ - 2101931, - 5865824 - ], - [ - 2101939, - 5865833 - ], - [ - 2101945, - 5865844 - ], - [ - 2101953, - 5865855 - ], - [ - 2101959, - 5865865 - ], - [ - 2101967, - 5865875 - ], - [ - 2101973, - 5865886 - ], - [ - 2101981, - 5865896 - ], - [ - 2101987, - 5865907 - ], - [ - 2101995, - 5865917 - ], - [ - 2102001, - 5865927 - ], - [ - 2102008, - 5865938 - ], - [ - 2102015, - 5865949 - ], - [ - 2102022, - 5865958 - ], - [ - 2102029, - 5865969 - ], - [ - 2102036, - 5865980 - ], - [ - 2102043, - 5865990 - ], - [ - 2102050, - 5866000 - ], - [ - 2102057, - 5866011 - ], - [ - 2102063, - 5866022 - ], - [ - 2102071, - 5866032 - ], - [ - 2102077, - 5866042 - ], - [ - 2102084, - 5866053 - ], - [ - 2102091, - 5866064 - ], - [ - 2102098, - 5866074 - ], - [ - 2102105, - 5866083 - ], - [ - 2102112, - 5866094 - ], - [ - 2102119, - 5866105 - ], - [ - 2102127, - 5866115 - ], - [ - 2102134, - 5866124 - ], - [ - 2102141, - 5866135 - ], - [ - 2102148, - 5866146 - ], - [ - 2102154, - 5866157 - ], - [ - 2102162, - 5866166 - ], - [ - 2102168, - 5866178 - ], - [ - 2102176, - 5866188 - ], - [ - 2102182, - 5866199 - ], - [ - 2102190, - 5866209 - ], - [ - 2102196, - 5866219 - ], - [ - 2102204, - 5866230 - ], - [ - 2102210, - 5866240 - ], - [ - 2102217, - 5866250 - ], - [ - 2102224, - 5866261 - ], - [ - 2102231, - 5866272 - ], - [ - 2102238, - 5866281 - ], - [ - 2102245, - 5866292 - ], - [ - 2102252, - 5866303 - ], - [ - 2102259, - 5866313 - ], - [ - 2102266, - 5866323 - ], - [ - 2102273, - 5866334 - ], - [ - 2102280, - 5866345 - ], - [ - 2102287, - 5866355 - ], - [ - 2102294, - 5866365 - ], - [ - 2102301, - 5866375 - ], - [ - 2102308, - 5866386 - ], - [ - 2102315, - 5866397 - ], - [ - 2102322, - 5866406 - ], - [ - 2102329, - 5866417 - ], - [ - 2102336, - 5866427 - ], - [ - 2102343, - 5866438 - ], - [ - 2102350, - 5866448 - ], - [ - 2102358, - 5866458 - ], - [ - 2102364, - 5866469 - ], - [ - 2102372, - 5866479 - ], - [ - 2102378, - 5866489 - ], - [ - 2102386, - 5866500 - ], - [ - 2102393, - 5866510 - ], - [ - 2102400, - 5866521 - ], - [ - 2102407, - 5866531 - ], - [ - 2102414, - 5866541 - ], - [ - 2102421, - 5866552 - ], - [ - 2102428, - 5866561 - ], - [ - 2102435, - 5866572 - ], - [ - 2102442, - 5866582 - ], - [ - 2102450, - 5866593 - ], - [ - 2102457, - 5866603 - ], - [ - 2102465, - 5866613 - ], - [ - 2102471, - 5866623 - ], - [ - 2102479, - 5866634 - ], - [ - 2102486, - 5866643 - ], - [ - 2102493, - 5866654 - ], - [ - 2102500, - 5866665 - ], - [ - 2102507, - 5866675 - ], - [ - 2102514, - 5866684 - ], - [ - 2102521, - 5866695 - ], - [ - 2102529, - 5866705 - ], - [ - 2102536, - 5866715 - ], - [ - 2102543, - 5866726 - ], - [ - 2102551, - 5866736 - ], - [ - 2102558, - 5866746 - ], - [ - 2102565, - 5866756 - ], - [ - 2102574, - 5866766 - ], - [ - 2102581, - 5866776 - ], - [ - 2102588, - 5866787 - ], - [ - 2102597, - 5866795 - ], - [ - 2102603, - 5866806 - ], - [ - 2102611, - 5866817 - ], - [ - 2102618, - 5866825 - ], - [ - 2102626, - 5866836 - ], - [ - 2102633, - 5866847 - ], - [ - 2102641, - 5866857 - ], - [ - 2102648, - 5866866 - ], - [ - 2102656, - 5866877 - ], - [ - 2102663, - 5866887 - ], - [ - 2102669, - 5866897 - ], - [ - 2102677, - 5866907 - ], - [ - 2102683, - 5866917 - ], - [ - 2102691, - 5866928 - ], - [ - 2102698, - 5866938 - ], - [ - 2102706, - 5866948 - ], - [ - 2102713, - 5866958 - ], - [ - 2102721, - 5866969 - ], - [ - 2102727, - 5866979 - ], - [ - 2102734, - 5866990 - ], - [ - 2102741, - 5867001 - ], - [ - 2102749, - 5867011 - ], - [ - 2102756, - 5867020 - ], - [ - 2102763, - 5867031 - ], - [ - 2102769, - 5867042 - ], - [ - 2102775, - 5867053 - ], - [ - 2102783, - 5867062 - ], - [ - 2102790, - 5867073 - ], - [ - 2102797, - 5867083 - ], - [ - 2102804, - 5867094 - ], - [ - 2102811, - 5867104 - ], - [ - 2102818, - 5867115 - ], - [ - 2102825, - 5867125 - ], - [ - 2102832, - 5867136 - ], - [ - 2102840, - 5867145 - ], - [ - 2102847, - 5867156 - ], - [ - 2102853, - 5867166 - ], - [ - 2102861, - 5867177 - ], - [ - 2102867, - 5867187 - ], - [ - 2102875, - 5867197 - ], - [ - 2102881, - 5867208 - ], - [ - 2102889, - 5867218 - ], - [ - 2102895, - 5867229 - ], - [ - 2102902, - 5867239 - ], - [ - 2102909, - 5867250 - ], - [ - 2102916, - 5867261 - ], - [ - 2102922, - 5867271 - ], - [ - 2102930, - 5867282 - ], - [ - 2102936, - 5867292 - ], - [ - 2102944, - 5867302 - ], - [ - 2102950, - 5867312 - ], - [ - 2102957, - 5867323 - ], - [ - 2102965, - 5867333 - ], - [ - 2102971, - 5867343 - ], - [ - 2102980, - 5867353 - ], - [ - 2102986, - 5867364 - ], - [ - 2102994, - 5867375 - ], - [ - 2103000, - 5867385 - ], - [ - 2103008, - 5867395 - ], - [ - 2103014, - 5867406 - ], - [ - 2103021, - 5867417 - ], - [ - 2103028, - 5867427 - ], - [ - 2103035, - 5867438 - ], - [ - 2103042, - 5867448 - ], - [ - 2103049, - 5867459 - ], - [ - 2103056, - 5867468 - ], - [ - 2103062, - 5867479 - ], - [ - 2103070, - 5867489 - ], - [ - 2103076, - 5867500 - ], - [ - 2103083, - 5867510 - ], - [ - 2103090, - 5867521 - ], - [ - 2103097, - 5867532 - ], - [ - 2103104, - 5867542 - ], - [ - 2103112, - 5867551 - ], - [ - 2103118, - 5867562 - ], - [ - 2103125, - 5867573 - ], - [ - 2103132, - 5867584 - ], - [ - 2103139, - 5867593 - ], - [ - 2103146, - 5867604 - ], - [ - 2103152, - 5867614 - ], - [ - 2103160, - 5867625 - ], - [ - 2103166, - 5867635 - ], - [ - 2103173, - 5867646 - ], - [ - 2103180, - 5867657 - ], - [ - 2103188, - 5867667 - ], - [ - 2103194, - 5867677 - ], - [ - 2103201, - 5867688 - ], - [ - 2103208, - 5867698 - ], - [ - 2103215, - 5867709 - ], - [ - 2103222, - 5867719 - ], - [ - 2103229, - 5867730 - ], - [ - 2103236, - 5867741 - ], - [ - 2103243, - 5867752 - ], - [ - 2103249, - 5867761 - ], - [ - 2103257, - 5867772 - ], - [ - 2103263, - 5867783 - ], - [ - 2103270, - 5867793 - ], - [ - 2103277, - 5867803 - ], - [ - 2103283, - 5867814 - ], - [ - 2103291, - 5867824 - ], - [ - 2103298, - 5867835 - ], - [ - 2103305, - 5867845 - ], - [ - 2103312, - 5867855 - ], - [ - 2103319, - 5867866 - ], - [ - 2103326, - 5867875 - ], - [ - 2103334, - 5867885 - ], - [ - 2103340, - 5867896 - ], - [ - 2103348, - 5867907 - ], - [ - 2103355, - 5867916 - ], - [ - 2103363, - 5867927 - ], - [ - 2103369, - 5867938 - ], - [ - 2103376, - 5867948 - ], - [ - 2103384, - 5867957 - ], - [ - 2103390, - 5867968 - ], - [ - 2103399, - 5867978 - ], - [ - 2103405, - 5867989 - ], - [ - 2103412, - 5867999 - ], - [ - 2103420, - 5868009 - ], - [ - 2103427, - 5868020 - ], - [ - 2103434, - 5868030 - ], - [ - 2103442, - 5868039 - ], - [ - 2103449, - 5868050 - ], - [ - 2103455, - 5868061 - ], - [ - 2103464, - 5868070 - ], - [ - 2103470, - 5868081 - ], - [ - 2103478, - 5868091 - ], - [ - 2103485, - 5868101 - ], - [ - 2103492, - 5868111 - ], - [ - 2103499, - 5868122 - ], - [ - 2103506, - 5868132 - ], - [ - 2103513, - 5868143 - ], - [ - 2103520, - 5868153 - ], - [ - 2103527, - 5868163 - ], - [ - 2103534, - 5868174 - ], - [ - 2103541, - 5868185 - ], - [ - 2103547, - 5868194 - ], - [ - 2103555, - 5868205 - ], - [ - 2103561, - 5868216 - ], - [ - 2103569, - 5868226 - ], - [ - 2103575, - 5868236 - ], - [ - 2103583, - 5868247 - ], - [ - 2103590, - 5868257 - ], - [ - 2103597, - 5868268 - ], - [ - 2103603, - 5868278 - ], - [ - 2103611, - 5868288 - ], - [ - 2103618, - 5868299 - ], - [ - 2103625, - 5868310 - ], - [ - 2103631, - 5868319 - ], - [ - 2103639, - 5868330 - ], - [ - 2103645, - 5868341 - ], - [ - 2103652, - 5868350 - ], - [ - 2103660, - 5868361 - ], - [ - 2103666, - 5868372 - ], - [ - 2103673, - 5868382 - ], - [ - 2103680, - 5868392 - ], - [ - 2103687, - 5868403 - ], - [ - 2103694, - 5868414 - ], - [ - 2103701, - 5868425 - ], - [ - 2103707, - 5868434 - ], - [ - 2103715, - 5868445 - ], - [ - 2103721, - 5868456 - ], - [ - 2103729, - 5868467 - ], - [ - 2103736, - 5868476 - ], - [ - 2103743, - 5868487 - ], - [ - 2103750, - 5868498 - ], - [ - 2103756, - 5868508 - ], - [ - 2103763, - 5868518 - ], - [ - 2103770, - 5868529 - ], - [ - 2103777, - 5868539 - ], - [ - 2103784, - 5868550 - ], - [ - 2103791, - 5868560 - ], - [ - 2103798, - 5868570 - ], - [ - 2103805, - 5868581 - ], - [ - 2103812, - 5868592 - ], - [ - 2103820, - 5868601 - ], - [ - 2103826, - 5868612 - ], - [ - 2103834, - 5868622 - ], - [ - 2103841, - 5868633 - ], - [ - 2103847, - 5868642 - ], - [ - 2103855, - 5868653 - ], - [ - 2103862, - 5868663 - ], - [ - 2103869, - 5868674 - ], - [ - 2103875, - 5868684 - ], - [ - 2103884, - 5868694 - ], - [ - 2103891, - 5868704 - ], - [ - 2103898, - 5868715 - ], - [ - 2103905, - 5868725 - ], - [ - 2103912, - 5868735 - ], - [ - 2103918, - 5868746 - ], - [ - 2103926, - 5868756 - ], - [ - 2103933, - 5868767 - ], - [ - 2103940, - 5868777 - ], - [ - 2103947, - 5868788 - ], - [ - 2103953, - 5868798 - ], - [ - 2103961, - 5868808 - ], - [ - 2103968, - 5868818 - ], - [ - 2103976, - 5868829 - ], - [ - 2103982, - 5868839 - ], - [ - 2103991, - 5868848 - ], - [ - 2103997, - 5868859 - ], - [ - 2104005, - 5868870 - ], - [ - 2104012, - 5868879 - ], - [ - 2104019, - 5868890 - ], - [ - 2104026, - 5868901 - ], - [ - 2104033, - 5868910 - ], - [ - 2104040, - 5868920 - ], - [ - 2104047, - 5868931 - ], - [ - 2104054, - 5868942 - ], - [ - 2104061, - 5868952 - ], - [ - 2104068, - 5868962 - ], - [ - 2104075, - 5868973 - ], - [ - 2104083, - 5868983 - ], - [ - 2104089, - 5868993 - ], - [ - 2104097, - 5869004 - ], - [ - 2104103, - 5869015 - ], - [ - 2104110, - 5869025 - ], - [ - 2104118, - 5869035 - ], - [ - 2104125, - 5869045 - ], - [ - 2104131, - 5869056 - ], - [ - 2104137, - 5869067 - ], - [ - 2104145, - 5869077 - ], - [ - 2104151, - 5869088 - ], - [ - 2104159, - 5869098 - ], - [ - 2104165, - 5869109 - ], - [ - 2104172, - 5869119 - ], - [ - 2104179, - 5869129 - ], - [ - 2104186, - 5869140 - ], - [ - 2104193, - 5869151 - ], - [ - 2104201, - 5869161 - ], - [ - 2104207, - 5869172 - ], - [ - 2104214, - 5869183 - ], - [ - 2104220, - 5869193 - ], - [ - 2104228, - 5869203 - ], - [ - 2104234, - 5869214 - ], - [ - 2104242, - 5869224 - ], - [ - 2104248, - 5869235 - ], - [ - 2104255, - 5869245 - ], - [ - 2104263, - 5869254 - ], - [ - 2104269, - 5869265 - ], - [ - 2104276, - 5869276 - ], - [ - 2104284, - 5869285 - ], - [ - 2104291, - 5869296 - ], - [ - 2104297, - 5869307 - ], - [ - 2104305, - 5869317 - ], - [ - 2104311, - 5869327 - ], - [ - 2104319, - 5869338 - ], - [ - 2104325, - 5869349 - ], - [ - 2104333, - 5869360 - ], - [ - 2104339, - 5869370 - ], - [ - 2104346, - 5869380 - ], - [ - 2104353, - 5869391 - ], - [ - 2104359, - 5869402 - ], - [ - 2104366, - 5869411 - ], - [ - 2104372, - 5869422 - ], - [ - 2104380, - 5869433 - ], - [ - 2104387, - 5869444 - ], - [ - 2104394, - 5869454 - ], - [ - 2104400, - 5869464 - ], - [ - 2104408, - 5869475 - ], - [ - 2104414, - 5869485 - ], - [ - 2104422, - 5869495 - ], - [ - 2104429, - 5869505 - ], - [ - 2104436, - 5869516 - ], - [ - 2104442, - 5869527 - ], - [ - 2104450, - 5869536 - ], - [ - 2104457, - 5869547 - ], - [ - 2104463, - 5869558 - ], - [ - 2104471, - 5869568 - ], - [ - 2104477, - 5869578 - ], - [ - 2104485, - 5869589 - ], - [ - 2104492, - 5869599 - ], - [ - 2104499, - 5869609 - ], - [ - 2104506, - 5869620 - ], - [ - 2104514, - 5869630 - ], - [ - 2104520, - 5869641 - ], - [ - 2104528, - 5869651 - ], - [ - 2104535, - 5869661 - ], - [ - 2104542, - 5869671 - ], - [ - 2104549, - 5869682 - ], - [ - 2104556, - 5869691 - ], - [ - 2104564, - 5869702 - ], - [ - 2104570, - 5869713 - ], - [ - 2104579, - 5869723 - ], - [ - 2104585, - 5869732 - ], - [ - 2104592, - 5869743 - ], - [ - 2104599, - 5869754 - ], - [ - 2104607, - 5869764 - ], - [ - 2104613, - 5869774 - ], - [ - 2104622, - 5869784 - ], - [ - 2104628, - 5869795 - ], - [ - 2104635, - 5869806 - ], - [ - 2104642, - 5869815 - ], - [ - 2104649, - 5869826 - ], - [ - 2104656, - 5869837 - ], - [ - 2104664, - 5869846 - ], - [ - 2104671, - 5869856 - ], - [ - 2104677, - 5869867 - ], - [ - 2104685, - 5869878 - ], - [ - 2104691, - 5869888 - ], - [ - 2104698, - 5869899 - ], - [ - 2104705, - 5869909 - ], - [ - 2104712, - 5869920 - ], - [ - 2104719, - 5869930 - ], - [ - 2104726, - 5869940 - ], - [ - 2104732, - 5869951 - ], - [ - 2104739, - 5869962 - ], - [ - 2104746, - 5869972 - ], - [ - 2104753, - 5869982 - ], - [ - 2104760, - 5869993 - ], - [ - 2104766, - 5870004 - ], - [ - 2104774, - 5870014 - ], - [ - 2104780, - 5870024 - ], - [ - 2104787, - 5870035 - ], - [ - 2104794, - 5870046 - ], - [ - 2104801, - 5870056 - ], - [ - 2104807, - 5870066 - ], - [ - 2104814, - 5870077 - ], - [ - 2104821, - 5870088 - ], - [ - 2104829, - 5870097 - ], - [ - 2104835, - 5870108 - ], - [ - 2104842, - 5870119 - ], - [ - 2104850, - 5870129 - ], - [ - 2104856, - 5870139 - ], - [ - 2104863, - 5870150 - ], - [ - 2104871, - 5870160 - ], - [ - 2104878, - 5870171 - ], - [ - 2104884, - 5870181 - ], - [ - 2104892, - 5870192 - ], - [ - 2104898, - 5870203 - ], - [ - 2104905, - 5870214 - ], - [ - 2104912, - 5870223 - ], - [ - 2104919, - 5870234 - ], - [ - 2104925, - 5870245 - ], - [ - 2104934, - 5870254 - ], - [ - 2104940, - 5870264 - ], - [ - 2104946, - 5870275 - ], - [ - 2104955, - 5870285 - ], - [ - 2104961, - 5870296 - ], - [ - 2104968, - 5870306 - ], - [ - 2104977, - 5870316 - ], - [ - 2104984, - 5870326 - ], - [ - 2104990, - 5870336 - ], - [ - 2104998, - 5870346 - ], - [ - 2105004, - 5870357 - ], - [ - 2105012, - 5870368 - ], - [ - 2105019, - 5870377 - ], - [ - 2105026, - 5870388 - ], - [ - 2105033, - 5870399 - ], - [ - 2105040, - 5870408 - ], - [ - 2105048, - 5870418 - ], - [ - 2105054, - 5870429 - ], - [ - 2105063, - 5870439 - ], - [ - 2105069, - 5870449 - ], - [ - 2105077, - 5870459 - ], - [ - 2105084, - 5870469 - ], - [ - 2105091, - 5870480 - ], - [ - 2105098, - 5870490 - ], - [ - 2105106, - 5870499 - ], - [ - 2105113, - 5870510 - ], - [ - 2105119, - 5870521 - ], - [ - 2105127, - 5870530 - ], - [ - 2105133, - 5870541 - ], - [ - 2105140, - 5870552 - ], - [ - 2105147, - 5870562 - ], - [ - 2105155, - 5870572 - ], - [ - 2105161, - 5870583 - ], - [ - 2105169, - 5870594 - ], - [ - 2105175, - 5870605 - ], - [ - 2105183, - 5870614 - ], - [ - 2105189, - 5870625 - ], - [ - 2105196, - 5870636 - ], - [ - 2105203, - 5870647 - ], - [ - 2105211, - 5870656 - ], - [ - 2105217, - 5870666 - ], - [ - 2105223, - 5870677 - ], - [ - 2105231, - 5870688 - ], - [ - 2105237, - 5870698 - ], - [ - 2105245, - 5870709 - ], - [ - 2105251, - 5870719 - ], - [ - 2105259, - 5870730 - ], - [ - 2105265, - 5870740 - ], - [ - 2105273, - 5870750 - ], - [ - 2105280, - 5870761 - ], - [ - 2105287, - 5870772 - ], - [ - 2105295, - 5870781 - ], - [ - 2105302, - 5870792 - ], - [ - 2105308, - 5870803 - ], - [ - 2105317, - 5870813 - ], - [ - 2105323, - 5870823 - ], - [ - 2105329, - 5870833 - ], - [ - 2105337, - 5870844 - ], - [ - 2105343, - 5870855 - ], - [ - 2105351, - 5870865 - ], - [ - 2105359, - 5870874 - ], - [ - 2105366, - 5870885 - ], - [ - 2105372, - 5870895 - ], - [ - 2105380, - 5870905 - ], - [ - 2105387, - 5870916 - ], - [ - 2105394, - 5870927 - ], - [ - 2105401, - 5870936 - ], - [ - 2105409, - 5870947 - ], - [ - 2105415, - 5870958 - ], - [ - 2105422, - 5870968 - ], - [ - 2105429, - 5870977 - ], - [ - 2105436, - 5870988 - ], - [ - 2105444, - 5870998 - ], - [ - 2105451, - 5871008 - ], - [ - 2105458, - 5871018 - ], - [ - 2105466, - 5871028 - ], - [ - 2105474, - 5871038 - ], - [ - 2105480, - 5871049 - ], - [ - 2105489, - 5871058 - ], - [ - 2105495, - 5871069 - ], - [ - 2105502, - 5871079 - ], - [ - 2105510, - 5871089 - ], - [ - 2105516, - 5871100 - ], - [ - 2105524, - 5871111 - ], - [ - 2105530, - 5871121 - ], - [ - 2105537, - 5871131 - ], - [ - 2105544, - 5871142 - ], - [ - 2105551, - 5871152 - ], - [ - 2105557, - 5871163 - ], - [ - 2105565, - 5871173 - ], - [ - 2105570, - 5871184 - ], - [ - 2105578, - 5871195 - ], - [ - 2105584, - 5871206 - ], - [ - 2105592, - 5871215 - ], - [ - 2105598, - 5871226 - ], - [ - 2105605, - 5871237 - ], - [ - 2105613, - 5871247 - ], - [ - 2105619, - 5871257 - ], - [ - 2105627, - 5871268 - ], - [ - 2105634, - 5871278 - ], - [ - 2105641, - 5871289 - ], - [ - 2105647, - 5871299 - ], - [ - 2105656, - 5871309 - ], - [ - 2105662, - 5871320 - ], - [ - 2105669, - 5871331 - ], - [ - 2105676, - 5871340 - ], - [ - 2105683, - 5871351 - ], - [ - 2105690, - 5871362 - ], - [ - 2105698, - 5871371 - ], - [ - 2105705, - 5871381 - ], - [ - 2105711, - 5871392 - ], - [ - 2105719, - 5871402 - ], - [ - 2105726, - 5871412 - ], - [ - 2105733, - 5871423 - ], - [ - 2105740, - 5871433 - ], - [ - 2105747, - 5871444 - ], - [ - 2105753, - 5871455 - ], - [ - 2105761, - 5871465 - ], - [ - 2105767, - 5871475 - ], - [ - 2105774, - 5871486 - ], - [ - 2105781, - 5871496 - ], - [ - 2105788, - 5871507 - ], - [ - 2105794, - 5871518 - ], - [ - 2105802, - 5871528 - ], - [ - 2105808, - 5871539 - ], - [ - 2105815, - 5871549 - ], - [ - 2105823, - 5871559 - ], - [ - 2105829, - 5871570 - ], - [ - 2105837, - 5871580 - ], - [ - 2105843, - 5871590 - ], - [ - 2105851, - 5871601 - ], - [ - 2105857, - 5871612 - ], - [ - 2105866, - 5871620 - ], - [ - 2105872, - 5871631 - ], - [ - 2105880, - 5871642 - ], - [ - 2105888, - 5871652 - ], - [ - 2105895, - 5871661 - ], - [ - 2105902, - 5871672 - ], - [ - 2105911, - 5871681 - ], - [ - 2105918, - 5871691 - ], - [ - 2105924, - 5871702 - ], - [ - 2105933, - 5871711 - ], - [ - 2105940, - 5871722 - ], - [ - 2105947, - 5871732 - ], - [ - 2105955, - 5871741 - ], - [ - 2105963, - 5871752 - ], - [ - 2105969, - 5871763 - ], - [ - 2105977, - 5871772 - ], - [ - 2105984, - 5871782 - ], - [ - 2105991, - 5871793 - ], - [ - 2105999, - 5871802 - ], - [ - 2106006, - 5871812 - ], - [ - 2106013, - 5871823 - ], - [ - 2106021, - 5871833 - ], - [ - 2106028, - 5871843 - ], - [ - 2106034, - 5871854 - ], - [ - 2106042, - 5871865 - ], - [ - 2106049, - 5871875 - ], - [ - 2106056, - 5871885 - ], - [ - 2106063, - 5871896 - ], - [ - 2106070, - 5871907 - ], - [ - 2106076, - 5871918 - ], - [ - 2106083, - 5871928 - ], - [ - 2106090, - 5871939 - ], - [ - 2106096, - 5871950 - ], - [ - 2106104, - 5871960 - ], - [ - 2106110, - 5871970 - ], - [ - 2106118, - 5871981 - ], - [ - 2106124, - 5871992 - ], - [ - 2106132, - 5872003 - ], - [ - 2106138, - 5872013 - ], - [ - 2106146, - 5872022 - ], - [ - 2106152, - 5872033 - ], - [ - 2106159, - 5872044 - ], - [ - 2106167, - 5872052 - ], - [ - 2106173, - 5872063 - ], - [ - 2106180, - 5872074 - ], - [ - 2106188, - 5872084 - ], - [ - 2106195, - 5872094 - ], - [ - 2106201, - 5872104 - ], - [ - 2106211, - 5872114 - ], - [ - 2106217, - 5872124 - ], - [ - 2106224, - 5872135 - ], - [ - 2106232, - 5872144 - ], - [ - 2106239, - 5872155 - ], - [ - 2106245, - 5872165 - ], - [ - 2106254, - 5872174 - ], - [ - 2106261, - 5872185 - ], - [ - 2106268, - 5872196 - ], - [ - 2106276, - 5872205 - ], - [ - 2106282, - 5872216 - ], - [ - 2106289, - 5872227 - ], - [ - 2106296, - 5872237 - ], - [ - 2106304, - 5872247 - ], - [ - 2106310, - 5872258 - ], - [ - 2106318, - 5872269 - ], - [ - 2106324, - 5872280 - ], - [ - 2106331, - 5872290 - ], - [ - 2106338, - 5872300 - ], - [ - 2106346, - 5872311 - ], - [ - 2106352, - 5872322 - ], - [ - 2106359, - 5872331 - ], - [ - 2106366, - 5872342 - ], - [ - 2106372, - 5872353 - ], - [ - 2106380, - 5872362 - ], - [ - 2106386, - 5872372 - ], - [ - 2106393, - 5872383 - ], - [ - 2106402, - 5872393 - ], - [ - 2106409, - 5872403 - ], - [ - 2106415, - 5872414 - ], - [ - 2106424, - 5872423 - ], - [ - 2106430, - 5872434 - ], - [ - 2106437, - 5872444 - ], - [ - 2106445, - 5872454 - ], - [ - 2106451, - 5872465 - ], - [ - 2106458, - 5872476 - ], - [ - 2106466, - 5872485 - ], - [ - 2106473, - 5872496 - ], - [ - 2106479, - 5872507 - ], - [ - 2106488, - 5872517 - ], - [ - 2106494, - 5872527 - ], - [ - 2106501, - 5872538 - ], - [ - 2106509, - 5872547 - ], - [ - 2106517, - 5872557 - ], - [ - 2106523, - 5872568 - ], - [ - 2106531, - 5872578 - ], - [ - 2106537, - 5872589 - ], - [ - 2106543, - 5872600 - ], - [ - 2106552, - 5872609 - ], - [ - 2106558, - 5872620 - ], - [ - 2106565, - 5872631 - ], - [ - 2106573, - 5872639 - ], - [ - 2106580, - 5872650 - ], - [ - 2106586, - 5872661 - ], - [ - 2106596, - 5872671 - ], - [ - 2106602, - 5872681 - ], - [ - 2106609, - 5872692 - ], - [ - 2106617, - 5872701 - ], - [ - 2106624, - 5872712 - ], - [ - 2106630, - 5872722 - ], - [ - 2106639, - 5872732 - ], - [ - 2106646, - 5872743 - ], - [ - 2106652, - 5872753 - ], - [ - 2106661, - 5872762 - ], - [ - 2106667, - 5872773 - ], - [ - 2106674, - 5872784 - ], - [ - 2106682, - 5872793 - ], - [ - 2106689, - 5872804 - ], - [ - 2106695, - 5872815 - ], - [ - 2106705, - 5872824 - ], - [ - 2106712, - 5872834 - ], - [ - 2106719, - 5872845 - ], - [ - 2106726, - 5872855 - ], - [ - 2106732, - 5872866 - ], - [ - 2106739, - 5872876 - ], - [ - 2106747, - 5872885 - ], - [ - 2106754, - 5872896 - ], - [ - 2106760, - 5872907 - ], - [ - 2106769, - 5872916 - ], - [ - 2106775, - 5872927 - ], - [ - 2106782, - 5872938 - ], - [ - 2106791, - 5872947 - ], - [ - 2106798, - 5872958 - ], - [ - 2106804, - 5872969 - ], - [ - 2106811, - 5872979 - ], - [ - 2106818, - 5872989 - ], - [ - 2106824, - 5873000 - ], - [ - 2106832, - 5873010 - ], - [ - 2106838, - 5873021 - ], - [ - 2106845, - 5873031 - ], - [ - 2106852, - 5873041 - ], - [ - 2106859, - 5873052 - ], - [ - 2106865, - 5873063 - ], - [ - 2106874, - 5873072 - ], - [ - 2106880, - 5873083 - ], - [ - 2106886, - 5873094 - ], - [ - 2106894, - 5873104 - ], - [ - 2106901, - 5873114 - ], - [ - 2106907, - 5873125 - ], - [ - 2106914, - 5873135 - ], - [ - 2106921, - 5873146 - ], - [ - 2106927, - 5873156 - ], - [ - 2106936, - 5873166 - ], - [ - 2106942, - 5873177 - ], - [ - 2106948, - 5873188 - ], - [ - 2106957, - 5873197 - ], - [ - 2106964, - 5873208 - ], - [ - 2106969, - 5873219 - ], - [ - 2106978, - 5873229 - ], - [ - 2106984, - 5873239 - ], - [ - 2106991, - 5873250 - ], - [ - 2106999, - 5873260 - ], - [ - 2107006, - 5873271 - ], - [ - 2107012, - 5873281 - ], - [ - 2107020, - 5873291 - ], - [ - 2107026, - 5873302 - ], - [ - 2107032, - 5873313 - ], - [ - 2107041, - 5873322 - ], - [ - 2107047, - 5873333 - ], - [ - 2107054, - 5873345 - ], - [ - 2107062, - 5873353 - ], - [ - 2107069, - 5873365 - ], - [ - 2107074, - 5873376 - ], - [ - 2107084, - 5873386 - ], - [ - 2107089, - 5873397 - ], - [ - 2107096, - 5873407 - ], - [ - 2107104, - 5873416 - ], - [ - 2107111, - 5873428 - ], - [ - 2107117, - 5873438 - ], - [ - 2107125, - 5873447 - ], - [ - 2107132, - 5873458 - ], - [ - 2107138, - 5873470 - ], - [ - 2107147, - 5873478 - ], - [ - 2107153, - 5873489 - ], - [ - 2107159, - 5873500 - ], - [ - 2107168, - 5873510 - ], - [ - 2107175, - 5873520 - ], - [ - 2107181, - 5873531 - ], - [ - 2107191, - 5873540 - ], - [ - 2107196, - 5873551 - ], - [ - 2107203, - 5873561 - ], - [ - 2107213, - 5873570 - ], - [ - 2107219, - 5873581 - ], - [ - 2107225, - 5873593 - ], - [ - 2107235, - 5873601 - ], - [ - 2107241, - 5873612 - ], - [ - 2107247, - 5873623 - ], - [ - 2107257, - 5873631 - ], - [ - 2107263, - 5873642 - ], - [ - 2107270, - 5873653 - ], - [ - 2107278, - 5873663 - ], - [ - 2107285, - 5873673 - ], - [ - 2107290, - 5873684 - ], - [ - 2107299, - 5873693 - ], - [ - 2107306, - 5873705 - ], - [ - 2107311, - 5873715 - ], - [ - 2107320, - 5873724 - ], - [ - 2107326, - 5873735 - ], - [ - 2107333, - 5873747 - ], - [ - 2107342, - 5873755 - ], - [ - 2107349, - 5873766 - ], - [ - 2107355, - 5873777 - ], - [ - 2107365, - 5873785 - ], - [ - 2107370, - 5873796 - ], - [ - 2107377, - 5873808 - ], - [ - 2107385, - 5873817 - ], - [ - 2107391, - 5873827 - ], - [ - 2107398, - 5873838 - ], - [ - 2107406, - 5873848 - ], - [ - 2107412, - 5873859 - ], - [ - 2107418, - 5873869 - ], - [ - 2107427, - 5873879 - ], - [ - 2107433, - 5873890 - ], - [ - 2107440, - 5873901 - ], - [ - 2107448, - 5873910 - ], - [ - 2107455, - 5873921 - ], - [ - 2107460, - 5873932 - ], - [ - 2107469, - 5873942 - ], - [ - 2107475, - 5873952 - ], - [ - 2107482, - 5873964 - ], - [ - 2107491, - 5873973 - ], - [ - 2107496, - 5873984 - ], - [ - 2107503, - 5873994 - ], - [ - 2107511, - 5874004 - ], - [ - 2107517, - 5874015 - ], - [ - 2107523, - 5874027 - ], - [ - 2107532, - 5874035 - ], - [ - 2107538, - 5874046 - ], - [ - 2107544, - 5874058 - ], - [ - 2107553, - 5874066 - ], - [ - 2107559, - 5874078 - ], - [ - 2107565, - 5874089 - ], - [ - 2107574, - 5874098 - ], - [ - 2107580, - 5874108 - ], - [ - 2107586, - 5874120 - ], - [ - 2107595, - 5874129 - ], - [ - 2107601, - 5874140 - ], - [ - 2107607, - 5874152 - ], - [ - 2107615, - 5874160 - ], - [ - 2107622, - 5874171 - ], - [ - 2107627, - 5874183 - ], - [ - 2107637, - 5874191 - ], - [ - 2107643, - 5874202 - ], - [ - 2107649, - 5874214 - ], - [ - 2107658, - 5874223 - ], - [ - 2107664, - 5874234 - ], - [ - 2107670, - 5874245 - ], - [ - 2107679, - 5874254 - ], - [ - 2107685, - 5874266 - ], - [ - 2107691, - 5874276 - ], - [ - 2107699, - 5874286 - ], - [ - 2107704, - 5874297 - ], - [ - 2107711, - 5874308 - ], - [ - 2107719, - 5874317 - ], - [ - 2107725, - 5874328 - ], - [ - 2107731, - 5874339 - ], - [ - 2107740, - 5874349 - ], - [ - 2107746, - 5874359 - ], - [ - 2107752, - 5874371 - ], - [ - 2107761, - 5874380 - ], - [ - 2107767, - 5874391 - ], - [ - 2107773, - 5874402 - ], - [ - 2107781, - 5874412 - ], - [ - 2107787, - 5874423 - ], - [ - 2107793, - 5874434 - ], - [ - 2107801, - 5874443 - ], - [ - 2107806, - 5874455 - ], - [ - 2107812, - 5874466 - ], - [ - 2107821, - 5874475 - ], - [ - 2107827, - 5874487 - ], - [ - 2107833, - 5874497 - ], - [ - 2107843, - 5874507 - ], - [ - 2107848, - 5874518 - ], - [ - 2107854, - 5874530 - ], - [ - 2107864, - 5874537 - ], - [ - 2107870, - 5874549 - ], - [ - 2107875, - 5874560 - ], - [ - 2107885, - 5874568 - ], - [ - 2107891, - 5874580 - ], - [ - 2107897, - 5874591 - ], - [ - 2107906, - 5874600 - ], - [ - 2107911, - 5874610 - ], - [ - 2107918, - 5874622 - ], - [ - 2107927, - 5874630 - ], - [ - 2107933, - 5874642 - ], - [ - 2107939, - 5874652 - ], - [ - 2107948, - 5874662 - ], - [ - 2107954, - 5874674 - ], - [ - 2107960, - 5874685 - ], - [ - 2107969, - 5874693 - ], - [ - 2107975, - 5874705 - ], - [ - 2107981, - 5874716 - ], - [ - 2107991, - 5874725 - ], - [ - 2107996, - 5874736 - ], - [ - 2108002, - 5874747 - ], - [ - 2108012, - 5874756 - ], - [ - 2108017, - 5874767 - ], - [ - 2108024, - 5874777 - ], - [ - 2108033, - 5874786 - ], - [ - 2108039, - 5874798 - ], - [ - 2108045, - 5874809 - ], - [ - 2108055, - 5874817 - ], - [ - 2108060, - 5874829 - ], - [ - 2108066, - 5874840 - ], - [ - 2108076, - 5874848 - ], - [ - 2108082, - 5874859 - ], - [ - 2108087, - 5874871 - ], - [ - 2108097, - 5874879 - ], - [ - 2108103, - 5874890 - ], - [ - 2108108, - 5874901 - ], - [ - 2108119, - 5874910 - ], - [ - 2108124, - 5874921 - ], - [ - 2108131, - 5874932 - ], - [ - 2108140, - 5874940 - ], - [ - 2108146, - 5874952 - ], - [ - 2108152, - 5874963 - ], - [ - 2108162, - 5874971 - ], - [ - 2108167, - 5874983 - ], - [ - 2108173, - 5874994 - ], - [ - 2108183, - 5875002 - ], - [ - 2108188, - 5875013 - ], - [ - 2108194, - 5875025 - ], - [ - 2108204, - 5875034 - ], - [ - 2108210, - 5875044 - ], - [ - 2108216, - 5875056 - ], - [ - 2108227, - 5875064 - ], - [ - 2108232, - 5875075 - ], - [ - 2108238, - 5875086 - ], - [ - 2108247, - 5875095 - ], - [ - 2108254, - 5875106 - ], - [ - 2108259, - 5875118 - ], - [ - 2108268, - 5875125 - ], - [ - 2108275, - 5875137 - ], - [ - 2108280, - 5875148 - ], - [ - 2108290, - 5875158 - ], - [ - 2108295, - 5875168 - ], - [ - 2108301, - 5875179 - ], - [ - 2108310, - 5875189 - ], - [ - 2108317, - 5875200 - ], - [ - 2108322, - 5875210 - ], - [ - 2108331, - 5875220 - ], - [ - 2108337, - 5875232 - ], - [ - 2108343, - 5875243 - ], - [ - 2108352, - 5875251 - ], - [ - 2108358, - 5875263 - ], - [ - 2108363, - 5875274 - ], - [ - 2108373, - 5875284 - ], - [ - 2108378, - 5875294 - ], - [ - 2108384, - 5875306 - ], - [ - 2108393, - 5875315 - ], - [ - 2108398, - 5875327 - ], - [ - 2108404, - 5875337 - ], - [ - 2108413, - 5875347 - ], - [ - 2108419, - 5875358 - ], - [ - 2108424, - 5875370 - ], - [ - 2108434, - 5875378 - ], - [ - 2108439, - 5875390 - ], - [ - 2108445, - 5875401 - ], - [ - 2108454, - 5875410 - ], - [ - 2108460, - 5875421 - ], - [ - 2108465, - 5875432 - ], - [ - 2108475, - 5875442 - ], - [ - 2108481, - 5875453 - ], - [ - 2108487, - 5875464 - ], - [ - 2108497, - 5875472 - ], - [ - 2108502, - 5875483 - ], - [ - 2108508, - 5875495 - ], - [ - 2108518, - 5875502 - ], - [ - 2108524, - 5875514 - ], - [ - 2108529, - 5875525 - ], - [ - 2108541, - 5875533 - ], - [ - 2108546, - 5875544 - ], - [ - 2108552, - 5875556 - ], - [ - 2108562, - 5875565 - ], - [ - 2108568, - 5875575 - ], - [ - 2108573, - 5875587 - ], - [ - 2108582, - 5875596 - ], - [ - 2108588, - 5875608 - ], - [ - 2108593, - 5875619 - ], - [ - 2108602, - 5875628 - ], - [ - 2108608, - 5875640 - ], - [ - 2108614, - 5875651 - ], - [ - 2108622, - 5875660 - ], - [ - 2108628, - 5875671 - ], - [ - 2108634, - 5875682 - ], - [ - 2108644, - 5875691 - ], - [ - 2108649, - 5875701 - ], - [ - 2108656, - 5875713 - ], - [ - 2108664, - 5875721 - ], - [ - 2108671, - 5875733 - ], - [ - 2108676, - 5875743 - ], - [ - 2108685, - 5875752 - ], - [ - 2108692, - 5875763 - ], - [ - 2108697, - 5875775 - ], - [ - 2108708, - 5875782 - ], - [ - 2108713, - 5875794 - ], - [ - 2108719, - 5875805 - ], - [ - 2108728, - 5875814 - ], - [ - 2108735, - 5875825 - ], - [ - 2108740, - 5875836 - ], - [ - 2108750, - 5875845 - ], - [ - 2108755, - 5875857 - ], - [ - 2108761, - 5875867 - ], - [ - 2108770, - 5875877 - ], - [ - 2108777, - 5875888 - ], - [ - 2108782, - 5875900 - ], - [ - 2108791, - 5875908 - ], - [ - 2108797, - 5875919 - ], - [ - 2108802, - 5875931 - ], - [ - 2108812, - 5875940 - ], - [ - 2108817, - 5875950 - ], - [ - 2108824, - 5875962 - ], - [ - 2108833, - 5875971 - ], - [ - 2108839, - 5875982 - ], - [ - 2108844, - 5875993 - ], - [ - 2108855, - 5876002 - ], - [ - 2108860, - 5876013 - ], - [ - 2108866, - 5876025 - ], - [ - 2108875, - 5876032 - ], - [ - 2108880, - 5876044 - ], - [ - 2108886, - 5876056 - ], - [ - 2108897, - 5876063 - ], - [ - 2108903, - 5876075 - ], - [ - 2108908, - 5876086 - ], - [ - 2108918, - 5876095 - ], - [ - 2108924, - 5876105 - ], - [ - 2108930, - 5876117 - ], - [ - 2108939, - 5876126 - ], - [ - 2108945, - 5876137 - ], - [ - 2108950, - 5876148 - ], - [ - 2108960, - 5876157 - ], - [ - 2108965, - 5876168 - ], - [ - 2108971, - 5876180 - ], - [ - 2108979, - 5876188 - ], - [ - 2108985, - 5876200 - ], - [ - 2108991, - 5876211 - ], - [ - 2109000, - 5876221 - ], - [ - 2109006, - 5876231 - ], - [ - 2109011, - 5876243 - ], - [ - 2109020, - 5876252 - ], - [ - 2109025, - 5876264 - ], - [ - 2109032, - 5876275 - ], - [ - 2109042, - 5876283 - ], - [ - 2109048, - 5876295 - ], - [ - 2109053, - 5876306 - ], - [ - 2109064, - 5876314 - ], - [ - 2109069, - 5876325 - ], - [ - 2109075, - 5876337 - ], - [ - 2109085, - 5876345 - ], - [ - 2109090, - 5876356 - ], - [ - 2109096, - 5876367 - ], - [ - 2109106, - 5876376 - ], - [ - 2109112, - 5876388 - ], - [ - 2109117, - 5876398 - ], - [ - 2109127, - 5876407 - ], - [ - 2109133, - 5876419 - ], - [ - 2109139, - 5876430 - ], - [ - 2109148, - 5876438 - ], - [ - 2109154, - 5876449 - ], - [ - 2109160, - 5876461 - ], - [ - 2109169, - 5876469 - ], - [ - 2109175, - 5876480 - ], - [ - 2109180, - 5876492 - ], - [ - 2109191, - 5876501 - ], - [ - 2109196, - 5876511 - ], - [ - 2109202, - 5876523 - ], - [ - 2109213, - 5876531 - ], - [ - 2109219, - 5876542 - ], - [ - 2109224, - 5876553 - ], - [ - 2109235, - 5876561 - ], - [ - 2109240, - 5876573 - ], - [ - 2109246, - 5876584 - ], - [ - 2109256, - 5876592 - ], - [ - 2109261, - 5876603 - ], - [ - 2109267, - 5876615 - ], - [ - 2109277, - 5876622 - ], - [ - 2109283, - 5876634 - ], - [ - 2109289, - 5876645 - ], - [ - 2109299, - 5876654 - ], - [ - 2109304, - 5876665 - ], - [ - 2109311, - 5876676 - ], - [ - 2109320, - 5876685 - ], - [ - 2109326, - 5876696 - ], - [ - 2109331, - 5876708 - ], - [ - 2109341, - 5876716 - ], - [ - 2109347, - 5876727 - ], - [ - 2109352, - 5876738 - ], - [ - 2109361, - 5876747 - ], - [ - 2109367, - 5876758 - ], - [ - 2109373, - 5876770 - ], - [ - 2109383, - 5876779 - ], - [ - 2109389, - 5876789 - ], - [ - 2109394, - 5876801 - ], - [ - 2109403, - 5876810 - ], - [ - 2109409, - 5876822 - ], - [ - 2109415, - 5876833 - ], - [ - 2109424, - 5876841 - ], - [ - 2109430, - 5876853 - ], - [ - 2109435, - 5876864 - ], - [ - 2109445, - 5876873 - ], - [ - 2109450, - 5876884 - ], - [ - 2109456, - 5876896 - ], - [ - 2109465, - 5876905 - ], - [ - 2109471, - 5876915 - ], - [ - 2109477, - 5876927 - ], - [ - 2109486, - 5876936 - ], - [ - 2109492, - 5876947 - ], - [ - 2109497, - 5876958 - ], - [ - 2109508, - 5876966 - ], - [ - 2109513, - 5876978 - ], - [ - 2109519, - 5876990 - ], - [ - 2109528, - 5876998 - ], - [ - 2109535, - 5877009 - ], - [ - 2109540, - 5877021 - ], - [ - 2109551, - 5877030 - ], - [ - 2109556, - 5877040 - ], - [ - 2109562, - 5877052 - ], - [ - 2109571, - 5877061 - ], - [ - 2109576, - 5877072 - ], - [ - 2109582, - 5877083 - ], - [ - 2109592, - 5877092 - ], - [ - 2109598, - 5877103 - ], - [ - 2109603, - 5877115 - ], - [ - 2109614, - 5877122 - ], - [ - 2109619, - 5877133 - ], - [ - 2109625, - 5877145 - ], - [ - 2109634, - 5877153 - ], - [ - 2109640, - 5877164 - ], - [ - 2109645, - 5877176 - ], - [ - 2109655, - 5877185 - ], - [ - 2109662, - 5877195 - ], - [ - 2109667, - 5877207 - ], - [ - 2109677, - 5877216 - ], - [ - 2109682, - 5877227 - ], - [ - 2109688, - 5877239 - ], - [ - 2109697, - 5877247 - ], - [ - 2109703, - 5877258 - ], - [ - 2109708, - 5877270 - ], - [ - 2109718, - 5877278 - ], - [ - 2109723, - 5877290 - ], - [ - 2109730, - 5877301 - ], - [ - 2109738, - 5877311 - ], - [ - 2109745, - 5877321 - ], - [ - 2109750, - 5877333 - ], - [ - 2109758, - 5877341 - ], - [ - 2109765, - 5877353 - ], - [ - 2109770, - 5877364 - ], - [ - 2109780, - 5877373 - ], - [ - 2109785, - 5877384 - ], - [ - 2109791, - 5877396 - ], - [ - 2109801, - 5877404 - ], - [ - 2109807, - 5877415 - ], - [ - 2109812, - 5877427 - ], - [ - 2109823, - 5877436 - ], - [ - 2109828, - 5877446 - ], - [ - 2109834, - 5877458 - ], - [ - 2109845, - 5877466 - ], - [ - 2109851, - 5877478 - ], - [ - 2109856, - 5877488 - ], - [ - 2109865, - 5877497 - ], - [ - 2109871, - 5877509 - ], - [ - 2109876, - 5877520 - ], - [ - 2109887, - 5877527 - ], - [ - 2109892, - 5877539 - ], - [ - 2109899, - 5877550 - ], - [ - 2109908, - 5877558 - ], - [ - 2109914, - 5877570 - ], - [ - 2109919, - 5877581 - ], - [ - 2109931, - 5877589 - ], - [ - 2109936, - 5877600 - ], - [ - 2109942, - 5877611 - ], - [ - 2109951, - 5877620 - ], - [ - 2109957, - 5877632 - ], - [ - 2109963, - 5877642 - ], - [ - 2109972, - 5877651 - ], - [ - 2109979, - 5877662 - ], - [ - 2109984, - 5877673 - ], - [ - 2109995, - 5877681 - ], - [ - 2110000, - 5877692 - ], - [ - 2110006, - 5877704 - ], - [ - 2110015, - 5877713 - ], - [ - 2110021, - 5877724 - ], - [ - 2110026, - 5877735 - ], - [ - 2110035, - 5877744 - ], - [ - 2110041, - 5877756 - ], - [ - 2110046, - 5877766 - ], - [ - 2110056, - 5877776 - ], - [ - 2110061, - 5877787 - ], - [ - 2110068, - 5877799 - ], - [ - 2110077, - 5877807 - ], - [ - 2110083, - 5877818 - ], - [ - 2110088, - 5877830 - ], - [ - 2110098, - 5877839 - ], - [ - 2110103, - 5877850 - ], - [ - 2110110, - 5877861 - ], - [ - 2110119, - 5877870 - ], - [ - 2110125, - 5877882 - ], - [ - 2110130, - 5877892 - ], - [ - 2110140, - 5877901 - ], - [ - 2110146, - 5877913 - ], - [ - 2110151, - 5877924 - ], - [ - 2110160, - 5877933 - ], - [ - 2110165, - 5877944 - ], - [ - 2110171, - 5877956 - ], - [ - 2110181, - 5877965 - ], - [ - 2110187, - 5877975 - ], - [ - 2110192, - 5877987 - ], - [ - 2110202, - 5877996 - ], - [ - 2110207, - 5878007 - ], - [ - 2110213, - 5878018 - ], - [ - 2110223, - 5878027 - ], - [ - 2110229, - 5878038 - ], - [ - 2110235, - 5878050 - ], - [ - 2110244, - 5878057 - ], - [ - 2110250, - 5878069 - ], - [ - 2110255, - 5878080 - ], - [ - 2110265, - 5878089 - ], - [ - 2110270, - 5878100 - ], - [ - 2110276, - 5878112 - ], - [ - 2110286, - 5878121 - ], - [ - 2110292, - 5878131 - ], - [ - 2110297, - 5878143 - ], - [ - 2110307, - 5878152 - ], - [ - 2110312, - 5878163 - ], - [ - 2110319, - 5878175 - ], - [ - 2110328, - 5878183 - ], - [ - 2110334, - 5878194 - ], - [ - 2110339, - 5878205 - ], - [ - 2110349, - 5878213 - ], - [ - 2110355, - 5878225 - ], - [ - 2110360, - 5878236 - ], - [ - 2110371, - 5878245 - ], - [ - 2110377, - 5878255 - ], - [ - 2110383, - 5878267 - ], - [ - 2110392, - 5878276 - ], - [ - 2110399, - 5878287 - ], - [ - 2110404, - 5878298 - ], - [ - 2110415, - 5878306 - ], - [ - 2110420, - 5878318 - ], - [ - 2110426, - 5878329 - ], - [ - 2110436, - 5878337 - ], - [ - 2110441, - 5878348 - ], - [ - 2110447, - 5878360 - ], - [ - 2110457, - 5878367 - ], - [ - 2110464, - 5878379 - ], - [ - 2110469, - 5878390 - ], - [ - 2110479, - 5878398 - ], - [ - 2110484, - 5878409 - ], - [ - 2110491, - 5878420 - ], - [ - 2110500, - 5878429 - ], - [ - 2110507, - 5878441 - ], - [ - 2110512, - 5878451 - ], - [ - 2110520, - 5878461 - ], - [ - 2110526, - 5878472 - ], - [ - 2110532, - 5878484 - ], - [ - 2110541, - 5878492 - ], - [ - 2110546, - 5878503 - ], - [ - 2110553, - 5878515 - ], - [ - 2110561, - 5878525 - ], - [ - 2110567, - 5878535 - ], - [ - 2110573, - 5878547 - ], - [ - 2110581, - 5878557 - ], - [ - 2110587, - 5878568 - ], - [ - 2110593, - 5878580 - ], - [ - 2110602, - 5878587 - ], - [ - 2110608, - 5878599 - ], - [ - 2110614, - 5878610 - ], - [ - 2110624, - 5878619 - ], - [ - 2110629, - 5878630 - ], - [ - 2110635, - 5878642 - ], - [ - 2110645, - 5878650 - ], - [ - 2110650, - 5878661 - ], - [ - 2110656, - 5878672 - ], - [ - 2110665, - 5878681 - ], - [ - 2110671, - 5878693 - ], - [ - 2110676, - 5878703 - ], - [ - 2110685, - 5878713 - ], - [ - 2110690, - 5878724 - ], - [ - 2110697, - 5878736 - ], - [ - 2110706, - 5878744 - ], - [ - 2110712, - 5878755 - ], - [ - 2110717, - 5878767 - ], - [ - 2110727, - 5878776 - ], - [ - 2110732, - 5878787 - ], - [ - 2110738, - 5878798 - ], - [ - 2110748, - 5878807 - ], - [ - 2110753, - 5878819 - ], - [ - 2110759, - 5878829 - ], - [ - 2110768, - 5878838 - ], - [ - 2110774, - 5878850 - ], - [ - 2110779, - 5878861 - ], - [ - 2110789, - 5878870 - ], - [ - 2110794, - 5878881 - ], - [ - 2110800, - 5878893 - ], - [ - 2110809, - 5878902 - ], - [ - 2110815, - 5878913 - ], - [ - 2110821, - 5878924 - ], - [ - 2110831, - 5878933 - ], - [ - 2110836, - 5878944 - ], - [ - 2110842, - 5878955 - ], - [ - 2110851, - 5878964 - ], - [ - 2110856, - 5878975 - ], - [ - 2110862, - 5878987 - ], - [ - 2110871, - 5878995 - ], - [ - 2110877, - 5879006 - ], - [ - 2110883, - 5879017 - ], - [ - 2110894, - 5879026 - ], - [ - 2110899, - 5879037 - ], - [ - 2110905, - 5879048 - ], - [ - 2110915, - 5879057 - ], - [ - 2110921, - 5879069 - ], - [ - 2110926, - 5879079 - ], - [ - 2110935, - 5879088 - ], - [ - 2110942, - 5879099 - ], - [ - 2110947, - 5879111 - ], - [ - 2110956, - 5879119 - ], - [ - 2110961, - 5879130 - ], - [ - 2110968, - 5879142 - ], - [ - 2110977, - 5879151 - ], - [ - 2110983, - 5879161 - ], - [ - 2110989, - 5879173 - ], - [ - 2110999, - 5879182 - ], - [ - 2111004, - 5879193 - ], - [ - 2111010, - 5879203 - ], - [ - 2111020, - 5879212 - ], - [ - 2111026, - 5879224 - ], - [ - 2111032, - 5879235 - ], - [ - 2111041, - 5879243 - ], - [ - 2111047, - 5879255 - ], - [ - 2111052, - 5879266 - ], - [ - 2111062, - 5879274 - ], - [ - 2111067, - 5879286 - ], - [ - 2111074, - 5879297 - ], - [ - 2111082, - 5879307 - ], - [ - 2111088, - 5879317 - ], - [ - 2111094, - 5879329 - ], - [ - 2111104, - 5879338 - ], - [ - 2111110, - 5879349 - ], - [ - 2111116, - 5879359 - ], - [ - 2111125, - 5879368 - ], - [ - 2111131, - 5879380 - ], - [ - 2111137, - 5879391 - ], - [ - 2111146, - 5879399 - ], - [ - 2111152, - 5879410 - ], - [ - 2111158, - 5879422 - ], - [ - 2111168, - 5879431 - ], - [ - 2111173, - 5879441 - ], - [ - 2111180, - 5879452 - ], - [ - 2111189, - 5879461 - ], - [ - 2111196, - 5879473 - ], - [ - 2111201, - 5879483 - ], - [ - 2111212, - 5879492 - ], - [ - 2111218, - 5879503 - ], - [ - 2111223, - 5879514 - ], - [ - 2111233, - 5879522 - ], - [ - 2111238, - 5879534 - ], - [ - 2111245, - 5879545 - ], - [ - 2111254, - 5879553 - ], - [ - 2111260, - 5879564 - ], - [ - 2111266, - 5879576 - ], - [ - 2111275, - 5879585 - ], - [ - 2111280, - 5879595 - ], - [ - 2111287, - 5879607 - ], - [ - 2111296, - 5879616 - ], - [ - 2111303, - 5879627 - ], - [ - 2111308, - 5879637 - ], - [ - 2111316, - 5879647 - ], - [ - 2111323, - 5879658 - ], - [ - 2111329, - 5879670 - ], - [ - 2111338, - 5879678 - ], - [ - 2111344, - 5879689 - ], - [ - 2111350, - 5879700 - ], - [ - 2111359, - 5879710 - ], - [ - 2111365, - 5879720 - ], - [ - 2111371, - 5879732 - ], - [ - 2111381, - 5879740 - ], - [ - 2111386, - 5879752 - ], - [ - 2111393, - 5879762 - ], - [ - 2111401, - 5879771 - ], - [ - 2111408, - 5879783 - ], - [ - 2111413, - 5879794 - ], - [ - 2111423, - 5879802 - ], - [ - 2111429, - 5879814 - ], - [ - 2111434, - 5879825 - ], - [ - 2111444, - 5879833 - ], - [ - 2111449, - 5879845 - ], - [ - 2111455, - 5879856 - ], - [ - 2111464, - 5879865 - ], - [ - 2111470, - 5879877 - ], - [ - 2111476, - 5879887 - ], - [ - 2111484, - 5879897 - ], - [ - 2111490, - 5879908 - ], - [ - 2111497, - 5879920 - ], - [ - 2111504, - 5879928 - ], - [ - 2111511, - 5879940 - ], - [ - 2111516, - 5879951 - ], - [ - 2111525, - 5879960 - ], - [ - 2111531, - 5879971 - ], - [ - 2111537, - 5879982 - ], - [ - 2111547, - 5879991 - ], - [ - 2111553, - 5880001 - ], - [ - 2111559, - 5880013 - ], - [ - 2111568, - 5880022 - ], - [ - 2111575, - 5880033 - ], - [ - 2111580, - 5880045 - ], - [ - 2111590, - 5880053 - ], - [ - 2111595, - 5880065 - ], - [ - 2111601, - 5880076 - ], - [ - 2111610, - 5880084 - ], - [ - 2111615, - 5880096 - ], - [ - 2111621, - 5880107 - ], - [ - 2111630, - 5880117 - ], - [ - 2111636, - 5880127 - ], - [ - 2111642, - 5880138 - ], - [ - 2111652, - 5880148 - ], - [ - 2111657, - 5880159 - ], - [ - 2111663, - 5880170 - ], - [ - 2111673, - 5880179 - ], - [ - 2111679, - 5880190 - ], - [ - 2111684, - 5880201 - ], - [ - 2111695, - 5880209 - ], - [ - 2111700, - 5880220 - ], - [ - 2111707, - 5880232 - ], - [ - 2111716, - 5880241 - ], - [ - 2111721, - 5880251 - ], - [ - 2111728, - 5880262 - ], - [ - 2111737, - 5880271 - ], - [ - 2111744, - 5880283 - ], - [ - 2111749, - 5880293 - ], - [ - 2111759, - 5880302 - ], - [ - 2111764, - 5880313 - ], - [ - 2111771, - 5880325 - ], - [ - 2111780, - 5880333 - ], - [ - 2111787, - 5880344 - ], - [ - 2111792, - 5880355 - ], - [ - 2111801, - 5880363 - ], - [ - 2111808, - 5880374 - ], - [ - 2111814, - 5880386 - ], - [ - 2111823, - 5880395 - ], - [ - 2111829, - 5880405 - ], - [ - 2111835, - 5880416 - ], - [ - 2111843, - 5880426 - ], - [ - 2111850, - 5880437 - ], - [ - 2111855, - 5880447 - ], - [ - 2111865, - 5880457 - ], - [ - 2111871, - 5880468 - ], - [ - 2111877, - 5880479 - ], - [ - 2111886, - 5880488 - ], - [ - 2111891, - 5880499 - ], - [ - 2111898, - 5880510 - ], - [ - 2111907, - 5880520 - ], - [ - 2111913, - 5880530 - ], - [ - 2111919, - 5880541 - ], - [ - 2111928, - 5880551 - ], - [ - 2111934, - 5880562 - ], - [ - 2111940, - 5880572 - ], - [ - 2111949, - 5880581 - ], - [ - 2111956, - 5880593 - ], - [ - 2111961, - 5880604 - ], - [ - 2111971, - 5880612 - ], - [ - 2111977, - 5880623 - ], - [ - 2111983, - 5880635 - ], - [ - 2111992, - 5880643 - ], - [ - 2111997, - 5880654 - ], - [ - 2112004, - 5880666 - ], - [ - 2112012, - 5880675 - ], - [ - 2112019, - 5880686 - ], - [ - 2112025, - 5880697 - ], - [ - 2112034, - 5880706 - ], - [ - 2112039, - 5880717 - ], - [ - 2112046, - 5880729 - ], - [ - 2112055, - 5880737 - ], - [ - 2112061, - 5880748 - ], - [ - 2112067, - 5880759 - ], - [ - 2112076, - 5880768 - ], - [ - 2112081, - 5880780 - ], - [ - 2112088, - 5880791 - ], - [ - 2112096, - 5880800 - ], - [ - 2112102, - 5880810 - ], - [ - 2112108, - 5880822 - ], - [ - 2112117, - 5880831 - ], - [ - 2112123, - 5880842 - ], - [ - 2112128, - 5880854 - ], - [ - 2112139, - 5880862 - ], - [ - 2112144, - 5880873 - ], - [ - 2112151, - 5880885 - ], - [ - 2112159, - 5880893 - ], - [ - 2112166, - 5880904 - ], - [ - 2112171, - 5880916 - ], - [ - 2112181, - 5880925 - ], - [ - 2112186, - 5880935 - ], - [ - 2112191, - 5880947 - ], - [ - 2112202, - 5880956 - ], - [ - 2112207, - 5880967 - ], - [ - 2112214, - 5880978 - ], - [ - 2112222, - 5880987 - ], - [ - 2112229, - 5880998 - ], - [ - 2112234, - 5881009 - ], - [ - 2112245, - 5881017 - ], - [ - 2112250, - 5881028 - ], - [ - 2112257, - 5881040 - ], - [ - 2112266, - 5881048 - ], - [ - 2112272, - 5881059 - ], - [ - 2112278, - 5881070 - ], - [ - 2112286, - 5881080 - ], - [ - 2112293, - 5881091 - ], - [ - 2112299, - 5881101 - ], - [ - 2112309, - 5881111 - ], - [ - 2112314, - 5881122 - ], - [ - 2112321, - 5881132 - ], - [ - 2112329, - 5881141 - ], - [ - 2112336, - 5881153 - ], - [ - 2112342, - 5881164 - ], - [ - 2112351, - 5881172 - ], - [ - 2112356, - 5881183 - ], - [ - 2112363, - 5881195 - ], - [ - 2112371, - 5881204 - ], - [ - 2112377, - 5881214 - ], - [ - 2112383, - 5881226 - ], - [ - 2112391, - 5881235 - ], - [ - 2112398, - 5881247 - ], - [ - 2112403, - 5881258 - ], - [ - 2112413, - 5881266 - ], - [ - 2112418, - 5881277 - ], - [ - 2112425, - 5881289 - ], - [ - 2112434, - 5881298 - ], - [ - 2112440, - 5881309 - ], - [ - 2112446, - 5881320 - ], - [ - 2112455, - 5881330 - ], - [ - 2112461, - 5881340 - ], - [ - 2112467, - 5881352 - ], - [ - 2112476, - 5881361 - ], - [ - 2112481, - 5881372 - ], - [ - 2112487, - 5881383 - ], - [ - 2112495, - 5881392 - ], - [ - 2112502, - 5881404 - ], - [ - 2112507, - 5881415 - ], - [ - 2112517, - 5881423 - ], - [ - 2112523, - 5881434 - ], - [ - 2112529, - 5881446 - ], - [ - 2112537, - 5881455 - ], - [ - 2112544, - 5881465 - ], - [ - 2112549, - 5881477 - ], - [ - 2112558, - 5881486 - ], - [ - 2112564, - 5881497 - ], - [ - 2112570, - 5881507 - ], - [ - 2112579, - 5881516 - ], - [ - 2112585, - 5881528 - ], - [ - 2112591, - 5881539 - ], - [ - 2112601, - 5881547 - ], - [ - 2112607, - 5881558 - ], - [ - 2112613, - 5881570 - ], - [ - 2112623, - 5881579 - ], - [ - 2112628, - 5881590 - ], - [ - 2112635, - 5881601 - ], - [ - 2112644, - 5881610 - ], - [ - 2112651, - 5881621 - ], - [ - 2112656, - 5881632 - ], - [ - 2112666, - 5881642 - ], - [ - 2112671, - 5881653 - ], - [ - 2112677, - 5881664 - ], - [ - 2112687, - 5881672 - ], - [ - 2112693, - 5881683 - ], - [ - 2112699, - 5881694 - ], - [ - 2112707, - 5881703 - ], - [ - 2112714, - 5881714 - ], - [ - 2112719, - 5881725 - ], - [ - 2112729, - 5881735 - ], - [ - 2112735, - 5881745 - ], - [ - 2112741, - 5881756 - ], - [ - 2112749, - 5881765 - ], - [ - 2112756, - 5881777 - ], - [ - 2112762, - 5881787 - ], - [ - 2112771, - 5881796 - ], - [ - 2112777, - 5881807 - ], - [ - 2112783, - 5881818 - ], - [ - 2112793, - 5881827 - ], - [ - 2112798, - 5881838 - ], - [ - 2112805, - 5881849 - ], - [ - 2112814, - 5881859 - ], - [ - 2112820, - 5881869 - ], - [ - 2112826, - 5881880 - ], - [ - 2112835, - 5881889 - ], - [ - 2112841, - 5881901 - ], - [ - 2112847, - 5881911 - ], - [ - 2112856, - 5881920 - ], - [ - 2112861, - 5881932 - ], - [ - 2112868, - 5881943 - ], - [ - 2112877, - 5881951 - ], - [ - 2112883, - 5881962 - ], - [ - 2112889, - 5881974 - ], - [ - 2112899, - 5881982 - ], - [ - 2112904, - 5881993 - ], - [ - 2112911, - 5882004 - ], - [ - 2112919, - 5882014 - ], - [ - 2112925, - 5882024 - ], - [ - 2112931, - 5882035 - ], - [ - 2112939, - 5882045 - ], - [ - 2112945, - 5882056 - ], - [ - 2112952, - 5882068 - ], - [ - 2112960, - 5882076 - ], - [ - 2112966, - 5882087 - ], - [ - 2112973, - 5882099 - ], - [ - 2112981, - 5882107 - ], - [ - 2112987, - 5882119 - ], - [ - 2112993, - 5882130 - ], - [ - 2113004, - 5882138 - ], - [ - 2113010, - 5882148 - ], - [ - 2113016, - 5882160 - ], - [ - 2113025, - 5882169 - ], - [ - 2113032, - 5882180 - ], - [ - 2113037, - 5882191 - ], - [ - 2113046, - 5882200 - ], - [ - 2113052, - 5882211 - ], - [ - 2113058, - 5882223 - ], - [ - 2113067, - 5882231 - ], - [ - 2113073, - 5882243 - ], - [ - 2113079, - 5882254 - ], - [ - 2113089, - 5882262 - ], - [ - 2113095, - 5882273 - ], - [ - 2113101, - 5882285 - ], - [ - 2113111, - 5882294 - ], - [ - 2113117, - 5882304 - ], - [ - 2113123, - 5882315 - ], - [ - 2113131, - 5882325 - ], - [ - 2113138, - 5882336 - ], - [ - 2113143, - 5882347 - ], - [ - 2113152, - 5882356 - ], - [ - 2113158, - 5882367 - ], - [ - 2113164, - 5882378 - ], - [ - 2113174, - 5882386 - ], - [ - 2113179, - 5882398 - ], - [ - 2113186, - 5882409 - ], - [ - 2113195, - 5882418 - ], - [ - 2113202, - 5882428 - ], - [ - 2113208, - 5882439 - ], - [ - 2113217, - 5882449 - ], - [ - 2113222, - 5882460 - ], - [ - 2113229, - 5882470 - ], - [ - 2113238, - 5882479 - ], - [ - 2113243, - 5882490 - ], - [ - 2113250, - 5882502 - ], - [ - 2113257, - 5882510 - ], - [ - 2113264, - 5882522 - ], - [ - 2113270, - 5882533 - ], - [ - 2113279, - 5882543 - ], - [ - 2113284, - 5882553 - ], - [ - 2113291, - 5882564 - ], - [ - 2113299, - 5882575 - ], - [ - 2113305, - 5882586 - ], - [ - 2113311, - 5882596 - ], - [ - 2113319, - 5882606 - ], - [ - 2113325, - 5882617 - ], - [ - 2113331, - 5882629 - ], - [ - 2113339, - 5882637 - ], - [ - 2113346, - 5882649 - ], - [ - 2113351, - 5882660 - ], - [ - 2113361, - 5882669 - ], - [ - 2113367, - 5882679 - ], - [ - 2113373, - 5882691 - ], - [ - 2113382, - 5882700 - ], - [ - 2113387, - 5882711 - ], - [ - 2113394, - 5882722 - ], - [ - 2113402, - 5882731 - ], - [ - 2113409, - 5882742 - ], - [ - 2113415, - 5882754 - ], - [ - 2113424, - 5882762 - ], - [ - 2113429, - 5882773 - ], - [ - 2113436, - 5882784 - ], - [ - 2113445, - 5882794 - ], - [ - 2113450, - 5882804 - ], - [ - 2113457, - 5882815 - ], - [ - 2113465, - 5882824 - ], - [ - 2113472, - 5882836 - ], - [ - 2113478, - 5882846 - ], - [ - 2113487, - 5882855 - ], - [ - 2113493, - 5882867 - ], - [ - 2113499, - 5882878 - ], - [ - 2113508, - 5882886 - ], - [ - 2113514, - 5882897 - ], - [ - 2113520, - 5882909 - ], - [ - 2113528, - 5882918 - ], - [ - 2113535, - 5882928 - ], - [ - 2113540, - 5882940 - ], - [ - 2113550, - 5882949 - ], - [ - 2113556, - 5882960 - ], - [ - 2113562, - 5882971 - ], - [ - 2113571, - 5882980 - ], - [ - 2113577, - 5882992 - ], - [ - 2113583, - 5883003 - ], - [ - 2113593, - 5883011 - ], - [ - 2113598, - 5883023 - ], - [ - 2113605, - 5883034 - ], - [ - 2113614, - 5883042 - ], - [ - 2113621, - 5883053 - ], - [ - 2113626, - 5883065 - ], - [ - 2113636, - 5883073 - ], - [ - 2113642, - 5883084 - ], - [ - 2113648, - 5883095 - ], - [ - 2113657, - 5883104 - ], - [ - 2113663, - 5883115 - ], - [ - 2113670, - 5883126 - ], - [ - 2113678, - 5883135 - ], - [ - 2113685, - 5883146 - ], - [ - 2113691, - 5883157 - ], - [ - 2113700, - 5883166 - ], - [ - 2113706, - 5883177 - ], - [ - 2113713, - 5883188 - ], - [ - 2113721, - 5883196 - ], - [ - 2113727, - 5883207 - ], - [ - 2113733, - 5883219 - ], - [ - 2113741, - 5883228 - ], - [ - 2113748, - 5883240 - ], - [ - 2113754, - 5883250 - ], - [ - 2113763, - 5883259 - ], - [ - 2113769, - 5883270 - ], - [ - 2113775, - 5883282 - ], - [ - 2113784, - 5883290 - ], - [ - 2113790, - 5883301 - ], - [ - 2113796, - 5883313 - ], - [ - 2113807, - 5883321 - ], - [ - 2113812, - 5883332 - ], - [ - 2113819, - 5883343 - ], - [ - 2113827, - 5883353 - ], - [ - 2113832, - 5883363 - ], - [ - 2113839, - 5883374 - ], - [ - 2113847, - 5883383 - ], - [ - 2113854, - 5883395 - ], - [ - 2113860, - 5883405 - ], - [ - 2113868, - 5883415 - ], - [ - 2113874, - 5883426 - ], - [ - 2113880, - 5883437 - ], - [ - 2113890, - 5883445 - ], - [ - 2113896, - 5883457 - ], - [ - 2113902, - 5883468 - ], - [ - 2113910, - 5883477 - ], - [ - 2113917, - 5883488 - ], - [ - 2113922, - 5883499 - ], - [ - 2113931, - 5883508 - ], - [ - 2113937, - 5883519 - ], - [ - 2113943, - 5883530 - ], - [ - 2113951, - 5883540 - ], - [ - 2113958, - 5883551 - ], - [ - 2113963, - 5883562 - ], - [ - 2113973, - 5883570 - ], - [ - 2113978, - 5883582 - ], - [ - 2113985, - 5883593 - ], - [ - 2113993, - 5883603 - ], - [ - 2114000, - 5883613 - ], - [ - 2114005, - 5883624 - ], - [ - 2114015, - 5883633 - ], - [ - 2114021, - 5883645 - ], - [ - 2114027, - 5883655 - ], - [ - 2114036, - 5883665 - ], - [ - 2114041, - 5883676 - ], - [ - 2114048, - 5883688 - ], - [ - 2114056, - 5883696 - ], - [ - 2114062, - 5883708 - ], - [ - 2114068, - 5883719 - ], - [ - 2114077, - 5883729 - ], - [ - 2114083, - 5883739 - ], - [ - 2114089, - 5883750 - ], - [ - 2114099, - 5883759 - ], - [ - 2114105, - 5883771 - ], - [ - 2114111, - 5883781 - ], - [ - 2114119, - 5883790 - ], - [ - 2114126, - 5883801 - ], - [ - 2114131, - 5883813 - ], - [ - 2114140, - 5883821 - ], - [ - 2114146, - 5883833 - ], - [ - 2114152, - 5883844 - ], - [ - 2114161, - 5883852 - ], - [ - 2114168, - 5883863 - ], - [ - 2114173, - 5883875 - ], - [ - 2114183, - 5883884 - ], - [ - 2114188, - 5883894 - ], - [ - 2114195, - 5883905 - ], - [ - 2114203, - 5883914 - ], - [ - 2114209, - 5883926 - ], - [ - 2114215, - 5883937 - ], - [ - 2114223, - 5883946 - ], - [ - 2114230, - 5883957 - ], - [ - 2114235, - 5883968 - ], - [ - 2114246, - 5883977 - ], - [ - 2114251, - 5883988 - ], - [ - 2114258, - 5883999 - ], - [ - 2114266, - 5884009 - ], - [ - 2114272, - 5884019 - ], - [ - 2114278, - 5884030 - ], - [ - 2114287, - 5884040 - ], - [ - 2114292, - 5884052 - ], - [ - 2114299, - 5884062 - ], - [ - 2114307, - 5884071 - ], - [ - 2114313, - 5884083 - ], - [ - 2114319, - 5884094 - ], - [ - 2114328, - 5884102 - ], - [ - 2114334, - 5884113 - ], - [ - 2114340, - 5884125 - ], - [ - 2114349, - 5884134 - ], - [ - 2114355, - 5884145 - ], - [ - 2114361, - 5884156 - ], - [ - 2114370, - 5884165 - ], - [ - 2114376, - 5884177 - ], - [ - 2114382, - 5884187 - ], - [ - 2114391, - 5884196 - ], - [ - 2114397, - 5884208 - ], - [ - 2114403, - 5884219 - ], - [ - 2114412, - 5884228 - ], - [ - 2114417, - 5884239 - ], - [ - 2114424, - 5884250 - ], - [ - 2114432, - 5884259 - ], - [ - 2114439, - 5884270 - ], - [ - 2114444, - 5884281 - ], - [ - 2114453, - 5884291 - ], - [ - 2114459, - 5884302 - ], - [ - 2114465, - 5884312 - ], - [ - 2114474, - 5884322 - ], - [ - 2114480, - 5884333 - ], - [ - 2114486, - 5884344 - ], - [ - 2114495, - 5884353 - ], - [ - 2114501, - 5884364 - ], - [ - 2114507, - 5884375 - ], - [ - 2114516, - 5884385 - ], - [ - 2114522, - 5884395 - ], - [ - 2114528, - 5884406 - ], - [ - 2114537, - 5884416 - ], - [ - 2114543, - 5884427 - ], - [ - 2114549, - 5884437 - ], - [ - 2114558, - 5884447 - ], - [ - 2114564, - 5884458 - ], - [ - 2114571, - 5884469 - ], - [ - 2114579, - 5884478 - ], - [ - 2114585, - 5884489 - ], - [ - 2114591, - 5884500 - ], - [ - 2114600, - 5884510 - ], - [ - 2114606, - 5884520 - ], - [ - 2114612, - 5884531 - ], - [ - 2114621, - 5884541 - ], - [ - 2114626, - 5884552 - ], - [ - 2114633, - 5884562 - ], - [ - 2114642, - 5884572 - ], - [ - 2114648, - 5884583 - ], - [ - 2114654, - 5884594 - ], - [ - 2114665, - 5884602 - ], - [ - 2114670, - 5884613 - ], - [ - 2114677, - 5884625 - ], - [ - 2114685, - 5884633 - ], - [ - 2114692, - 5884644 - ], - [ - 2114698, - 5884655 - ], - [ - 2114706, - 5884664 - ], - [ - 2114713, - 5884675 - ], - [ - 2114718, - 5884686 - ], - [ - 2114728, - 5884695 - ], - [ - 2114733, - 5884706 - ], - [ - 2114740, - 5884717 - ], - [ - 2114749, - 5884726 - ], - [ - 2114756, - 5884737 - ], - [ - 2114762, - 5884748 - ], - [ - 2114772, - 5884756 - ], - [ - 2114778, - 5884768 - ], - [ - 2114784, - 5884779 - ], - [ - 2114793, - 5884787 - ], - [ - 2114799, - 5884798 - ], - [ - 2114806, - 5884809 - ], - [ - 2114814, - 5884818 - ], - [ - 2114821, - 5884828 - ], - [ - 2114827, - 5884840 - ], - [ - 2114836, - 5884849 - ], - [ - 2114842, - 5884860 - ], - [ - 2114849, - 5884870 - ], - [ - 2114857, - 5884880 - ], - [ - 2114864, - 5884891 - ], - [ - 2114870, - 5884902 - ], - [ - 2114878, - 5884911 - ], - [ - 2114884, - 5884922 - ], - [ - 2114890, - 5884933 - ], - [ - 2114899, - 5884943 - ], - [ - 2114904, - 5884953 - ], - [ - 2114911, - 5884964 - ], - [ - 2114919, - 5884974 - ], - [ - 2114925, - 5884985 - ], - [ - 2114931, - 5884995 - ], - [ - 2114940, - 5885005 - ], - [ - 2114946, - 5885016 - ], - [ - 2114953, - 5885027 - ], - [ - 2114961, - 5885036 - ], - [ - 2114968, - 5885047 - ], - [ - 2114973, - 5885058 - ], - [ - 2114981, - 5885068 - ], - [ - 2114988, - 5885078 - ], - [ - 2114994, - 5885090 - ], - [ - 2115002, - 5885099 - ], - [ - 2115008, - 5885110 - ], - [ - 2115015, - 5885121 - ], - [ - 2115023, - 5885131 - ], - [ - 2115029, - 5885142 - ], - [ - 2115035, - 5885153 - ], - [ - 2115044, - 5885162 - ], - [ - 2115049, - 5885173 - ], - [ - 2115056, - 5885184 - ], - [ - 2115064, - 5885194 - ], - [ - 2115071, - 5885204 - ], - [ - 2115076, - 5885216 - ], - [ - 2115085, - 5885225 - ], - [ - 2115091, - 5885237 - ], - [ - 2115097, - 5885247 - ], - [ - 2115106, - 5885257 - ], - [ - 2115111, - 5885268 - ], - [ - 2115118, - 5885279 - ], - [ - 2115127, - 5885287 - ], - [ - 2115134, - 5885299 - ], - [ - 2115139, - 5885310 - ], - [ - 2115148, - 5885320 - ], - [ - 2115154, - 5885330 - ], - [ - 2115160, - 5885341 - ], - [ - 2115168, - 5885351 - ], - [ - 2115175, - 5885362 - ], - [ - 2115180, - 5885372 - ], - [ - 2115189, - 5885382 - ], - [ - 2115195, - 5885393 - ], - [ - 2115201, - 5885404 - ], - [ - 2115210, - 5885413 - ], - [ - 2115216, - 5885424 - ], - [ - 2115223, - 5885435 - ], - [ - 2115231, - 5885444 - ], - [ - 2115238, - 5885455 - ], - [ - 2115243, - 5885466 - ], - [ - 2115253, - 5885476 - ], - [ - 2115258, - 5885487 - ], - [ - 2115265, - 5885497 - ], - [ - 2115273, - 5885507 - ], - [ - 2115279, - 5885518 - ], - [ - 2115285, - 5885529 - ], - [ - 2115294, - 5885538 - ], - [ - 2115300, - 5885549 - ], - [ - 2115306, - 5885560 - ], - [ - 2115317, - 5885568 - ], - [ - 2115322, - 5885579 - ], - [ - 2115329, - 5885590 - ], - [ - 2115339, - 5885599 - ], - [ - 2115345, - 5885609 - ], - [ - 2115351, - 5885621 - ], - [ - 2115360, - 5885630 - ], - [ - 2115366, - 5885641 - ], - [ - 2115372, - 5885651 - ], - [ - 2115380, - 5885661 - ], - [ - 2115386, - 5885672 - ], - [ - 2115392, - 5885684 - ], - [ - 2115399, - 5885692 - ], - [ - 2115406, - 5885704 - ], - [ - 2115412, - 5885715 - ], - [ - 2115421, - 5885724 - ], - [ - 2115427, - 5885735 - ], - [ - 2115434, - 5885746 - ], - [ - 2115442, - 5885755 - ], - [ - 2115449, - 5885766 - ], - [ - 2115455, - 5885777 - ], - [ - 2115464, - 5885786 - ], - [ - 2115470, - 5885797 - ], - [ - 2115475, - 5885808 - ], - [ - 2115485, - 5885817 - ], - [ - 2115491, - 5885828 - ], - [ - 2115497, - 5885839 - ], - [ - 2115507, - 5885848 - ], - [ - 2115514, - 5885858 - ], - [ - 2115519, - 5885869 - ], - [ - 2115528, - 5885879 - ], - [ - 2115534, - 5885890 - ], - [ - 2115541, - 5885900 - ], - [ - 2115550, - 5885910 - ], - [ - 2115556, - 5885921 - ], - [ - 2115562, - 5885932 - ], - [ - 2115570, - 5885941 - ], - [ - 2115577, - 5885952 - ], - [ - 2115583, - 5885963 - ], - [ - 2115592, - 5885972 - ], - [ - 2115597, - 5885983 - ], - [ - 2115604, - 5885994 - ], - [ - 2115612, - 5886004 - ], - [ - 2115619, - 5886014 - ], - [ - 2115625, - 5886025 - ], - [ - 2115634, - 5886035 - ], - [ - 2115640, - 5886046 - ], - [ - 2115646, - 5886057 - ], - [ - 2115654, - 5886066 - ], - [ - 2115661, - 5886077 - ], - [ - 2115667, - 5886088 - ], - [ - 2115676, - 5886096 - ], - [ - 2115683, - 5886107 - ], - [ - 2115689, - 5886119 - ], - [ - 2115698, - 5886128 - ], - [ - 2115703, - 5886138 - ], - [ - 2115710, - 5886149 - ], - [ - 2115719, - 5886159 - ], - [ - 2115725, - 5886170 - ], - [ - 2115731, - 5886180 - ], - [ - 2115740, - 5886190 - ], - [ - 2115745, - 5886201 - ], - [ - 2115752, - 5886212 - ], - [ - 2115761, - 5886221 - ], - [ - 2115767, - 5886232 - ], - [ - 2115774, - 5886243 - ], - [ - 2115782, - 5886252 - ], - [ - 2115789, - 5886263 - ], - [ - 2115795, - 5886274 - ], - [ - 2115803, - 5886284 - ], - [ - 2115809, - 5886295 - ], - [ - 2115816, - 5886305 - ], - [ - 2115824, - 5886314 - ], - [ - 2115831, - 5886325 - ], - [ - 2115836, - 5886336 - ], - [ - 2115846, - 5886345 - ], - [ - 2115852, - 5886356 - ], - [ - 2115858, - 5886367 - ], - [ - 2115867, - 5886375 - ], - [ - 2115873, - 5886387 - ], - [ - 2115880, - 5886398 - ], - [ - 2115888, - 5886407 - ], - [ - 2115895, - 5886417 - ], - [ - 2115901, - 5886428 - ], - [ - 2115910, - 5886438 - ], - [ - 2115916, - 5886449 - ], - [ - 2115923, - 5886459 - ], - [ - 2115931, - 5886469 - ], - [ - 2115938, - 5886480 - ], - [ - 2115943, - 5886491 - ], - [ - 2115951, - 5886500 - ], - [ - 2115958, - 5886511 - ], - [ - 2115963, - 5886522 - ], - [ - 2115972, - 5886532 - ], - [ - 2115978, - 5886542 - ], - [ - 2115985, - 5886553 - ], - [ - 2115993, - 5886563 - ], - [ - 2116000, - 5886574 - ], - [ - 2116005, - 5886584 - ], - [ - 2116015, - 5886594 - ], - [ - 2116020, - 5886605 - ], - [ - 2116027, - 5886616 - ], - [ - 2116035, - 5886625 - ], - [ - 2116042, - 5886637 - ], - [ - 2116048, - 5886648 - ], - [ - 2116056, - 5886657 - ], - [ - 2116062, - 5886668 - ], - [ - 2116068, - 5886679 - ], - [ - 2116077, - 5886689 - ], - [ - 2116082, - 5886700 - ], - [ - 2116089, - 5886710 - ], - [ - 2116097, - 5886720 - ], - [ - 2116104, - 5886731 - ], - [ - 2116110, - 5886742 - ], - [ - 2116118, - 5886751 - ], - [ - 2116124, - 5886762 - ], - [ - 2116131, - 5886773 - ], - [ - 2116139, - 5886783 - ], - [ - 2116146, - 5886793 - ], - [ - 2116152, - 5886804 - ], - [ - 2116159, - 5886814 - ], - [ - 2116166, - 5886825 - ], - [ - 2116172, - 5886835 - ], - [ - 2116181, - 5886844 - ], - [ - 2116187, - 5886856 - ], - [ - 2116194, - 5886867 - ], - [ - 2116203, - 5886875 - ], - [ - 2116210, - 5886886 - ], - [ - 2116216, - 5886897 - ], - [ - 2116225, - 5886906 - ], - [ - 2116231, - 5886917 - ], - [ - 2116238, - 5886928 - ], - [ - 2116246, - 5886938 - ], - [ - 2116251, - 5886948 - ], - [ - 2116258, - 5886959 - ], - [ - 2116266, - 5886968 - ], - [ - 2116273, - 5886980 - ], - [ - 2116279, - 5886990 - ], - [ - 2116288, - 5887000 - ], - [ - 2116294, - 5887011 - ], - [ - 2116300, - 5887022 - ], - [ - 2116308, - 5887031 - ], - [ - 2116315, - 5887042 - ], - [ - 2116320, - 5887053 - ], - [ - 2116329, - 5887063 - ], - [ - 2116335, - 5887073 - ], - [ - 2116341, - 5887084 - ], - [ - 2116350, - 5887094 - ], - [ - 2116355, - 5887105 - ], - [ - 2116362, - 5887115 - ], - [ - 2116370, - 5887125 - ], - [ - 2116377, - 5887136 - ], - [ - 2116383, - 5887147 - ], - [ - 2116392, - 5887156 - ], - [ - 2116398, - 5887167 - ], - [ - 2116404, - 5887178 - ], - [ - 2116412, - 5887188 - ], - [ - 2116419, - 5887198 - ], - [ - 2116425, - 5887210 - ], - [ - 2116433, - 5887220 - ], - [ - 2116439, - 5887231 - ], - [ - 2116445, - 5887241 - ], - [ - 2116454, - 5887250 - ], - [ - 2116460, - 5887262 - ], - [ - 2116467, - 5887273 - ], - [ - 2116475, - 5887281 - ], - [ - 2116482, - 5887292 - ], - [ - 2116488, - 5887303 - ], - [ - 2116496, - 5887313 - ], - [ - 2116502, - 5887323 - ], - [ - 2116509, - 5887334 - ], - [ - 2116517, - 5887344 - ], - [ - 2116524, - 5887355 - ], - [ - 2116530, - 5887365 - ], - [ - 2116537, - 5887375 - ], - [ - 2116544, - 5887386 - ], - [ - 2116550, - 5887397 - ], - [ - 2116560, - 5887406 - ], - [ - 2116566, - 5887417 - ], - [ - 2116572, - 5887428 - ], - [ - 2116581, - 5887436 - ], - [ - 2116588, - 5887448 - ], - [ - 2116594, - 5887459 - ], - [ - 2116603, - 5887468 - ], - [ - 2116609, - 5887478 - ], - [ - 2116616, - 5887489 - ], - [ - 2116624, - 5887499 - ], - [ - 2116630, - 5887510 - ], - [ - 2116637, - 5887520 - ], - [ - 2116644, - 5887530 - ], - [ - 2116651, - 5887541 - ], - [ - 2116657, - 5887552 - ], - [ - 2116666, - 5887561 - ], - [ - 2116672, - 5887572 - ], - [ - 2116679, - 5887583 - ], - [ - 2116687, - 5887592 - ], - [ - 2116694, - 5887602 - ], - [ - 2116700, - 5887613 - ], - [ - 2116710, - 5887623 - ], - [ - 2116716, - 5887634 - ], - [ - 2116722, - 5887644 - ], - [ - 2116730, - 5887653 - ], - [ - 2116736, - 5887665 - ], - [ - 2116743, - 5887676 - ], - [ - 2116750, - 5887685 - ], - [ - 2116757, - 5887696 - ], - [ - 2116763, - 5887707 - ], - [ - 2116771, - 5887717 - ], - [ - 2116777, - 5887727 - ], - [ - 2116784, - 5887738 - ], - [ - 2116792, - 5887748 - ], - [ - 2116799, - 5887759 - ], - [ - 2116805, - 5887769 - ], - [ - 2116813, - 5887779 - ], - [ - 2116819, - 5887790 - ], - [ - 2116825, - 5887801 - ], - [ - 2116834, - 5887810 - ], - [ - 2116840, - 5887821 - ], - [ - 2116847, - 5887832 - ], - [ - 2116854, - 5887842 - ], - [ - 2116861, - 5887852 - ], - [ - 2116867, - 5887863 - ], - [ - 2116875, - 5887873 - ], - [ - 2116881, - 5887884 - ], - [ - 2116888, - 5887894 - ], - [ - 2116895, - 5887904 - ], - [ - 2116902, - 5887916 - ], - [ - 2116908, - 5887927 - ], - [ - 2116917, - 5887936 - ], - [ - 2116923, - 5887947 - ], - [ - 2116929, - 5887958 - ], - [ - 2116938, - 5887968 - ], - [ - 2116944, - 5887978 - ], - [ - 2116951, - 5887989 - ], - [ - 2116959, - 5887999 - ], - [ - 2116966, - 5888010 - ], - [ - 2116972, - 5888020 - ], - [ - 2116981, - 5888030 - ], - [ - 2116987, - 5888041 - ], - [ - 2116994, - 5888052 - ], - [ - 2117002, - 5888060 - ], - [ - 2117009, - 5888071 - ], - [ - 2117015, - 5888082 - ], - [ - 2117021, - 5888092 - ], - [ - 2117028, - 5888102 - ], - [ - 2117034, - 5888113 - ], - [ - 2117043, - 5888123 - ], - [ - 2117049, - 5888134 - ], - [ - 2117056, - 5888144 - ], - [ - 2117063, - 5888154 - ], - [ - 2117070, - 5888165 - ], - [ - 2117076, - 5888176 - ], - [ - 2117085, - 5888185 - ], - [ - 2117091, - 5888196 - ], - [ - 2117098, - 5888207 - ], - [ - 2117106, - 5888216 - ], - [ - 2117112, - 5888227 - ], - [ - 2117119, - 5888238 - ], - [ - 2117126, - 5888248 - ], - [ - 2117133, - 5888258 - ], - [ - 2117139, - 5888269 - ], - [ - 2117148, - 5888279 - ], - [ - 2117154, - 5888290 - ], - [ - 2117161, - 5888300 - ], - [ - 2117170, - 5888310 - ], - [ - 2117177, - 5888321 - ], - [ - 2117183, - 5888332 - ], - [ - 2117192, - 5888340 - ], - [ - 2117198, - 5888351 - ], - [ - 2117204, - 5888362 - ], - [ - 2117213, - 5888372 - ], - [ - 2117219, - 5888382 - ], - [ - 2117226, - 5888393 - ], - [ - 2117233, - 5888403 - ], - [ - 2117240, - 5888414 - ], - [ - 2117246, - 5888424 - ], - [ - 2117255, - 5888434 - ], - [ - 2117261, - 5888445 - ], - [ - 2117268, - 5888456 - ], - [ - 2117276, - 5888464 - ], - [ - 2117283, - 5888475 - ], - [ - 2117289, - 5888486 - ], - [ - 2117297, - 5888495 - ], - [ - 2117304, - 5888506 - ], - [ - 2117310, - 5888517 - ], - [ - 2117319, - 5888526 - ], - [ - 2117325, - 5888536 - ], - [ - 2117333, - 5888547 - ], - [ - 2117341, - 5888557 - ], - [ - 2117348, - 5888568 - ], - [ - 2117354, - 5888578 - ], - [ - 2117362, - 5888588 - ], - [ - 2117368, - 5888599 - ], - [ - 2117375, - 5888610 - ], - [ - 2117382, - 5888619 - ], - [ - 2117388, - 5888630 - ], - [ - 2117395, - 5888641 - ], - [ - 2117403, - 5888651 - ], - [ - 2117410, - 5888661 - ], - [ - 2117416, - 5888672 - ], - [ - 2117426, - 5888682 - ], - [ - 2117432, - 5888693 - ], - [ - 2117439, - 5888703 - ], - [ - 2117447, - 5888713 - ], - [ - 2117454, - 5888724 - ], - [ - 2117460, - 5888735 - ], - [ - 2117469, - 5888743 - ], - [ - 2117475, - 5888754 - ], - [ - 2117481, - 5888765 - ], - [ - 2117488, - 5888775 - ], - [ - 2117495, - 5888785 - ], - [ - 2117502, - 5888796 - ], - [ - 2117509, - 5888807 - ], - [ - 2117516, - 5888818 - ], - [ - 2117522, - 5888828 - ], - [ - 2117530, - 5888838 - ], - [ - 2117537, - 5888849 - ], - [ - 2117544, - 5888860 - ], - [ - 2117551, - 5888869 - ], - [ - 2117558, - 5888880 - ], - [ - 2117564, - 5888891 - ], - [ - 2117572, - 5888901 - ], - [ - 2117578, - 5888911 - ], - [ - 2117584, - 5888922 - ], - [ - 2117593, - 5888932 - ], - [ - 2117599, - 5888943 - ], - [ - 2117606, - 5888953 - ], - [ - 2117614, - 5888963 - ], - [ - 2117621, - 5888974 - ], - [ - 2117627, - 5888984 - ], - [ - 2117637, - 5888993 - ], - [ - 2117643, - 5889004 - ], - [ - 2117650, - 5889015 - ], - [ - 2117658, - 5889023 - ], - [ - 2117665, - 5889034 - ], - [ - 2117671, - 5889045 - ], - [ - 2117679, - 5889055 - ], - [ - 2117686, - 5889065 - ], - [ - 2117692, - 5889076 - ], - [ - 2117701, - 5889085 - ], - [ - 2117707, - 5889096 - ], - [ - 2117714, - 5889106 - ], - [ - 2117721, - 5889116 - ], - [ - 2117729, - 5889127 - ], - [ - 2117735, - 5889138 - ], - [ - 2117743, - 5889148 - ], - [ - 2117749, - 5889159 - ], - [ - 2117756, - 5889170 - ], - [ - 2117763, - 5889180 - ], - [ - 2117770, - 5889190 - ], - [ - 2117777, - 5889201 - ], - [ - 2117784, - 5889211 - ], - [ - 2117791, - 5889222 - ], - [ - 2117797, - 5889232 - ], - [ - 2117806, - 5889242 - ], - [ - 2117812, - 5889253 - ], - [ - 2117819, - 5889264 - ], - [ - 2117827, - 5889273 - ], - [ - 2117834, - 5889284 - ], - [ - 2117840, - 5889295 - ], - [ - 2117848, - 5889303 - ], - [ - 2117854, - 5889314 - ], - [ - 2117860, - 5889325 - ], - [ - 2117869, - 5889336 - ], - [ - 2117875, - 5889346 - ], - [ - 2117882, - 5889357 - ], - [ - 2117889, - 5889366 - ], - [ - 2117896, - 5889377 - ], - [ - 2117902, - 5889388 - ], - [ - 2117910, - 5889398 - ], - [ - 2117916, - 5889409 - ], - [ - 2117924, - 5889420 - ], - [ - 2117931, - 5889429 - ], - [ - 2117938, - 5889440 - ], - [ - 2117944, - 5889451 - ], - [ - 2117953, - 5889461 - ], - [ - 2117959, - 5889471 - ], - [ - 2117965, - 5889482 - ], - [ - 2117973, - 5889492 - ], - [ - 2117979, - 5889503 - ], - [ - 2117986, - 5889513 - ], - [ - 2117993, - 5889523 - ], - [ - 2118000, - 5889534 - ], - [ - 2118006, - 5889545 - ], - [ - 2118015, - 5889554 - ], - [ - 2118021, - 5889565 - ], - [ - 2118028, - 5889576 - ], - [ - 2118036, - 5889586 - ], - [ - 2118043, - 5889596 - ], - [ - 2118049, - 5889607 - ], - [ - 2118057, - 5889617 - ], - [ - 2118063, - 5889628 - ], - [ - 2118069, - 5889638 - ], - [ - 2118078, - 5889648 - ], - [ - 2118084, - 5889659 - ], - [ - 2118091, - 5889670 - ], - [ - 2118098, - 5889679 - ], - [ - 2118105, - 5889690 - ], - [ - 2118111, - 5889701 - ], - [ - 2118119, - 5889711 - ], - [ - 2118125, - 5889721 - ], - [ - 2118132, - 5889732 - ], - [ - 2118139, - 5889742 - ], - [ - 2118146, - 5889753 - ], - [ - 2118152, - 5889763 - ], - [ - 2118160, - 5889773 - ], - [ - 2118167, - 5889785 - ], - [ - 2118173, - 5889796 - ], - [ - 2118181, - 5889804 - ], - [ - 2118187, - 5889816 - ], - [ - 2118194, - 5889827 - ], - [ - 2118203, - 5889836 - ], - [ - 2118210, - 5889846 - ], - [ - 2118216, - 5889857 - ], - [ - 2118226, - 5889866 - ], - [ - 2118232, - 5889878 - ], - [ - 2118239, - 5889888 - ], - [ - 2118247, - 5889897 - ], - [ - 2118253, - 5889908 - ], - [ - 2118260, - 5889919 - ], - [ - 2118267, - 5889929 - ], - [ - 2118274, - 5889940 - ], - [ - 2118280, - 5889951 - ], - [ - 2118288, - 5889961 - ], - [ - 2118294, - 5889971 - ], - [ - 2118301, - 5889982 - ], - [ - 2118308, - 5889992 - ], - [ - 2118315, - 5890003 - ], - [ - 2118322, - 5890013 - ], - [ - 2118330, - 5890023 - ], - [ - 2118336, - 5890034 - ], - [ - 2118343, - 5890044 - ], - [ - 2118351, - 5890053 - ], - [ - 2118357, - 5890064 - ], - [ - 2118364, - 5890075 - ], - [ - 2118372, - 5890084 - ], - [ - 2118379, - 5890095 - ], - [ - 2118385, - 5890106 - ], - [ - 2118393, - 5890116 - ], - [ - 2118399, - 5890126 - ], - [ - 2118406, - 5890137 - ], - [ - 2118413, - 5890147 - ], - [ - 2118421, - 5890158 - ], - [ - 2118427, - 5890168 - ], - [ - 2118434, - 5890178 - ], - [ - 2118441, - 5890189 - ], - [ - 2118447, - 5890200 - ], - [ - 2118456, - 5890209 - ], - [ - 2118462, - 5890220 - ], - [ - 2118469, - 5890231 - ], - [ - 2118477, - 5890241 - ], - [ - 2118484, - 5890251 - ], - [ - 2118490, - 5890262 - ], - [ - 2118498, - 5890272 - ], - [ - 2118504, - 5890283 - ], - [ - 2118511, - 5890293 - ], - [ - 2118518, - 5890303 - ], - [ - 2118525, - 5890314 - ], - [ - 2118531, - 5890325 - ], - [ - 2118540, - 5890334 - ], - [ - 2118546, - 5890345 - ], - [ - 2118552, - 5890356 - ], - [ - 2118559, - 5890367 - ], - [ - 2118566, - 5890377 - ], - [ - 2118573, - 5890388 - ], - [ - 2118580, - 5890398 - ], - [ - 2118587, - 5890409 - ], - [ - 2118593, - 5890419 - ], - [ - 2118601, - 5890429 - ], - [ - 2118607, - 5890440 - ], - [ - 2118614, - 5890451 - ], - [ - 2118621, - 5890461 - ], - [ - 2118628, - 5890472 - ], - [ - 2118634, - 5890483 - ], - [ - 2118643, - 5890493 - ], - [ - 2118649, - 5890503 - ], - [ - 2118656, - 5890514 - ], - [ - 2118663, - 5890524 - ], - [ - 2118669, - 5890535 - ], - [ - 2118676, - 5890545 - ], - [ - 2118684, - 5890554 - ], - [ - 2118691, - 5890565 - ], - [ - 2118698, - 5890576 - ], - [ - 2118706, - 5890585 - ], - [ - 2118712, - 5890596 - ], - [ - 2118719, - 5890607 - ], - [ - 2118727, - 5890617 - ], - [ - 2118734, - 5890627 - ], - [ - 2118740, - 5890638 - ], - [ - 2118747, - 5890648 - ], - [ - 2118754, - 5890659 - ], - [ - 2118760, - 5890669 - ], - [ - 2118768, - 5890679 - ], - [ - 2118774, - 5890690 - ], - [ - 2118781, - 5890701 - ], - [ - 2118789, - 5890710 - ], - [ - 2118796, - 5890721 - ], - [ - 2118803, - 5890732 - ], - [ - 2118811, - 5890742 - ], - [ - 2118817, - 5890752 - ], - [ - 2118824, - 5890763 - ], - [ - 2118832, - 5890772 - ], - [ - 2118839, - 5890783 - ], - [ - 2118846, - 5890793 - ], - [ - 2118853, - 5890803 - ], - [ - 2118860, - 5890814 - ], - [ - 2118866, - 5890825 - ], - [ - 2118875, - 5890834 - ], - [ - 2118881, - 5890845 - ], - [ - 2118888, - 5890856 - ], - [ - 2118895, - 5890866 - ], - [ - 2118902, - 5890876 - ], - [ - 2118908, - 5890887 - ], - [ - 2118916, - 5890897 - ], - [ - 2118922, - 5890908 - ], - [ - 2118930, - 5890918 - ], - [ - 2118937, - 5890928 - ], - [ - 2118944, - 5890939 - ], - [ - 2118951, - 5890949 - ], - [ - 2118958, - 5890959 - ], - [ - 2118965, - 5890970 - ], - [ - 2118972, - 5890981 - ], - [ - 2118980, - 5890990 - ], - [ - 2118987, - 5891001 - ], - [ - 2118994, - 5891011 - ], - [ - 2119000, - 5891022 - ], - [ - 2119008, - 5891031 - ], - [ - 2119014, - 5891042 - ], - [ - 2119022, - 5891052 - ], - [ - 2119028, - 5891063 - ], - [ - 2119035, - 5891073 - ], - [ - 2119042, - 5891084 - ], - [ - 2119048, - 5891094 - ], - [ - 2119056, - 5891105 - ], - [ - 2119062, - 5891115 - ], - [ - 2119069, - 5891126 - ], - [ - 2119076, - 5891137 - ], - [ - 2119084, - 5891147 - ], - [ - 2119090, - 5891157 - ], - [ - 2119097, - 5891168 - ], - [ - 2119104, - 5891178 - ], - [ - 2119111, - 5891189 - ], - [ - 2119118, - 5891199 - ], - [ - 2119126, - 5891209 - ], - [ - 2119132, - 5891220 - ], - [ - 2119138, - 5891231 - ], - [ - 2119147, - 5891240 - ], - [ - 2119153, - 5891251 - ], - [ - 2119160, - 5891262 - ], - [ - 2119168, - 5891272 - ], - [ - 2119175, - 5891281 - ], - [ - 2119182, - 5891292 - ], - [ - 2119190, - 5891302 - ], - [ - 2119197, - 5891313 - ], - [ - 2119204, - 5891323 - ], - [ - 2119212, - 5891333 - ], - [ - 2119219, - 5891344 - ], - [ - 2119225, - 5891355 - ], - [ - 2119233, - 5891363 - ], - [ - 2119241, - 5891374 - ], - [ - 2119247, - 5891385 - ], - [ - 2119255, - 5891394 - ], - [ - 2119261, - 5891405 - ], - [ - 2119269, - 5891416 - ], - [ - 2119275, - 5891426 - ], - [ - 2119283, - 5891436 - ], - [ - 2119289, - 5891447 - ], - [ - 2119297, - 5891457 - ], - [ - 2119303, - 5891468 - ], - [ - 2119311, - 5891478 - ], - [ - 2119319, - 5891487 - ], - [ - 2119325, - 5891498 - ], - [ - 2119332, - 5891509 - ], - [ - 2119340, - 5891518 - ], - [ - 2119347, - 5891529 - ], - [ - 2119353, - 5891540 - ], - [ - 2119361, - 5891550 - ], - [ - 2119368, - 5891560 - ], - [ - 2119375, - 5891571 - ], - [ - 2119381, - 5891581 - ], - [ - 2119389, - 5891592 - ], - [ - 2119395, - 5891602 - ], - [ - 2119403, - 5891612 - ], - [ - 2119410, - 5891623 - ], - [ - 2119416, - 5891634 - ], - [ - 2119424, - 5891643 - ], - [ - 2119431, - 5891654 - ], - [ - 2119438, - 5891665 - ], - [ - 2119445, - 5891675 - ], - [ - 2119452, - 5891685 - ], - [ - 2119458, - 5891696 - ], - [ - 2119466, - 5891706 - ], - [ - 2119473, - 5891717 - ], - [ - 2119480, - 5891727 - ], - [ - 2119486, - 5891737 - ], - [ - 2119493, - 5891748 - ], - [ - 2119499, - 5891759 - ], - [ - 2119506, - 5891768 - ], - [ - 2119513, - 5891779 - ], - [ - 2119520, - 5891790 - ], - [ - 2119527, - 5891801 - ], - [ - 2119533, - 5891811 - ], - [ - 2119541, - 5891821 - ], - [ - 2119547, - 5891832 - ], - [ - 2119554, - 5891843 - ], - [ - 2119561, - 5891853 - ], - [ - 2119569, - 5891863 - ], - [ - 2119575, - 5891874 - ], - [ - 2119582, - 5891885 - ], - [ - 2119588, - 5891895 - ], - [ - 2119596, - 5891905 - ], - [ - 2119602, - 5891916 - ], - [ - 2119609, - 5891926 - ], - [ - 2119616, - 5891936 - ], - [ - 2119623, - 5891947 - ], - [ - 2119630, - 5891957 - ], - [ - 2119637, - 5891968 - ], - [ - 2119644, - 5891978 - ], - [ - 2119651, - 5891989 - ], - [ - 2119659, - 5891999 - ], - [ - 2119665, - 5892010 - ], - [ - 2119672, - 5892020 - ], - [ - 2119679, - 5892031 - ], - [ - 2119686, - 5892042 - ], - [ - 2119693, - 5892051 - ], - [ - 2119701, - 5892061 - ], - [ - 2119707, - 5892072 - ], - [ - 2119714, - 5892082 - ], - [ - 2119722, - 5892093 - ], - [ - 2119728, - 5892103 - ], - [ - 2119737, - 5892113 - ], - [ - 2119743, - 5892124 - ], - [ - 2119751, - 5892134 - ], - [ - 2119758, - 5892143 - ], - [ - 2119766, - 5892154 - ], - [ - 2119772, - 5892165 - ], - [ - 2119782, - 5892173 - ], - [ - 2119788, - 5892184 - ], - [ - 2119794, - 5892195 - ], - [ - 2119802, - 5892205 - ], - [ - 2119809, - 5892215 - ], - [ - 2119816, - 5892226 - ], - [ - 2119823, - 5892236 - ], - [ - 2119831, - 5892246 - ], - [ - 2119837, - 5892256 - ], - [ - 2119844, - 5892267 - ], - [ - 2119851, - 5892278 - ], - [ - 2119858, - 5892288 - ], - [ - 2119865, - 5892298 - ], - [ - 2119872, - 5892308 - ], - [ - 2119879, - 5892319 - ], - [ - 2119884, - 5892330 - ], - [ - 2119892, - 5892340 - ], - [ - 2119898, - 5892350 - ], - [ - 2119906, - 5892361 - ], - [ - 2119912, - 5892372 - ], - [ - 2119919, - 5892382 - ], - [ - 2119926, - 5892392 - ], - [ - 2119933, - 5892403 - ], - [ - 2119939, - 5892414 - ], - [ - 2119947, - 5892423 - ], - [ - 2119953, - 5892434 - ], - [ - 2119961, - 5892445 - ], - [ - 2119968, - 5892456 - ], - [ - 2119975, - 5892466 - ], - [ - 2119982, - 5892477 - ], - [ - 2119990, - 5892487 - ], - [ - 2119996, - 5892498 - ], - [ - 2120002, - 5892508 - ], - [ - 2120011, - 5892518 - ], - [ - 2120017, - 5892529 - ], - [ - 2120024, - 5892540 - ], - [ - 2120031, - 5892549 - ], - [ - 2120039, - 5892560 - ], - [ - 2120045, - 5892571 - ], - [ - 2120053, - 5892580 - ], - [ - 2120059, - 5892590 - ], - [ - 2120067, - 5892601 - ], - [ - 2120073, - 5892612 - ], - [ - 2120080, - 5892623 - ], - [ - 2120087, - 5892633 - ], - [ - 2120094, - 5892642 - ], - [ - 2120102, - 5892653 - ], - [ - 2120108, - 5892664 - ], - [ - 2120118, - 5892672 - ], - [ - 2120124, - 5892683 - ], - [ - 2120132, - 5892694 - ], - [ - 2120140, - 5892702 - ], - [ - 2120148, - 5892713 - ], - [ - 2120154, - 5892724 - ], - [ - 2120163, - 5892732 - ], - [ - 2120170, - 5892743 - ], - [ - 2120177, - 5892753 - ], - [ - 2120186, - 5892763 - ], - [ - 2120192, - 5892773 - ], - [ - 2120200, - 5892783 - ], - [ - 2120206, - 5892793 - ], - [ - 2120214, - 5892804 - ], - [ - 2120221, - 5892814 - ], - [ - 2120228, - 5892824 - ], - [ - 2120235, - 5892834 - ], - [ - 2120242, - 5892845 + 1131100, + 4826642 + ] ] - ] ], "type": "AnyCrsMultiLineString" }, diff --git a/testing/indexer-test-gcp/pom.xml b/testing/indexer-test-gc/pom.xml similarity index 95% rename from testing/indexer-test-gcp/pom.xml rename to testing/indexer-test-gc/pom.xml index 4eb60ee4e9217f851fafc1dffb8517ed322a3435..5873bff29b58b84629d995b20d44ecdaa86eda90 100644 --- a/testing/indexer-test-gcp/pom.xml +++ b/testing/indexer-test-gc/pom.xml @@ -6,13 +6,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.indexer</groupId> - <artifactId>indexer-test-gcp</artifactId> - <version>0.18.0-SNAPSHOT</version> + <artifactId>indexer-test-gc</artifactId> + <version>0.20.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> @@ -37,7 +37,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </dependency> <!-- Cucumber --> diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/index/record/RunTest.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/index/record/RunTest.java similarity index 100% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/index/record/RunTest.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/index/record/RunTest.java diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/index/record/Steps.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/index/record/Steps.java similarity index 100% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/index/record/Steps.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/index/record/Steps.java diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/info/RunTest.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/info/RunTest.java similarity index 100% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/info/RunTest.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/info/RunTest.java diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/info/Steps.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/info/Steps.java similarity index 100% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/step_definitions/info/Steps.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/step_definitions/info/Steps.java diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/util/GCPHTTPClient.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/util/GCPHTTPClient.java similarity index 100% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/util/GCPHTTPClient.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/util/GCPHTTPClient.java diff --git a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java similarity index 97% rename from testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java rename to testing/indexer-test-gc/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java index 7c13aaae6539701a93daf5793be42e12a2e9da3b..d42350bad53f95ed5c2f3b8f8cfba7159855ed33 100644 --- a/testing/indexer-test-gcp/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java +++ b/testing/indexer-test-gc/src/test/java/org/opengroup/osdu/util/JwtTokenUtil.java @@ -66,8 +66,6 @@ class JwtTokenUtil { } private static String getJwt(String serviceAccountFile) throws IOException { - - String targetAudience = Config.getTargetAudience(); long currentTime = Clock.SYSTEM.currentTimeMillis(); InputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(serviceAccountFile)); @@ -83,7 +81,7 @@ class JwtTokenUtil { payload.setExpirationTimeSeconds(currentTime / 1000 + 3600); payload.setAudience("https://www.googleapis.com/oauth2/v4/token"); payload.setIssuer(credential.getServiceAccountId()); - payload.set("target_audience", targetAudience); + payload.set("target_audience", "osdu"); JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); String signedJwt = null; diff --git a/testing/indexer-test-gcp/src/test/resources/logback-test.xml b/testing/indexer-test-gc/src/test/resources/logback-test.xml similarity index 100% rename from testing/indexer-test-gcp/src/test/resources/logback-test.xml rename to testing/indexer-test-gc/src/test/resources/logback-test.xml diff --git a/testing/indexer-test-ibm/pom.xml b/testing/indexer-test-ibm/pom.xml index efa7099b9499f424bd408658ab210edeffd377a5..a749aeda28ce6bea5d50fdc801e80cccef7936a4 100644 --- a/testing/indexer-test-ibm/pom.xml +++ b/testing/indexer-test-ibm/pom.xml @@ -6,13 +6,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-ibm</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> @@ -38,7 +38,7 @@ <dependency> <groupId>org.opengroup.osdu.indexer</groupId> <artifactId>indexer-test-core</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> </dependency> <dependency> diff --git a/testing/pom.xml b/testing/pom.xml index fd1d519873d389e8049ae99c664da60cb699ee81..ddaf9284a1e76083eddc4c097f9768cbef2080b6 100644 --- a/testing/pom.xml +++ b/testing/pom.xml @@ -18,7 +18,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>indexer-test</artifactId> - <version>0.18.0-SNAPSHOT</version> + <version>0.20.0-SNAPSHOT</version> <description>Indexer Service Integration Test Root Project</description> <properties> <spring.version>5.3.23</spring.version> @@ -35,7 +35,7 @@ <modules> <module>indexer-test-core</module> - <module>indexer-test-gcp</module> + <module>indexer-test-gc</module> <module>indexer-test-aws</module> <module>indexer-test-azure</module> <module>indexer-test-ibm</module> diff --git a/testing/readme.md b/testing/readme.md index 0d9166e071d7427a4cf2e050ac38be34142703ac..1d8b113686cc1ed0ad2c6e25bd8cfbc41e1fbdba 100644 --- a/testing/readme.md +++ b/testing/readme.md @@ -14,7 +14,6 @@ 5) Update **DEFAULT_SEARCH_INTEGRATION_TESTER** variable in Config file with base64 encoded value to service account json key 6) Update **DEFAULT_SEARCH_ON_BEHALF_INTEGRATION_TESTER** variable in Config file with base64 encoded value to service account json key (it will be used for slb-on-behalf-header) 7) Have credentials for Elastic Cluster and update **DEFAULT_ELASTIC_HOST**, **DEFAULT_ELASTIC_USER_NAME** and **DEFAULT_ELASTIC_PASSWORD**. -8) Update **DEFAULT_TARGET_AUDIENCE** with the Google audience Note: 1) Config (Config.java) file is present in org.opengroup.osdu.util package