diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..bf5b55f4 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,8 @@ +# This is a comment. +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# these users will be requested for +# review when someone opens a pull request. +* @mbjones @datadavev @taojing2002 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..b3c78813 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "maven" + directory: "/" + schedule: + interval: "daily" + target-branch: "develop" diff --git a/.github/workflows/build-test-publish.yaml b/.github/workflows/build-test-publish.yaml new file mode 100644 index 00000000..49939509 --- /dev/null +++ b/.github/workflows/build-test-publish.yaml @@ -0,0 +1,94 @@ +name: Java Maven Build, Test, and Publish + +on: + push: + branches: + - feature* + - develop + - '*-image-auto-publish' + tags: [ 'v*.*.*' ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + #IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: ${{ github.repository_owner }}/dataone-index-worker + +jobs: + maven-build: + name: Maven Build and Test + runs-on: ubuntu-latest + outputs: + version: ${{ steps.get_version.outputs.version }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: 'maven' + + - name: Extract Maven project version + run: echo "version="$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec) >> $GITHUB_OUTPUT + id: get_version + #- name: Show extracted Maven project version + #run: echo "Version from pom: " ${{ steps.get_version.outputs.version }} + + - name: Build and Test + run: mvn --batch-mode --update-snapshots test + - name: Package + run: mvn --batch-mode --update-snapshots -DskipTests=true package + - uses: actions/cache@v3 + with: + path: . + key: builddir-${{ github.run_id }} + + docker-publish: + name: Docker Build and Publish + if: github.ref_name == 'develop' || github.ref_name == 'v*.*.*' + needs: maven-build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/cache@v3 + with: + path: . + key: builddir-${{ github.run_id }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + # Login against a Docker registry except on PR + # https://github.com/docker/login-action + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: . + file: docker/Dockerfile + build-args: TAG=${{needs.maven-build.outputs.version}} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1014ab1f..c5cae224 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,8 @@ on: workflow_dispatch: push: branches: - - develop* + - main + #- develop jobs: build: diff --git a/.gitignore b/.gitignore index ee44a963..0a316cbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .idea target +.java-version +tlog/ +charts/ diff --git a/README.md b/README.md index 290d5644..f30579b0 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,277 @@ # DataONE Indexer -This component provides index task processing of index tasks created by other components. It consists of -three main subsystems, each defined by it's own helm subsystem chart: +The DataONE Indexer is a system that processes index tasks created by other components. The DataONE +Indexer comprises three main subsystems, each defined by its own helm subsystem chart: -- index-worker: a subsystem implementing a Worker class to process index jobs in parallel -- rabbitmq: a deplyment of the RabbitMQ queue management system -- solr: a deployment of the SOLR full text search system +- **index-worker**: a subsystem implementing a Worker class to process index jobs in parallel +- **rabbitmq**: a deployment of the RabbitMQ queue management system +- **solr**: a deployment of the SOLR full text search system -Clients are expected to register index task messages in the RabbitMQ queue to be processed. Upon startup, the RabbitMQ workers -register themselves as handlers of the index task messages. As messages enter the queue, RabbitMQ dispatches these to -registered workers in parallel, and workers in turn process the associated object and insert a new index entry into SOLR. +```mermaid +flowchart TB + subgraph "`**DataONE Indexer + Helm Chart**`" + A("`Index Worker + *(1..n)*`") + A -- sub chart --> C("`RabbitMQ + *(1..n)*`") + A -- sub chart --> D("`solr + *(1..n)*`") + end +``` + +Clients are expected to register index task messages to be processed in the RabbitMQ queue. Upon +startup, the RabbitMQ workers register themselves as handlers of the index task messages. As +messages enter the queue, RabbitMQ dispatches these to registered workers in parallel, and workers +in turn process each associated object and insert a new index entry into SOLR. -See LICENSE.txt for the details of distributing this software. +See [LICENSE.md](./LICENSE.md) for the details of distributing this software. ## Building Docker image -The image can be built with either `docker` or `nerdctl` depending on which container environment you have installed. Here I show the example using -Racher Desktop configured to use `nerdctl`. +The image can be built with either `docker` or `nerdctl` depending on which container environment +you have installed. For example using Rancher Desktop configured to use `nerdctl`: -```bash +```shell mvn clean package -DskipTests nerdctl build -t dataone-index-worker:2.4.0 -f docker/Dockerfile --build-arg TAG=2.4.0 . ``` +If you are building locally for Kubernetes on rancher-desktop, you'll need to set the namespace +to `k8s.io` using a build command such as: + +```shell +mvn clean package -DskipTests +nerdctl build -t dataone-index-worker:2.4.0 -f docker/Dockerfile --build-arg TAG=2.4.0 \ + --namespace k8s.io . +``` + +## Publish the image to GHCR + +For the built image to be deployable in a remote kubernetes cluster, it must first be published to +an image registry that is visible to Kubernetes. For example, we can make the published image +available via the GitHub Container Registry (ghcr.io) so that it can be pulled by +Kubernetes. For this to work, the image must be tagged with the ghcr.io URL, so it can be published. +Then the image can be pushed to the registry after logging in with a suitable GitHub PAT. + +Note that, for the image to be associated with a particular GitHub repository, a metadata LABEL can +be added to the image that associates it when it is built - see this entry in the Dockerfile: + +```dockerfile +LABEL org.opencontainers.image.source="https://github.com/dataoneorg/dataone-indexer" +``` + +Commands for pushing the built image (example assuming tag is `2.4.0`): + +```shell +GITHUB_PAT="your-own-secret-GitHub-Personal-Access-Token-goes-here" +TAG=2.4.0 + +nerdctl tag dataone-index-worker:$TAG ghcr.io/dataoneorg/dataone-index-worker:$TAG +echo $GITHUB_PAT | nerdctl login ghcr.io -u DataONEorg --password-stdin +nerdctl push ghcr.io/dataoneorg/dataone-index-worker:$TAG +``` + +Once the image has been pushed, it may be private and will need to be made public and assigned to +the `dataone-indexer` repository if the LABEL wasn't set as described above. + +## Publishing the Helm Chart + +The helm chart may also be published to a helm repository for use by others as a top-level +application deployment or as a dependency sub-chart. For example, we can publish the chart +via the GitHub Container Registry (ghcr.io). For this to work, the chart must contain an annotation +to associate it with the correct repository - see this entry in [`Chart.yaml`](./helm/Chart.yaml): + +```yaml +# OCI Annotations - see https://github.com/helm/helm/pull/11204 +sources: + - https://github.com/dataoneorg/dataone-indexer +``` + +The chart must then be packaged: + +```shell +helm package ./helm +``` + +...which creates a zipped tar file named `dataone-indexer-{version}.tgz`, where `{version}` reflects +the chart `version` in [`Chart.yaml`](./helm/Chart.yaml). The chart can then be published to the +correct ghcr.io URL, after logging in with a suitable GitHub PAT: + +(example assumes the chart version is 0.5.0) +```shell +GITHUB_PAT="your-own-secret-GitHub-Personal-Access-Token-goes-here" +TAG=2.4.0 +helm push dataone-indexer-0.5.0.tgz oci://ghcr.io/dataoneorg/charts +``` +NOTE the use of **charts** in the oci url, in order to distinguish helm charts from docker images. + +## Deploying the application via Helm + +Helm provides a simple mechanism to install all application dependencies and configure the +application in a single command. To deploy using helm to a release named `d1index` and also in a +namespace named `d1index`, and then view the deployed pods and services, use a sequence like: + +```shell +kubectl create namespace d1index +helm install -n d1index d1index ./helm +kubectl -n d1index get all +``` + +and to uninstall the helm, use: + +```shell +helm -n d1index uninstall d1index +``` + +Note that this helm chart also installs rabbitmq and solr, which can be partially configured +through the values.yaml file in the parent chart through exported child properties. + +### Authentication Notes + +#### DataONE Authentication Token + +In order to access and index private datasets on a Metacat instance, the dataone-indexer needs an +authentication token, which may be obtained from DataONE administrators (see the [Metacat Helm +README](https://github.com/NCEAS/metacat/blob/develop/helm/README.md#setting-up-a-token-and-optional-ca-certificate-for-indexer-access)). +Upon startup, the indexer expects to find a Kubernetes Secret named: +`{{ .Release.Name }}-indexer-token`, which contains the auth token associated with the key +`DataONEauthToken`. The indexer can operate without this Secret, but will only be able to index +public-readable datasets. + +#### RabbitMQ + +The rabbitmq service runs under the username and password that are set via values.yaml + +```yaml +rabbitmq: + auth: + username: rmq + existingPasswordSecret: "" ## (must contain key: `rabbitmq-password`) +``` + +...where `existingPasswordSecret` is the name of a Kubernetes secret that contains the password, +identified by a key named `rabbitmq-password`. + +> **NOTE:** it appears that this information is cached +on a PersistentVolumeClaim that is created automatically by rabbitmq. If the credentials are changed +in `values.yaml` and/or the secret, therefore, authentication will fail because they will conflict +with the cached values in the PVC. If you are just testing, the problem can be resolved by deleting +the PVC. In production, the PVC would also be used for maintaining durable queues, and so it may not +be reasonable to delete the PVC. You can get the name and identifiers of the PVCs with +`kubectl -n d1index get pvc`. + ## Running the IndexWorker in the docker container -```bash -nerdctl run --rm dataone-index-worker:2.4.0 +The docker image assumes that the deployment configuration file exists to configure endpoint +addresses and credentials. To run the indexer, ensure that the`DATAONE_INDEXER_CONFIG` is set in the +environment and contains the absolute path to the configuration file for the indexer. This path must +be accessible in the container, so you will likely want to mount a volume to provide the edited +properties file. You can then run it using a command like: + +```shell +nerdctl run -it \ + -e DATAONE_INDEXER_CONFIG=/var/lib/dataone-indexer/dataone-indexer.properties \ + -v `pwd`/helm/config/dataone-indexer.properties:/var/lib/dataone-indexer/dataone-indexer.properties \ + dataone-index-worker:2.4.0 ``` -## History +## A Note on SOLR Authentication + +The helm installation does not currently configure solr with authentication enabled, since the +service is not exposed outside the Kubernetes cluster. Mentions of logins in the following sections +can therefore be ignored. However, this should be changed to use authentication if connecting to a +solr instance outside the cluster. + +## Checking if SOLR is configured + +Logging in using the SOLR_AUTHENTICATION_OPTS and SOLR_AUTH_TYPE env variables (if applicable) +allows the `solr` command to be executed to check the server status: + +```shell +$ export SOLR_AUTH_TYPE=basic +$ export SOLR_AUTHENTICATION_OPTS="-Dbasicauth=${SOLR_ADMIN_USERNAME}:${SOLR_ADMIN_PASSWORD}" +$ solr status -z ${SOLR_ZK_HOSTS} -c ${SOLR_COLLECTION} + +Found 1 Solr nodes: + +Solr process 8 running on port 8983 +{ + "solr_home":"/opt/bitnami/solr/server/solr", + "version":"9.0.0 a4eb7aa123dc53f8dac74d80b66a490f2d6b4a26 - janhoy - 2022-05-05 01:00:08", + "startTime":"2022-10-11T07:08:50.155Z", + "uptime":"0 days, 0 hours, 21 minutes, 52 seconds", + "memory":"70.9 MB (%13.8) of 512 MB", + "cloud":{ + "ZooKeeper":"d1index-zookeeper:2181/solr", + "liveNodes":"3", + "collections":"1"}} +``` + +# SOLR Dashboard + +Once the SOLR server is up and running, connect to the SOLR Dashboard by creating a kube proxy, and +then browse to the local address: -This is a refactored version of the original DataONE [d1_cn_index_processor](https://github.com/DataONEorg/d1_cn_index_processor) that runs completely independently of other -DataONE Coordinating Node services. It is intended to be deployed in a Kubernetes cluster environment, but is written such -that it can be deployed in other environments as well as needed. +```shell +k8 port-forward -n d1index service/d1index-solr 8983:8983 & echo "Solr URL: 127.0.0.1:8983/solr/" +``` + +You'll need to log in with the helm-configured SOLR admin user and password, if applicable. + +Once the proxy is set up, you can also run API calls from the [ConfigSet API](https://solr.apache.org/guide/6_6/configsets-api.html) and +[Collections API](https://solr.apache.org/guide/6_6/collections-api.html). + +```shell +curl -u ${SOLR_ADMIN_USERNAME}:${SOLR_ADMIN_PASSWORD} http://localhost:8983/solr/admin/configs?action=CREATE\&name=dataone-index --header "Content-Type:text/xml" -X POST -d @dataone-index.zip +{ + "responseHeader":{ + "status":0, + "QTime":5974}} +curl -u ${SOLR_ADMIN_USERNAME}:${SOLR_ADMIN_PASSWORD} http://localhost:8983/solr/admin/configs?action=list +curl -u ${SOLR_ADMIN_USERNAME}:${SOLR_ADMIN_PASSWORD} http://localhost:8983/solr/admin/collections?action=list +``` + +### Admin tools for rabbitmq + +Once rabbitmq is configured, the web console can be accessed by port-forwarding. + +```shell +k8 -n jones port-forward pod/d1index-rabbitmq-0 15672:15672 & +``` + +then login to the Rabbitmq web console: http://localhost:15672 + +You can also download a copy of `rabbitmqadmin` from http://localhost:15672/cli/rabbitmqadmin, +and the `rabbitmqadmin` command can be used to interact with the server. First, you need to set up a +config file for `rabbitmqadmin` that provides some default values: + +```shell +$ cat rmq.conf +[default] +hostname = d1index-rabbitmq-headless +port = 15672 +username = rmq +password = your-client-pw-here +declare_vhost = / # Used as default for declare / delete only +vhost = / # Used as default for declare / delete / list +``` + +- List exchanges and queues + - `rabbitmqadmin -c rmq.conf -N default -U rmq -p $RMQPW list exchanges --vhost=/` + - `rabbitmqadmin -c rmq.conf -N default -U rmq -p $RMQPW list queues --vhost=/` +- Declare exchanges, queues, and bindings + - `rabbitmqadmin -c rmq.conf -N default declare exchange name=testexchange type=direct -U rmq -p $RMQPW --vhost=/` + - `rabbitmqadmin -c rmq.conf -N default declare queue name=testqueue type=direct -U rmq -p $RMQPW --vhost=/` + - `rabbitmqadmin -c rmq.conf -N default -U rmq -p $RMQPW declare binding source=testexchange destination=testqueue routing_key=testqueue --vhost=/` +- Publish a bunch of messages to a queue +``` +for n in $(seq 1 30); do echo $n; rabbitmqadmin -c rmq.conf -N default -U rmq -p $RMQPW publish exchange=testexchange routing_key=testqueue payload="Message: ${n}" --vhost=/; done +``` + +## History +This is a refactored version of the original DataONE [d1_cn_index_processor](https://github.com/DataONEorg/d1_cn_index_processor) that runs +completely independently of other DataONE Coordinating Node services. It is intended to be deployed +in a Kubernetes cluster environment, but is written such that it can also be deployed in other +environments as needed. diff --git a/docker/Dockerfile b/docker/Dockerfile index 0bc58d0b..3bbe2852 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,25 +1,39 @@ +# Build from parent dir with a command like: +# `nerdctl build -t dataone-index-worker:2.4.0 -f docker/Dockerfile --build-arg TAG=2.4.0 .` # Use an OpenJDK runtime as a parent image -FROM openjdk:8-jre-alpine +# Note: the prior alpine-based openjdk image had network DNS issues, so replacing with Eclipse Temurin +FROM eclipse-temurin:17.0.8.1_1-jre-jammy -ARG TAG=2.0.0 +ARG TAG=3.0.0-SNAPSHOT ENV TAG=${TAG} +ENV DATAONE_INDEXER_CONFIG=/etc/dataone/dataone-indexer.properties # Set the working directory WORKDIR /var/lib/dataone-indexer -RUN apk update -# bash is needed by the openssl install -RUN apk add bash -#RUN apk add g++ libc-dev openssl-dev libxml2 libxml2-dev +RUN apt update && apt -y install \ + bash \ + figlet \ + curl \ + nano + +#Add a user & group with id=1001 and name=d1indexer +RUN groupadd -g 1000 d1indexer && useradd -u 1000 -g 1000 d1indexer # The most recently built jar file is copied from the maven build directory to this dir by maven, so that -# it can be copyied to the image. -COPY ../target/dataone-index-worker-$TAG.jar . +# it can be copied to the image. +COPY ../target/dataone-index-worker-${TAG}-shaded.jar . +COPY ./docker/entrypoint.sh . + +# Change the ownership of the jar and sh files +RUN chown d1indexer dataone-index-worker-${TAG}-shaded.jar +RUN chown d1indexer entrypoint.sh + +#Run Container as d1indexer +USER 1000 + +# Connect this image to a GitHub repository +LABEL org.opencontainers.image.source="https://github.com/dataoneorg/dataone-indexer" # Run the Worker process -# Note: docker --build-arg only allows one argument (one token only, multiple tokens inside quotes doesn't work, so have -# to specify java options directly on command line. -# Set classpath to include /opt/local/metadig/log4j.properties, if it exists, so that logging can be changed without -# having to rebuild the container. Note that on k8s, this dir is mapped to the persistent volume, so will be /data/metadig/log4j.properties -CMD java -Dlog4j2.formatMsgNoLookups=true -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:+UseSerialGC -cp ./dataone-index-worker-$TAG.jar org.dataone.cn.index.IndexWorker -#CMD sh -c 'trap "exit" TERM; while true; do sleep 1; done' +CMD ./entrypoint.sh diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 00000000..bf64a441 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash +figlet -ck DataONE Indexer + +if [[ "$DEBUG" == "TRUE" ]] +then + echo "Starting infinite loop, ctrl-c to interrupt..." + sh -c 'trap "exit" TERM; while true; do sleep 1; done' +else + java -Dlog4j2.formatMsgNoLookups=true \ + -XX:+UnlockExperimentalVMOptions \ + -XX:+UseContainerSupport \ + -XX:+UseSerialGC \ + -cp /etc/dataone/:./dataone-index-worker-${TAG}-shaded.jar \ + org.dataone.cn.indexer.IndexWorker +fi diff --git a/helm/.helmignore b/helm/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/helm/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/helm/Chart.lock b/helm/Chart.lock new file mode 100644 index 00000000..8b51d1f0 --- /dev/null +++ b/helm/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: rabbitmq + repository: https://charts.bitnami.com/bitnami + version: 10.1.14 +- name: solr + repository: https://charts.bitnami.com/bitnami + version: 6.2.3 +digest: sha256:8a0c7f616956207f7a5161ec1f5f3b58c432b8c8051ad4ef927dacee81c52be9 +generated: "2022-10-26T16:58:14.484158-08:00" diff --git a/helm/Chart.yaml b/helm/Chart.yaml new file mode 100644 index 00000000..32a9cde7 --- /dev/null +++ b/helm/Chart.yaml @@ -0,0 +1,41 @@ +apiVersion: v2 +name: dataone-indexer +description: | + Helm chart for Kubernetes Deployment of the dataone-indexer + (https://github.com/DataONEorg/dataone-indexer) + +# OCI Annotations - see https://github.com/helm/helm/pull/11204 +sources: + - https://github.com/dataoneorg/dataone-indexer + +# 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: 1.0.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: "3.0.0" + +# Chart dependencies +dependencies: + - name: rabbitmq # rabbitmq version 3.10.5 is deployed by chart version 10.1.14 + repository: https://charts.bitnami.com/bitnami + version: 10.1.14 + condition: rabbitmq.enabled, global.rabbitmq.enabled + - name: solr + repository: https://charts.bitnami.com/bitnami + version: 6.2.3 # solr version 9.0.0 is deployed by chart version 6.2.3 + condition: solr.enabled, global.solr.enabled diff --git a/helm/config/config-solr.sh b/helm/config/config-solr.sh new file mode 100755 index 00000000..72fa72b2 --- /dev/null +++ b/helm/config/config-solr.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Configure the SOLR server with helm-provided env variables to install +# the schema desired for this SOLR instance + +set -o errexit +set -o nounset +set -o pipefail + +export LOG='/tmp/poststart.log' +echo "** Starting postStart Hook... **" > ${LOG} + +# Load libraries +. /opt/bitnami/scripts/libbitnami.sh +. /opt/bitnami/scripts/liblog.sh +. /opt/bitnami/scripts/libsolr.sh + +# Load solr environment variables +. /opt/bitnami/scripts/solr-env.sh + +echo "** Sourced Bitnami scripts... **" >> ${LOG} + +export SOLR_AUTH_TYPE=basic +export SOLR_AUTHENTICATION_OPTS="-Dbasicauth=${SOLR_ADMIN_USERNAME}:${SOLR_ADMIN_PASSWORD}" +export CONFIG='/bitnami/solr/server/solr/configsets' +export SOLR_COLLECTION={{ .Values.solr.customCollection }} +export SOLR_CMD='/opt/bitnami/solr/bin/solr' +while [ ! -d "${CONFIG}"/sample_techproducts_configs ] ; +do + sleep 1 + echo "** Sleeping while sample config is created... **" >> ${LOG} +done + +echo "** Sample configs found. Copying files... **" >> ${LOG} +cp -R ${CONFIG}/sample_techproducts_configs ${CONFIG}/${SOLR_COLLECTION} +cp /solrconfig/schema.xml ${CONFIG}/${SOLR_COLLECTION}/conf/ +cp /solrconfig/solrconfig.xml ${CONFIG}/${SOLR_COLLECTION}/conf/ +rm -f ${CONFIG}/${SOLR_COLLECTION}/conf/managed-schema + +echo "** Waiting for Zookeeper **" >> ${LOG} +if ! solr_wait_for_zookeeper; then + echo "Zookeeper not detected" >> ${LOG} + exit 1 +fi +echo "** Zookeeper is up **" >> ${LOG} + +echo "** Creating configset in Zookeeper... **" >> ${LOG} +# Create a custom SOLR configset in Zookeeper +${SOLR_CMD} zk upconfig -n ${SOLR_COLLECTION} -d ${CONFIG}/${SOLR_COLLECTION} -z ${SOLR_ZK_HOSTS}/solr +${SOLR_CMD} zk ls /configs -z ${SOLR_ZK_HOSTS}/solr >> ${LOG} + +# Now create the collection if it doesn't exist +# http://localhost:8983/solr/admin/collections?action=list +echo "** Creating collection... **" >> ${LOG} +if ! solr_collection_exists "$SOLR_COLLECTION"; then + ${SOLR_CMD} create_collection -c ${SOLR_COLLECTION} -n ${SOLR_COLLECTION} -replicationFactor ${SOLR_NUMBER_OF_NODES} + echo "Collection created" >> ${LOG} +else + echo "Skipping. Collection already exists." >> ${LOG} +fi +echo "** Finished postStart. **" >> ${LOG} diff --git a/helm/config/dataone-indexer.properties b/helm/config/dataone-indexer.properties new file mode 100644 index 00000000..5d26400d --- /dev/null +++ b/helm/config/dataone-indexer.properties @@ -0,0 +1,42 @@ +dataone.mn.baseURL={{ include "idxworker.mn.url" . }} +index.data.root.directory={{ .Values.idxworker.data_directory }} +index.document.root.directory={{ .Values.idxworker.document_directory }} +index.tdb.directory={{ .Values.idxworker.tripleDbDirectory }} + +#The section for the rabbitMQ configuration +index.rabbitmq.hostname={{ include "idxworker.rabbitmq.hostname" . }} +index.rabbitmq.hostport={{- include "idxworker.rabbitmq.hostport" . }} +index.rabbitmq.username={{ .Values.rabbitmq.auth.username }} +## index.rabbitmq.password will be read from RABBITMQ_PASSWORD env var +index.rabbitmq.password=${env:RABBITMQ_PASSWORD} +#If changing max priority, existing queue must be deleted, and consumers must use the same number +index.rabbitmq.max.priority=10 + +solr.base.uri=http://{{ include "idxworker.solr.hostname" . }}: +{{- .Values.solr.service.ports.http }}/solr/{{ .Values.solr.customCollection }} +solr.query.uri=${solr.base.uri}/select/ +solr.index.uri=${solr.base.uri}/update/?commit=true +#solr.schema.path can be a url or a file path +solr.schema.path=${solr.base.uri}/admin/file?file=schema.xml&contentType=text/xml;charset=utf-8 +#solr.schema.path=./src/main/resources/index-solr-schema.xml + +## TODO: Add Indexer code to use these credentials. Currently no auth +index.solr.username={{ .Values.solr.auth.username }} +index.solr.password=${env:SOLR_ADMIN_PASSWORD} + +# The size of the thread pool which process the index task +index.thread.number={{ .Values.idxworker.pool_size }} + +dataone.indexing.performance.logging.enabled=false + +D1Client.CN_URL={{ .Values.idxworker.cn_url }} + +index.resourcemap.namespace=http://www.w3.org/TR/rdf-syntax-grammar; +{{- print "" }}http://www.openarchives.org/ore/terms + +dataone.mn.registration.serviceType.url={{ .Values.idxworker.d1_serviceType_url }} + +index.resourcemap.waitingComponent.time={{ default 800 .Values.idxworker.resourcemapWaitMs }} +index.resourcemap.waitingComponent.max.attempts={{ default 25 .Values.idxworker.resourcemapMaxTries }} +index.solr.versionConflict.waiting.time={{ default 1000 .Values.idxworker.solrVerConflictWaitMs }} +index.solr.versionConflict.max.attempts={{ default 50 .Values.idxworker.solrVerConflictMaxTries }} diff --git a/helm/config/entrypoint.sh b/helm/config/entrypoint.sh new file mode 100755 index 00000000..7237b915 --- /dev/null +++ b/helm/config/entrypoint.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# shellcheck disable=SC1091 + +set -o errexit +set -o nounset +set -o pipefail +#set -o xtrace # Uncomment this line for debugging purposes + +# Load libraries +. /opt/bitnami/scripts/libbitnami.sh +. /opt/bitnami/scripts/liblog.sh +. /opt/bitnami/scripts/libsolr.sh + +# Load solr environment variables +. /opt/bitnami/scripts/solr-env.sh + +print_welcome_page + +if [[ "$*" = *"/opt/bitnami/scripts/solr/run.sh"* ]]; then + + info "** Starting solr setup **" + /opt/bitnami/scripts/solr/setup.sh + info "** solr setup finished! **" + + info "** Start creating custom collection **" + if ! solr_wait_for_zookeeper; then + error "Zookeeper not detected" + exit 1 + fi + #/solrconfig/config-solr.sh + info "** Collection created **" +fi + +echo "" +exec "$@" diff --git a/helm/config/log4j2.properties b/helm/config/log4j2.properties new file mode 120000 index 00000000..d175a0c6 --- /dev/null +++ b/helm/config/log4j2.properties @@ -0,0 +1 @@ +../../src/main/resources/log4j2.properties \ No newline at end of file diff --git a/helm/config/schema.xml b/helm/config/schema.xml new file mode 120000 index 00000000..d8e8dd70 --- /dev/null +++ b/helm/config/schema.xml @@ -0,0 +1 @@ +../../src/main/resources/solr-conf/schema.xml \ No newline at end of file diff --git a/helm/config/solrconfig.xml b/helm/config/solrconfig.xml new file mode 120000 index 00000000..8eca858e --- /dev/null +++ b/helm/config/solrconfig.xml @@ -0,0 +1 @@ +../../src/main/resources/solr-conf/solrconfig.xml \ No newline at end of file diff --git a/helm/templates/NOTES.txt b/helm/templates/NOTES.txt new file mode 100644 index 00000000..8013f5a0 --- /dev/null +++ b/helm/templates/NOTES.txt @@ -0,0 +1,78 @@ +CHART NAME: {{ .Chart.Name }} +CHART VERSION: {{ .Chart.Version }} +APP VERSION: {{ .Chart.AppVersion }} + +** Please be patient while the chart is being deployed ** + + +RABBITMQ: +========= +Credentials: + Username: {{ .Values.rabbitmq.auth.username }} + To get password: + echo $(kubectl get secret --namespace {{ .Release.Namespace }} {{ .Values.rabbitmq.auth.existingPasswordSecret }} -o jsonpath="{.data.rabbitmq-password}" | base64 -d) + +IMPORTANT NOTE: the credentials are saved in persistent volume claims and will not be changed upon upgrade or re-installation unless the persistent volume claim has been deleted. If this is not the first installation of this chart, the credentials may not be valid. + +This is applicable when no passwords are set and therefore the random password is autogenerated. In case of using a fixed password, you should specify it when upgrading. + +More information about the credentials may be found at https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues/#credential-errors-while-upgrading-chart-releases. + +{{- $rmqMgrPort := .Values.rabbitmq.service.ports.manager }} + +The RabbitMQ Manager API or Web UI can be accessed within the cluster on port {{ $rmqMgrPort }} at +{{ include "idxworker.rabbitmq.hostname" . }} + +Access the web console or API by port-forwarding: + +kubectl -n {{ .Release.Namespace }} port-forward svc/{{ .Release.Name }}--rabbitmq-headless {{ $rmqMgrPort }}:{{ $rmqMgrPort }} & + +...then login to the Rabbitmq web console: http://localhost:{{ $rmqMgrPort }} using the credentials +above, and/or use the API - for example, to see the number of messages on the 'index' queue: + +$ curl -u username:password http://localhost:15672/api/queues/%2f/index | jq | grep "messages\":" + +API documentation is available at: +https://rawcdn.githack.com/rabbitmq/rabbitmq-server/v3.13.1/deps/rabbitmq_management/priv/www/api/index.html + +{{- if .Values.rabbitmq.metrics.enabled }} + +To access the RabbitMQ Prometheus metrics, get the RabbitMQ Prometheus URL by running: + + kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ include "common.names.fullname" . }} {{ .Values.service.ports.metrics }}:{{ .Values.service.ports.metrics }} & + echo "Prometheus Metrics URL: http://127.0.0.1:{{ .Values.service.ports.metrics }}/metrics" + +Then, open the obtained URL in a browser. + +{{- end }} + + +SOLR: +===== +Solr can be accessed via port {{ .Values.global.solrPort }} on the following DNS name from within +your cluster: + + {{ include "idxworker.solr.hostname" . }}:{{ .Values.global.solrPort }} + +{{- if .Values.solr.auth.enabled }} + +To get the Solr credentials execute the following commands: + + echo Username: {{ .Values.solr.auth.adminUsername }} + echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ .Values.solr.auth.existingSecret }} -o jsonpath="{.data.solr-password}" | base64 -d) + +{{- end }} + +Connect to the SOLR Dashboard by creating a kube proxy, and then browse to the local address: + +kubectl -n {{ .Release.Namespace }} port-forward service/{{ .Release.Name }}-solr {{ .Values.global.solrPort }}:{{ .Values.global.solrPort }} & + +Solr URL: http://127.0.0.1:{{ .Values.global.solrPort }}/solr/ + +{{- if .Values.solr.metrics.enabled }} + +Solr Prometheus metrics can be accessed via port {{ .Values.metrics.service.ports.http }} on the following DNS name from within your cluster: + + {{ printf "%s-exporter" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" }}.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.metrics.service.ports.http }}/metrics + +{{- end }} diff --git a/helm/templates/_helpers.tpl b/helm/templates/_helpers.tpl new file mode 100644 index 00000000..3465b7a5 --- /dev/null +++ b/helm/templates/_helpers.tpl @@ -0,0 +1,143 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "idxworker.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "idxworker.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "idxworker.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "idxworker.labels" -}} +helm.sh/chart: {{ include "idxworker.chart" . }} +{{ include "idxworker.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "idxworker.selectorLabels" -}} +app.kubernetes.io/name: {{ include "idxworker.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "idxworker.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "idxworker.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +set MN url +If we're running as a subchart, can use direct access without needing to go through ingress/https; + e.g. http://metacatbrooke-hl:8080/metacat/d1/mn +If connecting to an instance outside the cluster, should use https; + e.g. https://metacat-dev.test.dataone.org/metacat/d1/mn +*/}} +{{- define "idxworker.mn.url" -}} +{{- $mn_url := .Values.idxworker.mn_url }} +{{- if not $mn_url }} +{{- $mn_url = printf "http://%s-hl:8080/%s/d1/mn" .Release.Name .Values.global.metacatAppContext }} +{{- end }} +{{- $mn_url }} +{{- end }} + +{{/* +set Claim Name of existing PVC to use (typically the volume that is shared with metacat) +Either use the value set in .Values.persistence.claimName, or if blank, autopopulate with + {podname}-metacat-{releaseName}-0 (e.g. metacatbrooke-metacat-metacatbrooke-0) +*/}} +{{- define "idxworker.shared.claimName" -}} +{{- $claimName := .Values.persistence.claimName }} +{{- if not $claimName }} +{{- $claimName = printf "%s-metacat-%s-0" .Release.Name .Release.Name }} +{{- end }} +{{- $claimName }} +{{- end }} + +{{/* +Check if RabbitMQ SubChart is enabled +*/}} +{{- define "rmq.enabled" -}} +{{ $rmqEnabled := (or (((.Values.global).rabbitmq).enabled) ((.Values.rabbitmq).enabled)) }} +{{ end }} + +{{/* +set RabbitMQ HostName +*/}} +{{- define "idxworker.rabbitmq.hostname" -}} +{{- $rmqHost := .Values.idxworker.rabbitmqHostname }} +{{- if and (include "rmq.enabled" .) (not $rmqHost) -}} +{{- $rmqHost = printf "%s-rabbitmq-headless" .Release.Name -}} +{{- end }} +{{- $rmqHost }} +{{- end }} + +{{/* +set RabbitMQ HostPort +*/}} +{{- define "idxworker.rabbitmq.hostport" }} +{{- $rmqPort := .Values.idxworker.rabbitmqHostPort }} +{{- if and (include "rmq.enabled" .) (not $rmqPort) -}} +{{ $rmqPort = .Values.rabbitmq.service.ports.amqp }} +{{- end }} +{{- $rmqPort }} +{{- end }} + +{{/* +set Solr HostName +*/}} +{{- define "idxworker.solr.hostname" -}} +{{- $solrHost := .Values.idxworker.solrHostname }} +{{- if and (or (((.Values.global).solr).enabled) ((.Values.solr).enabled)) (not $solrHost) -}} + {{- $solrHost = printf "%s-solr-headless" .Release.Name -}} +{{- end }} +{{- $solrHost }} +{{- end }} + +{{/* +Renders a value that contains template. +Usage: +{{ include "idxhelpers.tplvalues.render" ( dict "value" .Values.path.to.the.Value "context" $) }} +*/}} +{{- define "idxhelpers.tplvalues.render" -}} + {{- if typeIs "string" .value }} + {{- tpl .value .context }} + {{- else }} + {{- tpl (.value | toYaml) .context }} + {{- end }} +{{- end -}} diff --git a/helm/templates/configmap.yaml b/helm/templates/configmap.yaml new file mode 100644 index 00000000..1975ddb6 --- /dev/null +++ b/helm/templates/configmap.yaml @@ -0,0 +1,9 @@ +# Load all files in the "config" directory into a ConfigMap +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-indexer-configfiles + labels: + {{- include "idxworker.labels" . | nindent 4 }} +data: +{{ (tpl (.Files.Glob "config/*").AsConfig . ) | indent 4 }} diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml new file mode 100644 index 00000000..7823dc71 --- /dev/null +++ b/helm/templates/deployment.yaml @@ -0,0 +1,164 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "idxworker.fullname" . }} + labels: + {{- include "idxworker.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "idxworker.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "idxworker.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if .Values.affinity }} + affinity: {{- include "idxhelpers.tplvalues.render" (dict "value" .Values.affinity "context" + $) | nindent 8 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{- include "idxhelpers.tplvalues.render" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{- include "idxhelpers.tplvalues.render" (dict "value" .Values.tolerations "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.topologySpreadConstraints }} + topologySpreadConstraints: {{- include "idxhelpers.tplvalues.render" (dict "value" .Values.topologySpreadConstraints "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName }} + {{- end }} + {{- if .Values.schedulerName }} + schedulerName: {{ .Values.schedulerName }} + {{- end }} + serviceAccountName: {{ include "idxworker.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + # livenessProbe: + # httpGet: + # path: / + # port: http + # readinessProbe: + # httpGet: + # path: / + # port: http + # initialDelaySeconds: + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumeMounts: + - mountPath: /etc/dataone/dataone-indexer.properties + subPath: dataone-indexer.properties + name: {{ .Release.Name }}-config-volume + - mountPath: /etc/dataone/log4j.properties + subPath: log4j2.properties + name: {{ .Release.Name }}-config-volume + - mountPath: {{ .Values.persistence.mountPath }} + name: indexer-metacat-pv + {{- if .Values.persistence.subPath }} + subPath: {{ .Values.persistence.subPath }} + {{- end }} + readOnly: true + - mountPath: /etc/dataone/tdb-cache + name: {{ .Release.Name }}-temp-tripledb-volume + env: + - name: DEBUG + value: "{{ .Values.idxworker.debug }}" + - name: DATAONE_AUTH_TOKEN + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-indexer-token + key: DataONEauthToken + # If 'false', the secret must exist before the pod can start + # App versions before v2.3.4 will read this value from a config file, not the env var. + optional: true + - name: RABBITMQ_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.rabbitmq.auth.existingPasswordSecret }} + key: rabbitmq-password + optional: false + {{- if .Values.solr.auth.enabled }} + - name: SOLR_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.solr.auth.existingSecret }} + key: SOLR_ADMIN_PASSWORD + optional: true + {{ end }} + initContainers: + - name: init-rabbitmq + image: busybox:latest + command: + - sh + - -c + - > + HOST="{{ include "idxworker.rabbitmq.hostname" . }}"; + PORT={{ include "idxworker.rabbitmq.hostport" . }}; + until nc -z $HOST $PORT > /dev/null; do + echo waiting for RabbitMQ at $HOST - port $PORT; sleep 1; done; + - name: init-solr + image: busybox:latest + command: + - sh + - -c + - > + URI="/solr/ + {{- required "solr.customCollection IS REQUIRED" .Values.solr.customCollection -}} + /admin/file?file=schema.xml&contentType=text/xml"; + {{- $solrHost := (include "idxworker.solr.hostname" .) }} + {{- $solrPort := (required "solr.service.ports.http REQUIRED" .Values.solr.service.ports.http) }} + until [[ $(echo -e "GET $URI HTTP/1.1\r\nHost: {{ $solrHost -}} + \r\n\r\n" | nc {{ $solrHost }} {{ $solrPort -}} + | grep -c "4.0.0 org.dataone dataone-index-worker - 2.4.0 + 3.0.0 jar dataone-index-worker http://maven.apache.org + 17 + 17 UTF-8 - 1.7 - 3.1.4.RELEASE - 2.4.1 - 5.2.1 - 2.3.0 + 5.3.33 2.3.1 - 2.3.2 - 2.3.3 + 8.11.2 + solr8home + + + solr9 + + 9.0.0 + solr8home + + + + java8 + + 1.8 + 1.8 + + + + sonatype.org @@ -41,40 +56,18 @@ true - - - maven-restlet - https://maven.restlet.org - - true - - - true - - xerces xercesImpl - 2.9.1 - - - org.apache.httpcomponents - httpclient - 4.3.3 + 2.12.2 junit junit - 4.10 + 4.12 test @@ -112,27 +105,6 @@ 1.3.163 test - - commons-codec - commons-codec - 1.10 - - - org.dataone - d1_cn_common - ${d1_cn_common.version} - jar - - - org.slf4j - slf4j-log4j12 - - - log4j - log4j - - - org.dataone d1_libclient_java @@ -143,48 +115,16 @@ com.hp.hpl.jena jena - - - - org.dataone - d1_cn_index_common - ${d1_cn_index_common.version} - jar - - org.slf4j - slf4j-log4j12 + org.apache.jena + jena-core - - - - org.dataone - d1_cn_index_generator - ${d1_cn_index_generator.version} - - org.slf4j - slf4j-log4j12 + log4j + log4j - - com.hazelcast - hazelcast - ${hazelcast.version} - compile - - - com.hazelcast - hazelcast-spring - ${hazelcast.version} - compile - - - org.quartz-scheduler - quartz - 2.1.1 - org.springframework.data spring-data-jpa @@ -195,32 +135,6 @@ spring-data-commons 1.6.5.RELEASE - - org.hibernate - hibernate-entitymanager - 3.6.10.Final - - - javassist - javassist - - - - - cglib - cglib - 3.1 - - - commons-dbcp - commons-dbcp - 1.2.2 - - - postgresql - postgresql - 8.4-702.jdbc4 - org.springframework spring-core @@ -271,21 +185,11 @@ spring-test ${spring.version} - - commons-daemon - commons-daemon - 1.0.1 - org.apache.commons commons-lang3 3.4 - - commons-cli - commons-cli - 1.2 - org.slf4j slf4j-api @@ -295,6 +199,12 @@ org.slf4j slf4j-log4j12 1.7.36 + + + log4j + log4j + + net.minidev @@ -331,43 +241,89 @@ Saxon-HE 9.9.1-3 - - org.javassist - javassist - 3.18.2-GA - com.github.jsonld-java jsonld-java 0.13.2 - commons-io - commons-io - 2.8.0 + com.rabbitmq + amqp-client + 5.14.2 + + + org.apache.logging.log4j + log4j-1.2-api + 2.17.1 + + + org.apache.logging.log4j + log4j-core + 2.17.1 + + + org.apache.logging.log4j + log4j-jcl + 2.17.1 + + + org.apache.solr + solr-solrj + ${solr.version} + + + com.fasterxml.jackson.core + jackson-annotations + 2.13.3 + + + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.2 + + + + org.glassfish.jaxb + jaxb-runtime + 2.3.2 + + maven-clean-plugin + 3.2.0 + + + + src/test/resources/org/dataone/cn/index/resources/${solr.test.home}/collection1/data/ + false + + + + org.apache.maven.plugins maven-surefire-plugin - 2.16 + 2.22.0 true + -Dtest.solr.allowed.securerandom=NativePRNG + + ${solr.test.home} + org.apache.maven.plugins maven-compiler-plugin - - 1.7 - ${compiler.target.version} - + 2.0.1 com.mycila.maven-license-plugin maven-license-plugin + 1.10.b1
src/license-header.txt
@@ -375,6 +331,7 @@ org.codehaus.mojo buildnumber-maven-plugin + 1.2 validate @@ -399,8 +356,13 @@ shade - ${basedir}/target/d1_index_task_processor_daemon.jar + ${basedir}/target/${project.name}-${project.version}-shaded.jar ${basedir} + + + *:reload4j:* + + *:* @@ -411,12 +373,13 @@ META-INF/*.INF META-INF/eclipse.inf module-info.class + **/Log4j2Plugins.dat - org.dataone.cn.index.processor.IndexTaskProcessorDaemon + org.dataone.cn.indexer.IndexWorker META-INF/spring.handlers @@ -432,6 +395,24 @@ + + com.coderplus.maven.plugins + copy-rename-maven-plugin + 1.0 + + + copy-file + generate-sources + + copy + + + src/main/resources/solr-conf/schema.xml + src/test/resources/org/dataone/cn/index/resources/${solr.test.home}/collection1/conf/schema.xml + + + +
diff --git a/src/main/java/org/dataone/cn/index/App.java b/src/main/java/org/dataone/cn/index/App.java deleted file mode 100644 index 03ee9378..00000000 --- a/src/main/java/org/dataone/cn/index/App.java +++ /dev/null @@ -1,267 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.List; -import java.util.Properties; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.OptionBuilder; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.apache.commons.cli.PosixParser; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.dataone.cn.indexer.SolrIndexService; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; - -public class App { - public static String DOCUMENT_PARSERS = "documentParsers"; - public static String LOCKFILE = "/tmp/indexing/indexlock.lck"; - public static String TSTAMPFILE = "/tmp/indexing/indextstamp.txt"; - private static ApplicationContext context = null; - private String springConfigFile = "/etc/dataone/indexing/application-context.xml"; - private String processingProperties = "/etc/dataone/indexing/index_processor.properties"; - private String taskListPath = "/tmp/indexing/index_tasks.txt"; - private String objectBasePath = ""; - public List parserList = null; - Log log = LogFactory.getLog(App.class); - - /** - * - * @param args - */ - public static void main(String[] args) { - - File alock = new File(LOCKFILE); - if (alock.exists()) { - System.err.println("ERROR: Lock file " + LOCKFILE + " exists."); - System.exit(1); - } - - App app = new App(); - Options opps = app.getOptions(); - CommandLineParser parser = new PosixParser(); - CommandLine line = null; - try { - line = parser.parse(opps, args); - - } catch (ParseException exp) { - System.out.println(exp.getMessage()); - printHelp(opps); - System.exit(-1); - } - - try { - FileWriter flock = new FileWriter(LOCKFILE); - flock.write("locked at: " + new Date().toString()); - flock.close(); - alock.deleteOnExit(); - } catch (IOException e) { - System.err.println("ERROR: Could not create lock file " + LOCKFILE); - System.exit(2); - } - - String configFile = line.getOptionValue("config", - "/etc/dataone/indexing/application-context.xml"); - String taskFile = line.getOptionValue("tasks", "/tmp/indexing/index_tasks.txt"); - String base = line.getOptionValue("base", ""); - // Load spring configuration - app.setSpringConfigFile(configFile); - // Load properties from the configuration file - app.loadConfig(); - // Command line options override the properties file values - app.setTaskListPath(taskFile); - app.setObjectBasePath(base); - long youngestSysMeta = app.run(); - if (youngestSysMeta >= 0) { - try { - FileWriter fts = new FileWriter(TSTAMPFILE); - fts.write(youngestSysMeta + "\n"); - fts.close(); - } catch (IOException e) { - System.err.println("ERROR: Could not create timestamp file " + TSTAMPFILE); - } - } - } - - /** - * Load options from properties file - */ - public void loadConfig() { - Properties props = new Properties(); - try { - props.load(new FileInputStream(processingProperties)); - taskListPath = props.getProperty("taskListPath", taskListPath); - objectBasePath = props.getProperty("objectBasePath", objectBasePath); - } catch (IOException e) { - log.info(e.getMessage()); - } - } - - /** - * Load a list of tasks from the task file. TODO: only add tasks that were - * modified after the last run - * - * @param sourcePath - * @return - */ - public IndexingTaskList loadTasks(String sourcePath) { - IndexingTaskList tasks = new IndexingTaskList(sourcePath, objectBasePath); - return tasks; - } - - // public void populateNodeMap() { - // - // NodeList nodes = null; - // CNode cnode = new CNode("https://cn-dev.dataone.org/cn"); - // try{ - // nodes = cnode.listNodes(); - // } catch (Exception e) { - // log.error(e.getMessage()); - // } - // for (int i=0; i < nodes.sizeNodeList(); i++) { - // Node node = nodes.getNode(i); - // String nodeid = node.getIdentifier().getValue(); - // log.info("Node id = " + nodeid + " Name = " + node.getName()); - // nodeMap.put(nodeid, node); - // } - // } - - /** - * Here the indexing tasks are run sequentially, which is not really - * necessary for indexing data and science metadata entries. Resource Maps - * however, do need to be processed one at a time, since such processing - * will require updates to the entries referenced by the resource map. - * - * @param metadir - */ - public long run() { - context = getContext(); - parserList = (List) context.getBean(DOCUMENT_PARSERS); - SolrIndexService parser = parserList.get(0); - - IndexingTaskList tasks = loadTasks(taskListPath); - - // -1 indicates nothing changed so don't update the timestamp. - long youngestTask = -1; - - for (int i = 0; i < tasks.size(); i++) { - IndexingTask task = tasks.get(i); - if (task.dateSysmModified > youngestTask) { - youngestTask = task.dateSysmModified; - } - log.info("Processing PID, sys, object = " + task.pid + ", " + task.sysMetaPath + ", " - + task.objectPath); - try { - // if - // (task.pid.equals("__test_object_valid_eml__sciMD-eml-201-NoLastLForCR__")) - // { - InputStream smdStream = new FileInputStream(task.sysMetaPath); - parser.insertIntoIndex(task.pid, smdStream, task.objectPath); - log.info("Processing complete for PID = " + task.pid); - // } - } catch (Exception e) { - // log.error(e.getMessage()); - log.info("Processing failed for PID = " + task.pid); - log.error(e.getMessage()); - } - } - return youngestTask; - } - - /** - * - * @param options - */ - private static void printHelp(Options options) { - HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("indexer", options); - } - - /** - * - * @return - */ - public Options getOptions() { - Options options = new Options(); - Option spring = OptionBuilder.hasArg().withDescription("spring configuration file") - .create("config"); - Option files = OptionBuilder - .hasArg() - .withDescription("Full path to the tasks list file (/tmp/indexing/index_tasks.txt)") - .create("tasks"); - Option base = OptionBuilder.hasArg() - .withDescription("Filesystem root that config and tasks are relative to (null)") - .create("base"); - spring.setRequired(false); - files.setRequired(false); - options = options.addOption(spring).addOption(files).addOption(base); - return options; - } - - /** - * - * @return - */ - public ApplicationContext getContext() { - if (context == null) { - try { - context = new FileSystemXmlApplicationContext(springConfigFile); - } catch (Exception e) { - log.info(e.getMessage()); - log.info("Falling back to configuration included in jar file."); - context = new ClassPathXmlApplicationContext("application-context.xml"); - } - } - return context; - } - - /** - * - * @param springConfigFile - */ - public void setSpringConfigFile(String springConfigFile) { - this.springConfigFile = springConfigFile; - } - - public void setTaskListPath(String taskListPath) { - this.taskListPath = taskListPath; - } - - public void setObjectBasePath(String objectBasePath) { - this.objectBasePath = objectBasePath; - } - -} diff --git a/src/main/java/org/dataone/cn/index/IndexWorker.java b/src/main/java/org/dataone/cn/index/IndexWorker.java deleted file mode 100644 index a0e1d718..00000000 --- a/src/main/java/org/dataone/cn/index/IndexWorker.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright 2022 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT 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.dataone.cn.index; - -/** - * Worker class to process index tasks and submit results to store. - */ -public class IndexWorker { - - /** - * Commandline main for the IndexWorker to be started. - * @param args - */ - public static void main(String[] args) { - - System.out.println("Starting index worker..."); - IndexWorker worker = new IndexWorker(); - - // TODO: read RabbitMQ and SOLR config info from environment - - // TODO: register this worker with RabbitMQ - - worker.handleIndexTask("123"); - System.out.println("Done."); - } - - /** - * Callback for processing a specific indexing task - * @param message the message describing the task to be processed - */ - public void handleIndexTask(String message) { - System.out.println("Handling task: " + message); - // TODO: Handle the index task - } -} diff --git a/src/main/java/org/dataone/cn/index/IndexingTask.java b/src/main/java/org/dataone/cn/index/IndexingTask.java deleted file mode 100644 index 5d37da3d..00000000 --- a/src/main/java/org/dataone/cn/index/IndexingTask.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index; - -import java.util.Date; - -/** - * Candidate for removal - unused - replaced by IndexTask. - * Simple class that contains the information necessary for a single indexing task. - * - */ -public class IndexingTask { - - public String pid = null; - public String fmtid = null; - public String sysMetaPath = null; - public String objectPath = null; - public long dateSysmModified = 0; - public Date tstamp = null; - - public void IndexingTask() { - tstamp = new Date(); - } - - public void IndexingTask(String id, String fmtid, String sysMeta, String object, long tmod) { - this.pid = id; - this.fmtid = fmtid; - this.sysMetaPath = sysMeta; - this.objectPath = object; - this.dateSysmModified = tmod; - this.tstamp = new Date(); - } - - public void setPid(String pid) { - this.pid = pid; - } - - public void setFmtid(String fmtid) { - this.fmtid = fmtid; - } - - public void setSysMetaPath(String sysMetaPath) { - this.sysMetaPath = sysMetaPath; - } - - public void setObjectPath(String objectPath) { - this.objectPath = objectPath; - } - - public void setDateSysmModified(String tstamp) { - dateSysmModified = Long.parseLong(tstamp); - //dateSysmModified = new Date(t); - } - -} diff --git a/src/main/java/org/dataone/cn/index/IndexingTaskList.java b/src/main/java/org/dataone/cn/index/IndexingTaskList.java deleted file mode 100644 index b3f0b691..00000000 --- a/src/main/java/org/dataone/cn/index/IndexingTaskList.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Candidate for removal - unused. - * - * Abstraction of an IndexingTask collection/list. - * - */ -public class IndexingTaskList extends ArrayList { - - // Path offset to files listed in the task list. Normally blank, this - // is used for testing when mounting the remote file system at another root. - private static String basePath = ""; - Log log = LogFactory.getLog(App.class); - - /** - * Load indexing tasks from the temporary hack textfile - * - * @param sourcePath - * File system path to the taks list. - */ - public IndexingTaskList(String sourcePath) { - loadTasks(sourcePath); - } - - public IndexingTaskList(String sourcePath, String basePath) { - if (basePath != null) { - log.info("Initializing with basePath = " + basePath); - this.basePath = basePath; - } - loadTasks(sourcePath); - } - - public void loadTasks(String sourcePath) { - File sourceFile = new File(sourcePath); - try { - List lines = org.apache.commons.io.FileUtils.readLines(sourceFile); - - int lineCount = 0; - IndexingTask task = null; - for (String line : lines) { - if (line.startsWith("TIMESTAMP")) { - continue; - } - if (task == null || line.trim().equals("::")) { - if (task != null) { - this.add(task); - } - task = new IndexingTask(); - lineCount = 0; - continue; - } - - lineCount++; - switch (lineCount) { - case 0: - break; - case 1: - task.setPid(line); - //log.debug("TASK pid=" + line); - break; - case 2: - task.setFmtid(line); - break; - case 3: - task.setDateSysmModified(line); - break; - case 4: - task.setSysMetaPath(basePath + line); - break; - case 5: - if (!line.equals("null") & line != null) { - task.setObjectPath(basePath + line); - } - break; - } - } - } catch (IOException e) { - log.error(e.getMessage()); - } - } - -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskDeleteProcessor.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskDeleteProcessor.java deleted file mode 100644 index 0bf4a69a..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskDeleteProcessor.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import java.util.List; - -import org.apache.log4j.Logger; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.indexer.SolrIndexService; -import org.springframework.beans.factory.annotation.Autowired; - -public class IndexTaskDeleteProcessor implements IndexTaskProcessingStrategy { - - private static Logger logger = Logger.getLogger(IndexTaskDeleteProcessor.class.getName()); - - @Autowired - private SolrIndexService solrIndexService; - - public void process(IndexTask task) throws Exception { - solrIndexService.removeFromIndex(task.getPid()); - } - - @Override - public void process(List tasks) throws Exception { - solrIndexService.removeFromIndex(tasks); - } - -} \ No newline at end of file diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessingStrategy.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessingStrategy.java deleted file mode 100644 index 0443a013..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessingStrategy.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import java.util.List; - -import org.dataone.cn.index.task.IndexTask; - -/** - * Interface for defining IndexTask processing strategies. Allows implementation - * of processing strategy to be configurable and external to processing - * controller logic. - * - * @author sroseboo - * - */ -public interface IndexTaskProcessingStrategy { - - public void process(IndexTask task) throws Exception; - - public void process(List tasks) throws Exception; -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessor.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessor.java deleted file mode 100644 index 3913eae1..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessor.java +++ /dev/null @@ -1,1071 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentSkipListSet; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.commons.collections4.queue.CircularFifoQueue; -import org.apache.jena.atlas.logging.Log; -import org.apache.log4j.Logger; -import org.dataone.client.v2.formats.ObjectFormatCache; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.index.task.IndexTaskRepository; -import org.dataone.cn.index.task.ResourceMapIndexTask; -import org.dataone.cn.index.util.PerformanceLogger; -import org.dataone.cn.indexer.XmlDocumentUtility; -import org.dataone.cn.indexer.parser.utility.SeriesIdResolver; -import org.dataone.cn.indexer.resourcemap.ForesiteResourceMap; -import org.dataone.cn.indexer.resourcemap.ResourceMap; -import org.dataone.cn.indexer.resourcemap.ResourceMapFactory; -import org.dataone.cn.indexer.solrhttp.HTTPService; -import org.dataone.cn.indexer.solrhttp.SolrDoc; -import org.dataone.configuration.Settings; -import org.dataone.service.exceptions.BaseException; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v1.ObjectFormatIdentifier; -import org.dataone.service.types.v1.TypeFactory; -import org.dataone.service.types.v2.ObjectFormat; -import org.dataone.service.types.v2.SystemMetadata; -import org.dspace.foresite.OREParserException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException; -import org.w3c.dom.Document; - -/** - * IndexTaskProcessor is the controller class for processing IndexTasks. These - * tasks are generated by the IndexTaskGenerator class and associated - * collaborators. IndexTaskProcessor uses the IndexTaskRepository to locate - * IndexTasks for processing and delegates to IndexTaskProcessingStrategy - * implementations for actual processing behavior. - * - * @author sroseboo - * - */ -public class IndexTaskProcessor { - - private static Logger logger = Logger.getLogger(IndexTaskProcessor.class.getName()); - private static final String FORMAT_TYPE_DATA = "DATA"; - private static final String LOAD_LOGGER_NAME = "indexProcessorLoad"; -// private static int BATCH_UPDATE_SIZE = Settings.getConfiguration().getInt("dataone.indexing.batchUpdateSize", 1000); - private static int NUMOFPROCESSOR = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.processThreadPoolSize", 10); - private static int MAXATTEMPTS = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.resourceMapWait.maxAttempt", 10); -// private static int FUTUREQUEUESIZE = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.futureQueueSize", 100); - private static ExecutorService executor = Executors.newFixedThreadPool(NUMOFPROCESSOR); - private static final Lock lock = new ReentrantLock(); - - /* a map used to aid in quick executor shutdown */ - private static Map, IndexTask> futureMap = new HashMap<>(); - /* a queue used to aid in quick executor shutdown */ - private static List> futureQueue = new LinkedList<>(); - /* a queue used to aid in quick executor shutdown, specifically to track tasks - * that are marked as in process, but not handed to the executor yet */ - private static Set preSubmittedTasks = new HashSet<>(); - private static boolean inShutdownMode = false; - - //a concurrent map to main the information about current processing resource map objects and their referenced ids - //the key is a referenced id and value is the id of resource map. - private static ConcurrentHashMap referencedIdsMap = new ConcurrentHashMap(); - private static ConcurrentSkipListSet seriesIdsSet = new ConcurrentSkipListSet(); - - @Autowired - private IndexTaskRepository repo; - - @Autowired - private IndexTaskProcessingStrategy deleteProcessor; - - @Autowired - private IndexTaskProcessingStrategy updateProcessor; - - @Autowired - private HTTPService httpService; - - @Autowired - private String solrQueryUri; - - private PerformanceLogger perfLog = PerformanceLogger.getInstance(); - - private static int maxTryCount = 8; - - public IndexTaskProcessor() { - } - - /** - * Processes the index task queue written by the IndexTaskGenerator, - * but unlike {@link #processIndexTaskQueue()}, all IndexTasks that - * add solr documents will be grouped into batches and done in one - * command to solr. - */ - /*public void batchProcessIndexTaskQueue() { - logProcessorLoad(); - - List queue = getIndexTaskQueue(); - List batchProcessList = new ArrayList(BATCH_UPDATE_SIZE); - - logger.info("batchProcessIndexTaskQueue, queue size: " + queue.size() + " tasks"); - - IndexTask nextTask = getNextIndexTask(queue); - while (nextTask != null) { - batchProcessList.add(nextTask); - logger.info("added task: " + nextTask.getPid()); - nextTask = getNextIndexTask(queue); - if (nextTask != null) - logger.info("next task: " + nextTask.getPid()); - logger.info("queue size: " + queue.size()); - - if (batchProcessList.size() >= BATCH_UPDATE_SIZE) { - batchProcessTasksOnThread(batchProcessList); - batchProcessList = new ArrayList(BATCH_UPDATE_SIZE); - } - } - batchProcessTasksOnThread(batchProcessList); - - List retryQueue = getIndexTaskRetryQueue(); - List batchProcessRetryList = new ArrayList(BATCH_UPDATE_SIZE); - - logger.info("batchProcessIndexTaskQueue, retry queue size: " + queue.size() + " tasks"); - - nextTask = getNextIndexTask(retryQueue); - while (nextTask != null) { - batchProcessRetryList.add(nextTask); - nextTask = getNextIndexTask(retryQueue); - - if (batchProcessRetryList.size() >= BATCH_UPDATE_SIZE) { - batchProcessTasksOnThread(batchProcessRetryList); - batchProcessRetryList = new ArrayList(BATCH_UPDATE_SIZE); - } - } - batchProcessTasksOnThread(batchProcessRetryList); - }*/ - - /** - * Start a round of IndexTask processing. The IndexTask data store is - * abstracted as a queue of tasks to process ordered by priority and - * modification date. Typically invoked periodically by a quartz scheduled - * job. - */ - public void processIndexTaskQueue() { - logProcessorLoad(); - maxTryCount = Settings.getConfiguration().getInt("dataone.indexing.processing.max.tryCount", 8); - List queue = getIndexTaskQueue(); - IndexTask task = getNextIndexTask(queue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(queue); - } - - // effectively process failed tasks from previous run - processFailedIndexTaskQueue(); - /*List retryQueue = getIndexTaskRetryQueue(); - task = getNextIndexTask(retryQueue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(retryQueue); - }*/ - - } - - /** - * Index the given index queue - * @param queue - */ - public void processIndexTaskQueue(List queue) { - IndexTask task = null; - if(queue != null) { - int size = queue.size(); - task = getNextIndexTask(queue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(queue); - } - logger.info("IndexTaskProcessor.processIndexTaskQueue - finish submitting the index task queue with the size "+size+ " and current queue size is down to "+queue.size()); - } - - } - - /** - * Index the index task which currently has the failed status on the index task repository - */ - public void processFailedIndexTaskQueue() { - List retryQueue = getIndexTaskRetryQueue(); - if(retryQueue != null) { - IndexTask task = getNextIndexTask(retryQueue); - logger.info("IndexTaskProcessor.processFailedIndexTaskQueue with size "+retryQueue.size()); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(retryQueue); - } - } - } - - /** - * Logs the number of {@link IndexTask}s that need to be processed - * and the number of tasks that have failed. - */ - private void logProcessorLoad() { - - Logger loadLogger = Logger.getLogger(LOAD_LOGGER_NAME); - - try { - Long newTasks = repo.countByStatus(IndexTask.STATUS_NEW); - Long failedTasks = repo.countByStatus(IndexTask.STATUS_FAILED); - loadLogger.info("new tasks:" + newTasks + ", tasks previously failed: " + failedTasks ); - - } catch (Exception e) { - logger.error("Unable to count NEW or FAILED tasks in task index repository.", e); - } - - - } - - - - /* - * Use multiple threads to process the index task - */ - private void processTaskOnThread(final IndexTask task) { - logger.info("using multiple threads to process index and the size of the thread pool is "+NUMOFPROCESSOR); - Runnable newThreadTask = new Runnable() { - public void run() { - processTask(task); - } - }; - @SuppressWarnings("unchecked") - Future future = (Future) executor.submit(newThreadTask); - preSubmittedTasks.remove(task); - futureQueue.add(future); - futureMap.put(future, task); - } - - private void processTask(IndexTask task) { - long start = System.currentTimeMillis(); - try { - checkReadinessProcessResourceMap(task); - if (task.isDeleteTask()) { - logger.info("+++++++++++++start to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - //System.out.println("+++++++++++++start to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - deleteProcessor.process(task); - //System.out.println("+++++++++++++end to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - logger.info("+++++++++++++end to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - } else { - logger.info("*********************start to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - //System.out.println("*********************start to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - updateProcessor.process(task); - //System.out.println("*********************end to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - logger.info("*********************end to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - } - } catch (InterruptedException interruptedE) { - logger.warn("Task Interrupted before processing started. Resetting to NEW, for pid: " + task.getPid()); - if (task != null) { - task.markNew(); - repo.save(task); - } - } catch (Exception e) { - logger.error("Unable to process task for pid: " + task.getPid(), e); - if(task != null) { - repo.delete(task.getId()); - } - handleFailedTask(task); - return; - } finally { - removeIdsFromResourceMapReferencedSetAndSeriesIdsSet(task); - } - if(task != null) { - repo.delete(task.getId()); - } - /*if(task != null && task instanceof ResourceMapIndexTask) { - repo.delete(task.getId());//the ReousrceMapIndexTask is not the original object. repo.delete(IndexTask) wouldn't work. - } else { - repo.delete(task); - }*/ - - logger.info("Indexing complete for pid: " + task.getPid()); - if (perfLog.isLogEnabled()) - perfLog.log("IndexTaskProcessor.processTasks process pid "+task.getPid(), System.currentTimeMillis()-start); - } - - /* - * When a resource map object is indexed, it will change the solr index of its referenced ids. - * It can be a race condition. https://redmine.dataone.org/issues/7771 - * So we maintain a set containing the referenced ids which the resource map objects are currently being processed. - * Before we start to process a new resource map object on a thread, we need to check the set. - */ - private void checkReadinessProcessResourceMap(IndexTask task) throws InterruptedException, Exception{ - //only handle resourceMap index task - long startTiming = System.currentTimeMillis(); - if(task != null && task instanceof ResourceMapIndexTask ) { - logger.debug("$$$$$$$$$$$$$$$$$ the index task "+task.getPid()+" is a resource map task in the the thread "+ Thread.currentThread().getId()); - lock.lock(); - try { - if (perfLog.isLogEnabled()) - perfLog.log("IndexTaskProcessor.checkReadiness/resMap/lock "+task.getPid(), System.currentTimeMillis()-startTiming); - - ResourceMapIndexTask resourceMapTask = (ResourceMapIndexTask) task; - List referencedIds = resourceMapTask.getReferencedIds(); - if(referencedIds != null) { - for (String id : referencedIds) { - if(SeriesIdResolver.isSeriesId(TypeFactory.buildIdentifier(id))) { - boolean isClear = false; - for(int i=0; i referencedIds = resourceMapTask.getReferencedIds(); - if(referencedIds != null) { - for (String id : referencedIds) { - if(id != null) { - referencedIdsMap.remove(id); - seriesIdsSet.remove(id); - } - } - } - } else { - Identifier id = new Identifier(); - id.setValue(task.getPid()); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(id); - logger.debug("remove the series id (if it has) for +++++ "+task.getPid()); - if(smd != null && smd.getSeriesId()!= null && smd.getSeriesId().getValue()!= null) { - logger.debug("remove the series id "+smd.getSeriesId().getValue()+" for +++++ "+task.getPid()); - seriesIdsSet.remove(smd.getSeriesId().getValue()); - } - } - } - - /* - * Use multiple threads to process the index task - */ - /*private void batchProcessTasksOnThread(final List taskList) { - logger.info("using multiple threads to process BATCHED index tasks and the size of the pool is "+NUMOFPROCESSOR); - Runnable newThreadTask = new Runnable() { - public void run() { - batchProcessTasks(taskList); - } - }; - Future future = executor.submit(newThreadTask); - futureQueue.add(future); - }*/ - - /*private void batchProcessTasks(List taskList) { - if(taskList == null) { - return; - } - long startBatch = System.currentTimeMillis(); - int size = taskList.size(); - logger.info("batch processing: " + size + " tasks"); - - List updateTasks = new ArrayList<>(); - List deleteTasks = new ArrayList<>(); - - for (IndexTask task : taskList) { - if (task.isDeleteTask()) { - logger.info("Adding delete task to be processed for pid: " + task.getPid()); - deleteTasks.add(task); - } else { - logger.info("Adding update task to be processed for pid: " + task.getPid()); - updateTasks.add(task); - } - } - - logger.info("update tasks: " + updateTasks.size()); - logger.info("delete tasks: " + deleteTasks.size()); - try { - batchCheckReadinessProcessResourceMap(taskList); - try { - deleteProcessor.process(deleteTasks); - - for (IndexTask task : deleteTasks) { - repo.delete(task); - logger.info("Indexing complete for pid: " + task.getPid()); - } - - } catch (Exception e) { - StringBuilder failedPids = new StringBuilder(); - for (IndexTask task : deleteTasks) - failedPids.append(task.getPid()).append(", "); - logger.error("Unable to process tasks for pids: " + failedPids.toString(), e); - handleFailedTasks(deleteTasks); - } - - try { - updateProcessor.process(updateTasks); - - for (IndexTask task : updateTasks) { - repo.delete(task); - logger.info("Indexing complete for pid: " + task.getPid()); - } - - } catch (Exception e) { - StringBuilder failedPids = new StringBuilder(); - for (IndexTask task : updateTasks) - failedPids.append(task.getPid()).append(", "); - logger.error("Unable to process tasks for pids: " + failedPids.toString(), e); - handleFailedTasks(deleteTasks); - } - } catch(Exception e) { - logger.error("Couldn't batch indexing the tasks since "+e.getMessage()); - } finally { - batchRemoveIdsFromResourceMapReferencedSet(taskList); - } - - perfLog.log("IndexTaskProcessor.batchProcessTasks process "+size+" objects in ", System.currentTimeMillis()-startBatch); - }*/ - - private void batchCheckReadinessProcessResourceMap(List tasks) throws Exception{ - lock.lock(); - try { - if(tasks != null) { - for (IndexTask task : tasks) { - checkReadinessProcessResourceMap(task); - } - } - - } finally { - lock.unlock(); - } - } - - private void batchRemoveIdsFromResourceMapReferencedSet(List tasks) { - if(tasks != null) { - for (IndexTask task : tasks) { - removeIdsFromResourceMapReferencedSetAndSeriesIdsSet(task); - } - } - } - - private void handleFailedTasks(List tasks) { - for (IndexTask task : tasks) { - task.markFailed(); - saveTaskWithoutDuplication(task); - } - } - - private void handleFailedTask(IndexTask task) { - if(task != null) { - task.markFailed(); - saveTaskWithoutDuplication(task); - } - - } - - /** - * returns the next ready task from the given queue. Readiness is determined - * by availability of the object (unless it's a data object), and the prior - * indexing of all Dataone objects referenced by resource maps. - * - * @param queue - * @return the next ready task - */ - private IndexTask getNextIndexTask(List queue) { - IndexTask task = null; - while (task == null && queue.isEmpty() == false && !inShutdownMode) { - task = queue.remove(0); - - if (task == null) continue; - - task.markInProgress(); - task = saveTask(task); - preSubmittedTasks.add(task); - - if (task == null) continue; // saveTask can return null - - logger.info("Start of indexing pid: " + task.getPid()); - - if (task.isDeleteTask()) { - return task; - } - - if (!isObjectPathReady(task)) { - task.markNew(); - saveTaskWithoutDuplication(task); - logger.info("Task for pid: " + task.getPid() + " not processed since the object path is not ready."); - task = null; - continue; - } - - if (representsResourceMap(task)) { - boolean ready = true; - ResourceMap rm = null; - List referencedIds = null; - try { - rm = ResourceMapFactory.buildResourceMap(task.getObjectPath()); - referencedIds = rm.getAllDocumentIDs(); - - boolean found = referencedIds.remove(task.getPid()); - // list.remove removes only the first occurrence found, so keep going until none left. - while(found) { - found = referencedIds.remove(task.getPid()); - } - - // if the resourceMap uses its SeriesId for the references, we need to remove it as well for this check. - // otherwise, it will never index. - SystemMetadata resMapSMD = HazelcastClientFactory.getSystemMetadataMap().get(TypeFactory.buildIdentifier(task.getPid())); - if (resMapSMD.getSeriesId() != null) { - found = referencedIds.remove(resMapSMD.getSeriesId().getValue()); - while(found) { - found = referencedIds.remove(resMapSMD.getSeriesId().getValue()); - } - } - - - if (areAllReferencedDocsIndexed(referencedIds) == false) { - logger.info("****************Not all map resource references indexed for map: " + task.getPid() - + ". Marking new and continuing..."); - ready = false; - } - } catch (OREParserException oreException) { - ready = false; - logger.error("Unable to parse ORE doc: " + task.getPid() - + ". Unrecoverable parse error: task will not be re-tried."); - if (logger.isTraceEnabled()) { - oreException.printStackTrace(); - - } - } catch (Exception e) { - ready = false; - logger.error("unable to load resource for pid: " + task.getPid() - + " at object path: " + task.getObjectPath() - + ". Marking new and continuing..."); - } - if(!ready) { - task.markNew(); - saveTaskWithoutDuplication(task); - logger.info("Task for resource map pid: " + task.getPid() + " not processed."); - task = null; - continue; - } else { - logger.info("the original index task - "+task.toString()); - ResourceMapIndexTask resourceMapIndexTask = new ResourceMapIndexTask(); - resourceMapIndexTask.copy(task); - resourceMapIndexTask.setReferencedIds(referencedIds); - task = resourceMapIndexTask; - if(task instanceof ResourceMapIndexTask) { - logger.info("the new index task is a ResourceMapIndexTask"); - logger.info("the new index task - "+task.toString()); - } else { - logger.error("Something is wrong to change the IndexTask object to the ResourceMapIndexTask object "); - } - - } - - } - } - return task; - } - - /*private boolean isResourceMapReadyToIndex(IndexTask task, List queue) { - boolean ready = true; - - if (representsResourceMap(task)) { - ResourceMap rm = null; - try { - rm = ResourceMapFactory.buildResourceMap(task.getObjectPath()); - List referencedIds = rm.getAllDocumentIDs(); - referencedIds.remove(task.getPid()); - - if (areAllReferencedDocsIndexed(referencedIds) == false) { - logger.info("Not all map resource references indexed for map: " + task.getPid() - + ". Marking new and continuing..."); - ready = false; - } - } catch (OREParserException oreException) { - ready = false; - logger.error("Unable to parse ORE doc: " + task.getPid() - + ". Unrecoverable parse error: task will not be re-tried."); - if (logger.isTraceEnabled()) { - oreException.printStackTrace(); - - } - } catch (Exception e) { - ready = false; - logger.error("unable to load resource for pid: " + task.getPid() - + " at object path: " + task.getObjectPath() - + ". Marking new and continuing..."); - } - } - - return ready; - }*/ - - /** - * Referenced documents are PIDs or SIDs that are either archived or not. - * This routine checks the solr index first, then failing to find a record, - * checks HZ system metadata map. - * - * @param referencedIds - * @return - */ - private boolean areAllReferencedDocsIndexed(List referencedIds) { - if (referencedIds == null || referencedIds.size() == 0) { - return true; // empty reference map...ok/ready to index. - } - List updateDocuments = null; - int numberOfIndexedOrRemovedReferences = 0; - try { - updateDocuments = httpService.getDocumentsById(this.solrQueryUri, referencedIds); - numberOfIndexedOrRemovedReferences = 0; - for (String id : referencedIds) { - boolean foundId = false; - for (SolrDoc solrDoc : updateDocuments) { - if (solrDoc.getIdentifier().equals(id) || id.equals(solrDoc.getSeriesId())) { - foundId = true; - numberOfIndexedOrRemovedReferences++; - break; - } - } - if (foundId == false) { - logger.info("Identifier " + id - + " was not found in the referenced id list in the Solr search index."); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(TypeFactory.buildIdentifier(id)); - if (smd != null && notVisibleInIndex(smd)) { - numberOfIndexedOrRemovedReferences++; - } - } - } - } catch (Exception e) { - logger.error(e.getMessage(), e); - return false; - } - return referencedIds.size() == numberOfIndexedOrRemovedReferences; - } - - private boolean notVisibleInIndex(SystemMetadata smd) { - - if (smd == null) - return false; - - return ! SolrDoc.visibleInIndex(smd); - } -// return (!SolrDoc.visibleInIndex(smd) && smd != null); - - - private boolean representsResourceMap(IndexTask task) { - return ForesiteResourceMap.representsResourceMap(task.getFormatId()); - } - - /** - * returns true if the task is for a data object, Otherwise, verify that the - * object path stored in the task, or the one in the Hazelcast object path map - * exists on the file system. - * Updates the task with the one from Hazelcast if the Hazelcast one is valid, - * and the one in the task is wrong or previously not set. - - * @return false if a valid path cannot be found - */ - private boolean isObjectPathReady(IndexTask task) { - - if (isDataObject(task)) - return true; - - boolean ready = false; - - String hzObjectPath = null; - if (task.getObjectPath() != null) { - if (new File(task.getObjectPath()).exists()) { - ready = true; - } else { - hzObjectPath = retrieveHzObjectPath(task.getPid()); - if (hzObjectPath != null && new File(hzObjectPath).exists()) { - task.setObjectPath(hzObjectPath); - ready = true; - } - } - } else { - hzObjectPath = retrieveHzObjectPath(task.getPid()); - if (hzObjectPath != null && new File(hzObjectPath).exists()) { - task.setObjectPath(hzObjectPath); - ready = true; - } - } - - if (!ready) { - logger.info("Valid Object Path could not be found for pid: " + task.getPid() - + " Checked path strings in the task [" + task.getObjectPath() + - "] and Hazelcast [" + hzObjectPath + - "]"); - } - - return ready; - } - - - private boolean isDataObject(IndexTask task) { - ObjectFormat format = null; - try { - ObjectFormatIdentifier formatId = new ObjectFormatIdentifier(); - formatId.setValue(task.getFormatId()); - format = ObjectFormatCache.getInstance().getFormat(formatId); - } catch (BaseException e) { - logger.error(e.getMessage(), e); - return false; - } - return FORMAT_TYPE_DATA.equals(format.getFormatType()); - } - - private String retrieveHzObjectPath(String pidString) { - Identifier pid = TypeFactory.buildIdentifier(pidString); - String path = HazelcastClientFactory.getObjectPathMap().get(pid); - if (path == null) { - // cleanup the map - HazelcastClientFactory.getObjectPathMap().evict(pid); - if (logger.isDebugEnabled()) - logger.debug("did not find Object Path for pid: " + pidString - + " cleaning up the map by evicting the pid."); - } - return path; - } - - private List getIndexTaskQueue() { - long getIndexTasksStart = System.currentTimeMillis(); - logger.info("New index tasks with less than "+maxTryCount+" try-count (resource maps sometimes will be set the status new even though the indexing failed) in the index queue will be processed."); - //List indexTasks = repo.findByStatusOrderByPriorityAscTaskModifiedDateAsc(IndexTask.STATUS_NEW); - List indexTasks = repo.findByStatusAndTryCountLessThanOrderByPriorityAscTaskModifiedDateAsc(IndexTask.STATUS_NEW, maxTryCount); - if (perfLog.isLogEnabled()) - perfLog.log("IndexTaskProcessor.getIndexTaskQueue() fetching NEW IndexTasks from repo", System.currentTimeMillis() - getIndexTasksStart); - return indexTasks; - } - - private List getIndexTaskRetryQueue() { - //return repo.findByStatusAndNextExecutionLessThan(IndexTask.STATUS_FAILED, System.currentTimeMillis()); - logger.info("Failed index tasks with less than "+maxTryCount+" try-count in the index queue will be processed."); - return repo.findByStatusAndNextExecutionLessThanAndTryCountLessThan(IndexTask.STATUS_FAILED, System.currentTimeMillis(), maxTryCount); - } - - /* - * @return - Can return null upon error - */ - private IndexTask saveTask(IndexTask task) { - try { - task = repo.save(task); - logger.info("IndexTaskProcess.saveTask save the index task "+task.getPid()); - } catch (HibernateOptimisticLockingFailureException e) { - logger.error("Unable to update index task for pid: " + task.getPid() + "."); - task = null; - } - return task; - } - - /* - * Save the task only if no new or failed task already exists for the pid - */ - private void saveTaskWithoutDuplication(IndexTask task) { - if(task != null) { - if(!newOrFailedIndexTaskExists(task.getPid())) { - saveTask(task); - } - } - } - - /** - * If an index task exists with the new or failed status for the given id - * @param id - * @return true if the index task with new or failed status exists; otherwise false. - */ - private boolean newOrFailedIndexTaskExists(String id) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists for id "+id); - boolean exist=false; - if(id != null ) { - List itList = repo.findByPidAndStatus(id, IndexTask.STATUS_NEW); - if(itList != null && !itList.isEmpty()) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists did find a new-status index task for id "+id); - exist = true; - } - if(!exist) { - itList = repo.findByPidAndStatus(id, IndexTask.STATUS_FAILED); - if(itList != null && !itList.isEmpty()) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists did find a failed-status index task for id "+id); - exist = true; - } - } - } - - return exist; - } - - private Document loadDocument(IndexTask task) { - Document docObject = null; - try { - docObject = XmlDocumentUtility.loadDocument(task.getObjectPath()); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - if (docObject == null) { - logger.error("Could not load OBJECT file for ID,Path=" + task.getPid() + ", " - + task.getObjectPath()); - } - return docObject; - } - - public void setSolrQueryUri(String uri) { - this.solrQueryUri = uri; - } - - /** - * Not sure if this is/should be used outside the class... - * @return - */ - public ExecutorService getExecutorService() { - return executor; - } - - /** - * Get the list of index task futures submitted to the executor service. - * @return - */ - public Queue getFutureQueue() { - return new CircularFifoQueue(futureQueue); - } - - /** - * Call at the end of processing, when canceled tasks would otherwise be left - * in the IN PROCESS state. - */ - public void shutdownExecutor() { - - inShutdownMode = true; - - logger.warn("processor [" + this + "] Shutting down the ExecutorService. Will allow active tasks to finish; " + - "will cancel submitted tasks and return them to NEW status, wait for active tasks to finish, then " + - "return any remaining task not yet submitted to NEW status...."); - logger.warn("...1.) closing ExecutorService to new tasks..."); - getExecutorService().shutdown(); - logger.warn("...2.) cancelling cancellable futures..."); - logger.warn(String.format("...number of futures: %d", futureQueue.size())); - logger.warn("... number of tasks in futures map: " + futureMap.size()); - int marked = 0; - int noTaskMapping = 0; - List uncancellable = new LinkedList<>(); - // cycle through list of futures to see which are cancellable - if (!futureQueue.isEmpty()) { - for (int i=futureQueue.size()-1; i > -1; i--) { - Future f = futureQueue.get(i); - if (f.cancel(/* interrupt while running? */ false)) { - // cancellable, so try to mark new - IndexTask t = futureMap.get(f); - if (t != null) { - try { - t.setStatus(IndexTask.STATUS_NEW); - repo.save(t); - marked++; - } catch (Exception e) { - logger.warn("IndexTaskProcessor.shutdownExecutor - can't reset the status to new and save the index task for the object "+t.getPid()+ " since "+e.getMessage(), e); - } - } else { - noTaskMapping++; - } - } else { - uncancellable.add(f); - // uncancellables includes completed, previously cancelled tasks, - // and "others" that for some reason could not be cancelled. - - } - } - logger.warn(String.format("...number of (cancellable) runnables/tasks reset to new: %d", marked)); - logger.warn(String.format("...number of (cancellable) runnables not mapped to tasks: %d", noTaskMapping)); - logger.warn(String.format("...number of uncancellable runnables: %d (completed or in process)", uncancellable.size())); - } - try { - logger.warn("...3.) waiting (with timeout) for active futures to finish..."); - // the typical time for the longest type of task is 2 minutes (for ResourceMaps) - // so wait a little longer then give up - getExecutorService().awaitTermination(3, TimeUnit.MINUTES); - // we should probably report on the in-process threads - logger.warn("...4.) Reviewing remaining uncancellables to check for completion, returning incomplete ones to NEW status..."); - if (!uncancellable.isEmpty()) { - for (Future f : uncancellable) { - if (!f.isDone()) { - IndexTask t = futureMap.get(f); - if (t != null) { - if (IndexTask.STATUS_IN_PROCESS.equals(t.getStatus())) { - try { - t.setStatus(IndexTask.STATUS_NEW); - repo.save(t); - logger.warn("...active future for pid " + t.getPid() - + " not done. Resetting to NEW, to allow reprocessing next time..."); - } catch (Exception e) { - logger.warn("IndexTaskProcessor.shutdownExecutor - can't reset the status to new and save the index task for the object "+t.getPid()+ " since "+e.getMessage(), e); - } - } else { - logger.warn("...active future for pid " + t.getPid() + - "completed during wait period with status " + t.getStatus()); - } - } else { - logger.error("...CANNOT requeue task. No task mapped to this future!!"); - } - } - } - } - } catch (InterruptedException e) { - logger.warn("interrupt caught while waiting for executor service to finish executing uninterruptable tasks."); - } finally { - logger.warn("...5.) Calling shutdownNow on the executor service."); - List stillWaiting = getExecutorService().shutdownNow(); - logger.warn("... .... number of runnables still waiting: " + stillWaiting.size()); - - logger.warn("...6.) returning preSubmitted tasks to NEW status..."); - logger.warn("... .... number of preSubmitted tasks: " + preSubmittedTasks.size()); - for(IndexTask t : preSubmittedTasks) { - try { - t.markNew(); - repo.save(t); - logger.warn("... preSubmittedTask for pid " + t.getPid() + "returned to NEW status."); - } catch (Throwable e) { - logger.error("....... Exception thrown trying to return task to NEW status for pid: " + t.getPid(),e); - } - } - logger.warn("............7.) DONE with shutting down IndexTaskProcessor."); - } - } -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorDaemon.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorDaemon.java deleted file mode 100644 index 7cd07ccb..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorDaemon.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import org.apache.commons.daemon.Daemon; -import org.apache.commons.daemon.DaemonContext; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; - -public class IndexTaskProcessorDaemon implements Daemon { - - private ApplicationContext context; - private IndexTaskProcessorScheduler scheduler; - private final static String CONTEXTPATH = "/etc/dataone/index/index-generation-context/processor-daemon-context.xml"; - - @Override - public void start() throws Exception { - System.out.println("starting index task processor daemon [" + this + "] ..." ); - try { - context = new FileSystemXmlApplicationContext(CONTEXTPATH); - } catch (Exception e) { - e.printStackTrace(); - System.out.println("IndexTaskProcessorDaemon.start - Falling back to configuration included in jar file."); - context = new ClassPathXmlApplicationContext("processor-daemon-context.xml"); - } - - scheduler = (IndexTaskProcessorScheduler) context.getBean("indexTaskProcessorScheduler"); - scheduler.start(); - } - - @Override - public void stop() throws Exception { - System.out.println("stopping index task processor daemon [" + this + "] ..."); - scheduler.stop(); - System.out.println("index task processor daemon [" + this + "] stopped."); - } - - @Override - public void destroy() { - - } - - @Override - public void init(DaemonContext arg0) throws Exception { - - } - -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorJob.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorJob.java deleted file mode 100644 index 9fd557a7..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorJob.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import org.apache.log4j.Logger; -import org.quartz.DisallowConcurrentExecution; -import org.quartz.InterruptableJob; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.quartz.UnableToInterruptJobException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * The scope of each job is processing a list of IndexTasks. Only one Job is - * permitted to run at a time. - * - * @author rnahf - * - */ -@DisallowConcurrentExecution -public class IndexTaskProcessorJob implements InterruptableJob { - - private static Logger logger = Logger.getLogger(IndexTaskProcessorJob.class.getName()); - - private static ApplicationContext context; - private static IndexTaskProcessor processor; - private static int jobIdentityHash = System.identityHashCode(IndexTaskProcessorJob.class); - - public IndexTaskProcessorJob() { - } - - @Override - public void execute(JobExecutionContext arg0) throws JobExecutionException { - logger.warn("processing job [" + jobIdentityHash + "/" + this + "] executing index task with processor [" + processor + "]"); - setContext(); - processor.processIndexTaskQueue(); - logger.warn("processing job [" + this + "] finished execution of index task processor [" + processor + "]"); - } - - private static void setContext() { - if (context == null || processor == null) { - context = new ClassPathXmlApplicationContext("processor-daemon-context.xml"); - processor = (IndexTaskProcessor) context.getBean("indexTaskProcessor"); - } - } - - /** - * Interrupt calls the held processor's executor service. - * This will let executing tasks complete, but effectively cancels the - * rest of the submitted tasks (which can be quite a long list), and returns - * - * - * @throws UnableToInterruptJobException - */ - @Override - public void interrupt() throws UnableToInterruptJobException { - logger.warn("IndexTaskProcessorJob [" + this + "] interrupted, shutting down processor [" + processor + "]"); - interruptCurrent(); - } - - /** - * Interrupt calls the held processor's executor service. - * This will let executing tasks complete, but effectively cancels the - * rest of the submitted tasks (which can be quite a long list), and returns - * - * - * @throws UnableToInterruptJobException - */ - public static void interruptCurrent() throws UnableToInterruptJobException { - try { - logger.warn("IndexTaskProcessorJob class [" + jobIdentityHash + "] interruptCurrent called, shutting down processor [" + processor + "]"); - processor.shutdownExecutor(); - } catch (Throwable t) { - UnableToInterruptJobException e = new UnableToInterruptJobException( - "Unable to shutdown the executorService that is processing index tasks." - ); - e.initCause(t); - throw e; - } - - } - -} \ No newline at end of file diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorScheduler.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorScheduler.java deleted file mode 100644 index ebf3d53f..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskProcessorScheduler.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import static org.quartz.JobBuilder.newJob; -import static org.quartz.JobKey.jobKey; -import static org.quartz.TriggerBuilder.newTrigger; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.List; -import java.util.Properties; - -import org.apache.log4j.Logger; -import org.quartz.InterruptableJob; -import org.quartz.Job; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.SchedulerFactory; -import org.quartz.SimpleScheduleBuilder; -import org.quartz.SimpleTrigger; -import org.quartz.TriggerKey; -import org.quartz.impl.StdSchedulerFactory; - -public class IndexTaskProcessorScheduler { - - private static Logger logger = Logger.getLogger(IndexTaskProcessorScheduler.class.getName()); - - private static final String QUARTZ_PROCESSOR_TRIGGER = "index-process-trigger"; - private static final String QUARTZ_PROCESSOR_GROUP = "d1-cn-index-processor"; - private static final String QUARTZ_PROCESSOR_JOB = "d1-index-processor-job"; - - private Scheduler scheduler; - - /** - * called by the IndexTaskProcessorDaemon's start method - */ - public void start() { - try { - logger.warn("starting index task processor quartz scheduler [" + this + "] ..."); - Properties properties = new Properties(); - properties.load(this.getClass().getResourceAsStream( - "/org/dataone/configuration/quartz.properties")); - SchedulerFactory schedulerFactory = new StdSchedulerFactory(properties); - scheduler = schedulerFactory.getScheduler(); - - JobDetail job = newJob(IndexTaskProcessorJob.class).withIdentity(QUARTZ_PROCESSOR_JOB, - QUARTZ_PROCESSOR_GROUP).build(); - - SimpleTrigger trigger = newTrigger() - .withIdentity(QUARTZ_PROCESSOR_TRIGGER, QUARTZ_PROCESSOR_GROUP)// - .startNow() // - .withSchedule(SimpleScheduleBuilder.repeatMinutelyForever(2)) // - .build(); - - scheduler.scheduleJob(job, trigger); - scheduler.start(); - - } catch (SchedulerException e) { - logger.error(e.getMessage(), e); - } catch (FileNotFoundException e) { - logger.error(e.getMessage(), e); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - } - - /** - * called by IndexTaskProcessorDaemon's stop method. Puts the started scheduler - * on standby, then waits for the scheduler's executing IndexTaskProcesssorJobs - * to finish. Depending on the configuration of the Job, there may me more than - * one executing at a time. - * TODO: should we send an interrupt or stop to the job? - */ - public void stop() { - logger.warn("stopping index task processor quartz scheduler [" + this + "] ..."); - try { - - if (scheduler.isStarted()) { - //jobs = scheduler.getCurrentlyExecutingJobs(); - //logger.info("IndexTaskProcessorScheduler - before the standby the currently executing job context list is "+jobs); - scheduler.standby(); // this stops execution and triggering - // keeping backlogged triggers from executing - - //interrupt the IndexTaskProcessorJob - boolean success = scheduler.interrupt(jobKey(QUARTZ_PROCESSOR_JOB, QUARTZ_PROCESSOR_GROUP)); - if(!success) { - logger.info("Scheuler.interrupt method can't succeed to interrupt the d1 index job and the static method IndexTaskProcessorJob.interruptCurrent() will be called."); - IndexTaskProcessorJob.interruptCurrent(); - logger.info("The scheuler.interrupt method seems not interrupt the d1 index job and the static method IndexTaskProcessorJob.interruptCurrent() was called."); - } - - // wait for concurrently executing Jobs to finish - while (!(scheduler.getCurrentlyExecutingJobs().isEmpty())) { - logger.warn(String.format("%d jobs executing, waiting for them to complete...", - scheduler.getCurrentlyExecutingJobs().size())); - - try { - Thread.sleep(5000); - } catch (InterruptedException ex) { - logger.warn("Sleep interrupted while waiting for executing jobs to finish. check again!"); - } - } - scheduler.deleteJob(jobKey(QUARTZ_PROCESSOR_JOB, QUARTZ_PROCESSOR_GROUP)); - logger.warn("Job scheduler [" + this + "] finished executing all jobs. The d1-index-processor shut down sucessfully.============================================"); - } - } catch (Exception e) { - logger.error("There was an issue to shut down d1-index-processor "+e.getMessage(), e); - } - } -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexTaskUpdateProcessor.java b/src/main/java/org/dataone/cn/index/processor/IndexTaskUpdateProcessor.java deleted file mode 100644 index d3e21a8f..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexTaskUpdateProcessor.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.index.processor; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.util.List; - -import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.indexer.SolrIndexService; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v2.SystemMetadata; -import org.dataone.service.util.TypeMarshaller; -import org.springframework.beans.factory.annotation.Autowired; -import org.xml.sax.SAXParseException; - -public class IndexTaskUpdateProcessor implements IndexTaskProcessingStrategy { - - private static Logger logger = Logger.getLogger(IndexTaskUpdateProcessor.class.getName()); - - @Autowired - private SolrIndexService solrIndexService; - - public void process(IndexTask task) throws Exception { - InputStream smdStream = new ByteArrayInputStream(task.getSysMetadata().getBytes()); - try { - solrIndexService.insertIntoIndex(task.getPid(), smdStream, task.getObjectPath()); - } catch (SAXParseException spe) { - logger.error(spe); - logger.error("Caught SAX parse exception on: " + task.getPid() - + ". re-trying with fresh copy of system metadata."); - Identifier pid = new Identifier(); - pid.setValue(task.getPid()); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(pid); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - TypeMarshaller.marshalTypeToOutputStream(smd, os); - solrIndexService.insertIntoIndex(task.getPid(), - new ByteArrayInputStream(os.toByteArray()), task.getObjectPath()); - logger.error("Retry with fresh system metadata successful!"); - } - } - - @Override - public void process(List tasks) throws Exception { - try { - solrIndexService.insertIntoIndex(tasks); - } catch (SAXParseException spe) { - logger.error(spe); - StringBuilder failedPids = new StringBuilder(); - for (IndexTask task : tasks) - failedPids.append(task.getPid()).append(", "); - logger.error("Caught SAX parse exception on: " + failedPids + ". Unable to insert into index."); - } - } - -} diff --git a/src/main/java/org/dataone/cn/index/processor/IndexVisibilityDelegateHazelcastImpl.java b/src/main/java/org/dataone/cn/index/processor/IndexVisibilityDelegateHazelcastImpl.java deleted file mode 100644 index 92c1c2cf..00000000 --- a/src/main/java/org/dataone/cn/index/processor/IndexVisibilityDelegateHazelcastImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dataone.cn.index.processor; - -import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.indexer.resourcemap.IndexVisibilityDelegate; -import org.dataone.cn.indexer.solrhttp.SolrDoc; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v2.SystemMetadata; - -public class IndexVisibilityDelegateHazelcastImpl implements IndexVisibilityDelegate { - - private static Logger logger = Logger.getLogger(IndexVisibilityDelegateHazelcastImpl.class - .getName()); - - public IndexVisibilityDelegateHazelcastImpl() { - } - - public boolean isDocumentVisible(Identifier pid) { - boolean visible = false; - try { - - SystemMetadata systemMetadata = HazelcastClientFactory.getSystemMetadataMap().get(pid); - // TODO: Is pid Identifier a SID? - if (systemMetadata == null) { - return true; - } - if (SolrDoc.visibleInIndex(systemMetadata)) { - visible = true; - } - } catch (NullPointerException npe) { - logger.warn("Could not get visible value for pid: " + pid.getValue()); - } - return visible; - } - - public boolean documentExists(Identifier pid) { - boolean exists = false; - try { - SystemMetadata systemMetadata = HazelcastClientFactory.getSystemMetadataMap().get(pid); - if (systemMetadata != null) { - exists = true; - } else { - // TODO: Is pid Identifier a SID? - return true; - } - } catch (NullPointerException npe) { - logger.warn("Could not get visible value for pid: " + pid.getValue()); - } - return exists; - } -} diff --git a/src/main/java/org/dataone/cn/index/task/ResourceMapIndexTask.java b/src/main/java/org/dataone/cn/index/task/ResourceMapIndexTask.java deleted file mode 100644 index c076b4e8..00000000 --- a/src/main/java/org/dataone/cn/index/task/ResourceMapIndexTask.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ -package org.dataone.cn.index.task; - -import java.util.ArrayList; -import java.util.List; - -import javax.persistence.Transient; - - -/** - * This class represents an index task for a resource map object. - * Besides the base index task, it has a new fields which contains referenced objects' ids (excluding itself) of the resource map objects. - * @author tao - * - */ -public class ResourceMapIndexTask extends IndexTask { - @Transient - private List referencedIds = new ArrayList (); - - /** - * Default constructor - */ - public ResourceMapIndexTask() { - - } - - @Transient - public List getReferencedIds() { - return referencedIds; - } - - @Transient - public void setReferencedIds(List referencedIds) { - this.referencedIds = referencedIds; - } - - /** - * Copy the fields of the given task to this object - * @param task - */ - @Transient - public void copy(IndexTask task) { - if(task != null) { - this.setId(task.getId()); - this.setVersion(task.getVersion()); - this.setPid(task.getPid()); - this.setFormatId(task.getFormatId()); - this.setSysMetadata(task.getSysMetadata()); - this.setObjectPath(task.getObjectPath()); - this.setDateSysMetaModified(task.getDateSysMetaModified()); - this.setNextExection(task.getNextExecution()); - this.setTryCount(task.getTryCount()); - this.setDeleted(task.isDeleted()); - this.setPriority(task.getPriority()); - this.setStatus(task.getStatus()); - this.setTaskModifiedDate(task.getTaskModifiedDate()); - } - - } -} diff --git a/src/main/java/org/dataone/cn/indexer/IndexWorker.java b/src/main/java/org/dataone/cn/indexer/IndexWorker.java new file mode 100644 index 00000000..fcaa0949 --- /dev/null +++ b/src/main/java/org/dataone/cn/indexer/IndexWorker.java @@ -0,0 +1,479 @@ +package org.dataone.cn.indexer; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeoutException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPathExpressionException; + +import org.apache.commons.codec.EncoderException; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.log4j.Logger; +import org.apache.solr.client.solrj.SolrServerException; +import org.dataone.cn.indexer.annotation.OntologyModelService; +import org.dataone.cn.indexer.object.ObjectManager; +import org.dataone.configuration.Settings; +import org.dataone.exceptions.MarshallingException; +import org.dataone.indexer.queue.IndexQueueMessageParser; +import org.dataone.service.exceptions.InvalidRequest; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.exceptions.UnsupportedType; +import org.dataone.service.types.v1.Identifier; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.xml.sax.SAXException; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Consumer; +import com.rabbitmq.client.DefaultConsumer; +import com.rabbitmq.client.Envelope; +import com.rabbitmq.client.LongString; + + + + +/** + * Worker class to process index tasks and submit results to store. + */ +public class IndexWorker { + + //Those strings are the types of the index tasks. + //The create is the index task type for the action when a new object was created. So the solr index will be generated. + //delete is the index task type for the action when an object was deleted. So the solr index will be deleted + //sysmeta is the index task type for the action when the system metadata of an existing object was updated. + public final static String CREATE_INDEXT_TYPE = "create"; + public final static String DELETE_INDEX_TYPE = "delete"; + public final static String SYSMETA_CHANGE_TYPE = "sysmeta"; //this handle for resource map only + + public final static int HIGHEST_PRIORITY = 4; // some special cases + public final static int HIGH_PRIORITY = 3; //use for the operations such as create, update + public final static int MEDIUM_PRIORITY = 2; //use for the operations such as updateSystem, delete, archive + public final static int LOW_PRIORITY = 1; //use for the bulk operations such as reindexing the whole corpus + + private final static String HEADER_ID = "id"; //The header name in the message to store the identifier + private final static String HEADER_PATH = "path"; //The header name in the message to store the path of the object + private final static String HEADER_INDEX_TYPE = "index_type"; //The header name in the message to store the index type + + private final static String EXCHANGE_NAME = "dataone-index"; + private final static String INDEX_QUEUE_NAME = "index"; + private final static String INDEX_ROUTING_KEY = "index"; + + private static final String springConfigFileURL = "/index-parser-context.xml"; + private static final String ENV_NAME_OF_PROPERTIES_FILE = "DATAONE_INDEXER_CONFIG"; + + private static Logger logger = Logger.getLogger(IndexWorker.class); + private static String defaultExternalPropertiesFile = "/etc/dataone/dataone-indexer.properties"; + + protected static String propertyFilePath = null; + protected boolean multipleThread = true; + protected int nThreads = 1; + + private String rabbitMQhost = null; + private int rabbitMQport = 0; + private String rabbitMQusername = null; + private String rabbitMQpassword = null; + private int rabbitMQMaxPriority = 10; + private Connection rabbitMQconnection = null; + private Channel rabbitMQchannel = null; + private ApplicationContext context = null; + protected SolrIndex solrIndex = null; + private String specifiedThreadNumberStr = null; + private int specifiedThreadNumber = 0; + private ExecutorService executor = null; + + + /** + * Commandline main for the IndexWorker to be started. + * @param args + * @throws TimeoutException + * @throws IOException + * @throws ServiceFailure + */ + public static void main(String[] args) throws IOException, TimeoutException, ServiceFailure { + logger.info("IndexWorker.main - Starting index worker..."); + String propertyFile = null; + loadExternalPropertiesFile(propertyFile); + IndexWorker worker = new IndexWorker(); + worker.start(); + } + + /** + * Load properties from an external file. + * DataONE-indexer will try to load the property file by this order + * 1. try to read it from the user specified + * 2. try to read it from an env variable - DATAONE_INDEXER_CONFIG. + * 3 try to use the default path - /etc/dataone/dataone-indexer.properties + * If all attempts fail, it will give up and use the one embedded in the jar file + * @param propertyFile the property file user specified + */ + public static void loadExternalPropertiesFile(String propertyFile) { + // try the users specified path + if (propertyFile != null && !propertyFile.trim().equals("")) { + propertyFilePath = propertyFile; + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path specified by users is " + propertyFilePath); + File defaultFile = new File (propertyFilePath); + if (defaultFile.exists() && defaultFile.canRead()) { + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path users specified is " + + propertyFilePath + ". The file exists and is readable. So it will be used."); + } else { + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path users specified is " + + propertyFilePath + ". But the file does NOT exist or is NOT readable. So it will NOT be used."); + propertyFilePath = null; + } + } + + //try the path from the env variable + if (propertyFilePath == null || propertyFilePath.trim().equals("")) { + propertyFilePath = System.getenv(ENV_NAME_OF_PROPERTIES_FILE); + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path from the env variable is " + propertyFilePath); + if (propertyFilePath != null && !propertyFilePath.trim().equals("")) { + File defaultFile = new File (propertyFilePath); + if (defaultFile.exists() && defaultFile.canRead()) { + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path can be read from the env variable " + ENV_NAME_OF_PROPERTIES_FILE + + " and its value is " + propertyFilePath + ". The file exists and it will be used."); + } else { + logger.info("IndexWorker.loadExternalPropertiesFile - the configuration path can be read from the env variable " + ENV_NAME_OF_PROPERTIES_FILE + + " and its value is " + propertyFilePath + ". But the file does NOT exist or is NOT readable. So it will NOT be used."); + propertyFilePath = null; + } + } + } + + //The attempts to read the configuration file specified by users and from the env variable failed. We will try the default external path + if (propertyFilePath == null || propertyFilePath.trim().equals("")) { + File defaultFile = new File (defaultExternalPropertiesFile); + if (defaultFile.exists() && defaultFile.canRead()) { + logger.info("IndexWorker.loadExternalPropertiesFile - the configure path can't be read either by users specified or from the env variable " + ENV_NAME_OF_PROPERTIES_FILE + + ". However, the default external file " + defaultExternalPropertiesFile + " exists and it will be used."); + propertyFilePath = defaultExternalPropertiesFile; + } + } + if (propertyFilePath != null && !propertyFilePath.trim().equals("")) { + try { + //Settings.getConfiguration(); + Settings.augmentConfiguration(propertyFilePath); + logger.info("IndexWorker.loadExternalPropertiesFile - loaded the properties from the file " + propertyFilePath); + } catch (ConfigurationException e) { + logger.error("IndexWorker.loadExternalPropertiesFile - can't load any properties from the file " + propertyFilePath + + " since " + e.getMessage() + ". It will use the default properties in the jar file."); + } + } else { + logger.info("IndexWorker.loadExternalPropertiesFile - can't load an external properties file from the env variable " + + ENV_NAME_OF_PROPERTIES_FILE + " or from the default path " + defaultExternalPropertiesFile + ". Dataone-indexer will use the properties file embedded in the jar file"); + } + } + + /** + * Load an additional property file to the worker when it is necessary. + * The main reason to have this method is that metacat has two property files + * - the site property file and metacat property file. We should use this + * method to load the site property file after loading the metacat property file + * @param propertyFile + */ + public static void loadAdditionalPropertyFile (String propertyFile) { + if (propertyFile != null && !propertyFile.trim().equals("")) { + try { + //Settings.getConfiguration(); + Settings.augmentConfiguration(propertyFile); + logger.info("IndexWorker.loadAdditionalPropertyFile - loaded the properties from the file " + propertyFile); + } catch (ConfigurationException e) { + logger.error("IndexWorker.loadAdditionalPropertyFile - can't load any properties from the file " + propertyFile + + " since " + e.getMessage() + "."); + } + } else { + logger.info("IndexWorker.loadAdditionalPropertyFile - can't load an additional property file since its path is null or blank."); + } + } + + /** + * Default constructor to initialize the RabbitMQ service + * @throws IOException + * @throws TimeoutException + * @throws ServiceFailure + */ + public IndexWorker() throws IOException, TimeoutException, ServiceFailure { + this(true); + } + + /** + * Constructor with/without initialization + * @param initialize if we need to initialize RabittMQ and et al + * @throws IOException + * @throws TimeoutException + * @throws ServiceFailure + */ + public IndexWorker(Boolean initialize) throws IOException, TimeoutException, ServiceFailure { + if (initialize) { + initExecutorService();//initialize the executor first + initIndexQueue(); + initIndexParsers(); + ObjectManager.getInstance(); + OntologyModelService.getInstance(); + } + } + + /** + * Initialize the RabbitMQ service + * @throws IOException + * @throws TimeoutException + */ + private void initIndexQueue() throws IOException, TimeoutException { + rabbitMQhost = Settings.getConfiguration().getString("index.rabbitmq.hostname", "localhost"); + rabbitMQport = Settings.getConfiguration().getInt("index.rabbitmq.hostport", 5672); + rabbitMQusername = Settings.getConfiguration().getString("index.rabbitmq.username", "guest"); + rabbitMQpassword = Settings.getConfiguration().getString("index.rabbitmq.password", "guest"); + rabbitMQMaxPriority = Settings.getConfiguration().getInt("index.rabbitmq.max.priority"); + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost(rabbitMQhost); + factory.setPort(rabbitMQport); + factory.setPassword(rabbitMQpassword); + factory.setUsername(rabbitMQusername); + // connection that will recover automatically + factory.setAutomaticRecoveryEnabled(true); + // attempt recovery every 10 seconds after a failure + factory.setNetworkRecoveryInterval(10000); + logger.debug("IndexWorker.initIndexQueue - Set RabbitMQ host to: " + rabbitMQhost); + logger.debug("IndexWorker.initIndexQueue - Set RabbitMQ port to: " + rabbitMQport); + + // Setup the 'InProcess' queue with a routing key - messages consumed by this queue require that + // this routine key be used. The routine key INDEX_ROUTING_KEY sends messages to the index worker, + boolean durable = true; + rabbitMQconnection = factory.newConnection(); + rabbitMQchannel = rabbitMQconnection .createChannel(); + rabbitMQchannel.exchangeDeclare(EXCHANGE_NAME, "direct", durable); + + boolean exclusive = false; + boolean autoDelete = false; + Map argus = new HashMap(); + argus.put("x-max-priority", rabbitMQMaxPriority); + logger.debug("IndexWorker.initIndexQueue - Set RabbitMQ max priority to: " + rabbitMQMaxPriority); + rabbitMQchannel.queueDeclare(INDEX_QUEUE_NAME, durable, exclusive, autoDelete, argus); + rabbitMQchannel.queueBind(INDEX_QUEUE_NAME, EXCHANGE_NAME, INDEX_ROUTING_KEY); + + logger.info("IndexWorker.initIndexQueue - the allowed unacknowledged message(s) number is " + nThreads); + rabbitMQchannel.basicQos(nThreads); + logger.debug("IndexWorker.initIndexQueue - Connected to the RabbitMQ queue with the name of " + INDEX_QUEUE_NAME); + } + + /** + * Initialize the solrIndex object which contains the index parsers. + */ + protected void initIndexParsers() { + if (context == null) { + synchronized(IndexWorker.class) { + if (context == null) { + context = new ClassPathXmlApplicationContext(springConfigFileURL); + } + } + } + solrIndex = (SolrIndex)context.getBean("solrIndex"); + } + + /** + * Determine the size of the thread pool and initialize the executor service + */ + protected void initExecutorService() { + specifiedThreadNumberStr = Settings.getConfiguration().getString("index.thread.number", "0"); + try { + specifiedThreadNumber = Integer.parseInt(specifiedThreadNumberStr); + } catch (NumberFormatException e) { + specifiedThreadNumber = 0; + logger.warn("IndexWorker.initExecutorService - IndexWorker cannot parse the string " + specifiedThreadNumberStr + + " specified by property index.thread.number into a number since " + e.getLocalizedMessage() + + ". The default value 0 will be used as the specified value"); + } + int availableProcessors = Runtime.getRuntime().availableProcessors(); + availableProcessors = availableProcessors - 1; + nThreads = Math.max(1, availableProcessors); //the default threads number + if (specifiedThreadNumber > 0 && specifiedThreadNumber < nThreads) { + nThreads = specifiedThreadNumber; //use the specified number in the property file + } + if (nThreads != 1) { + logger.info("IndexWorker.initExecutorService - the size of index thread pool specified in the propery file is " + specifiedThreadNumber + + ". The size computed from the available processors is " + availableProcessors + + ". Final computed thread pool size for index executor: " + nThreads); + executor = Executors.newFixedThreadPool(nThreads); + multipleThread = true; + } else { + logger.info("IndexWorker.initExecutorService - the size of index thread pool specified in the propery file is " + specifiedThreadNumber + + ". The size computed from the available processors is " + availableProcessors + + ". Final computed thread pool size for index executor: " + nThreads + ". Since its value is 1, we do NOT need the executor service and use a single thread way."); + multipleThread = false; + } + + } + + + + /** + * Worker starts to consume messages from the index queue - calling SolrIndex to + * process index tasks and submit results to store. + * @throws IOException + */ + public void start() throws IOException { + final Consumer consumer = new DefaultConsumer(rabbitMQchannel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) + throws IOException { + String identifier = null; + try { + final IndexQueueMessageParser parser = new IndexQueueMessageParser(); + parser.parse(properties, body); + final Envelope finalEnvelop = envelope; + if (multipleThread) { + logger.debug("IndexWorker.start.handleDelivery - using multiple threads to index identifier " + parser.getIdentifier().getValue()); + Runnable runner = new Runnable() { + @Override + public void run() { + indexOjbect(parser, finalEnvelop.getDeliveryTag(), multipleThread); + } + }; + // submit the task, and that's it + executor.submit(runner); + } else { + logger.debug("IndexWorker.start.handleDelivery - using single thread to index identifier " + parser.getIdentifier().getValue()); + indexOjbect(parser, finalEnvelop.getDeliveryTag(), multipleThread); + } + } catch (InvalidRequest e) { + logger.error("IndexWorker.start.handleDelivery - cannot index the task for identifier " + + identifier + " since " + e.getMessage()); + boolean requeue = false; + rabbitMQchannel.basicReject(envelope.getDeliveryTag(), requeue); + } + } + }; + boolean autoAck = false; + rabbitMQchannel.basicConsume(INDEX_QUEUE_NAME, autoAck, consumer); + logger.info("IndexWorker.start - Calling basicConsume and waiting for the comming messages"); + } + + /** + * Process the index task. This method is called by a single or multiple thread(s) determined by the configuration. + * @param parser the parser parsed the index queue message and holds the index information + * @param deliveryTag the tag of the rabbitmq message + * @param multipleThread the task was handled by multiple thread or not (for the log information only) + */ + private void indexOjbect(IndexQueueMessageParser parser, long deliveryTag, boolean multipleThread) { + long start = System.currentTimeMillis(); + Identifier pid = parser.getIdentifier(); + String indexType = parser.getIndexType(); + int priority = parser.getPriority(); + String finalFilePath = parser.getObjectPath(); + try { + // Send the acknowledge back to RabbitMQ before processing index. + // This is a temporary solution for the RabbitMQ timeout issue. + // Set multiple false + rabbitMQchannel.basicAck(deliveryTag, false); + } catch (Exception e) { + logger.error("IndexWorker.indexOjbect - identifier: " + pid.getValue() + + " , the index type: " + indexType + + ", sending acknowledgement back to rabbitmq failed since " + + e.getMessage() + ". So rabbitmq may resend the message again"); + } + try { + long threadId = Thread.currentThread().getId(); + logger.info("IndexWorker.consumer.indexOjbect by multiple thread? " + multipleThread + + ", with the thread id " + threadId + + " - Received the index task from the index queue with the identifier: " + + pid.getValue() + " , the index type: " + indexType + + ", the file path (null means not to have): " + finalFilePath + + ", the priotity: " + priority); + if (indexType.equals(CREATE_INDEXT_TYPE)) { + boolean sysmetaOnly = false; + solrIndex.update(pid, finalFilePath, sysmetaOnly); + } else if (indexType.equals(SYSMETA_CHANGE_TYPE)) { + boolean sysmetaOnly = true; + solrIndex.update(pid, finalFilePath, sysmetaOnly); + } else if (indexType.equals(DELETE_INDEX_TYPE)) { + solrIndex.remove(pid); + } else { + throw new InvalidRequest("0000", "DataONE indexer does not know the index type: " + + indexType + " in the index task"); + } + + long end = System.currentTimeMillis(); + logger.info("IndexWorker.indexOjbect with the thread id " + threadId + + " - Completed the index task from the index queue with the identifier: " + + pid.getValue() + " , the index type: " + indexType + + ", the file path (null means not to have): " + finalFilePath + + ", the priotity: " + priority + " and the time taking is " + + (end-start) + " milliseconds"); + + } catch (InvalidToken e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage()); + } catch (NotAuthorized e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage()); + } catch (NotImplemented e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage()); + } catch (ServiceFailure e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (NotFound e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage()); + } catch (XPathExpressionException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (UnsupportedType e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (SAXException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (ParserConfigurationException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (SolrServerException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (MarshallingException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (EncoderException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (InterruptedException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (IOException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (InvalidRequest e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage()); + } catch (InstantiationException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } catch (IllegalAccessException e) { + logger.error("IndexWorker.indexOjbect - cannot index the task for identifier " + + pid.getValue() + " since " + e.getMessage(), e); + } + } + + /** + * Stop the RabbitMQ connection + * @throws TimeoutException + * @throws IOException + */ + public void stop() throws IOException, TimeoutException { + rabbitMQchannel.close(); + rabbitMQconnection.close(); + logger.info("IndexWorker.stop - stop the index queue conection."); + } +} diff --git a/src/main/java/org/dataone/cn/indexer/SolrIndex.java b/src/main/java/org/dataone/cn/indexer/SolrIndex.java new file mode 100644 index 00000000..104a158a --- /dev/null +++ b/src/main/java/org/dataone/cn/indexer/SolrIndex.java @@ -0,0 +1,1019 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.cn.indexer; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.codec.EncoderException; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.common.SolrException; +import org.dataone.cn.indexer.object.ObjectManager; +import org.dataone.cn.indexer.parser.BaseXPathDocumentSubprocessor; +import org.dataone.cn.indexer.parser.IDocumentDeleteSubprocessor; +import org.dataone.cn.indexer.parser.IDocumentSubprocessor; +import org.dataone.cn.indexer.parser.ISolrField; +import org.dataone.cn.indexer.solrhttp.HTTPService; +import org.dataone.cn.indexer.solrhttp.SolrDoc; +import org.dataone.cn.indexer.solrhttp.SolrElementAdd; +import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; +import org.dataone.exceptions.MarshallingException; +import org.dataone.service.exceptions.InvalidRequest; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.exceptions.UnsupportedType; +import org.dataone.service.types.v1.Identifier; +import org.dataone.service.types.v2.SystemMetadata; +import org.dataone.service.util.TypeMarshaller; +import org.dspace.foresite.OREParserException; +import org.springframework.beans.factory.annotation.Autowired; +import org.xml.sax.SAXException; + + + +/** + * A class does insert, update and remove indexes to a SOLR server + * @author tao + * + */ +public class SolrIndex { + + public static final String ID = "id"; + private static final String IDQUERY = ID+":*"; + private static final String VERSION_CONFLICT = "version conflict"; + private static final int VERSION_CONFLICT_MAX_ATTEMPTS = Settings.getConfiguration().getInt( + "index.solr.versionConflict.max.attempts", 25); + private static final int VERSION_CONFICT_WAITING = Settings.getConfiguration().getInt( + "index.solr.versionConflict.waiting.time", 500); //milliseconds + private static final List resourceMapFormatIdList = Settings.getConfiguration().getList( + "index.resourcemap.namespace"); + private static List subprocessors = null; + private static List deleteSubprocessors = null; + private static SolrClient solrServer = null; + private static List copyFields = null;//list of solr copy fields + + private static HTTPService httpService = null; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); + private String solrIndexUri = Settings.getConfiguration().getString("solr.index.uri"); + private XMLNamespaceConfig xmlNamespaceConfig = null; + private static BaseXPathDocumentSubprocessor systemMetadataProcessor = null; + private List sysmetaSolrFields = null; + private static Log log = LogFactory.getLog(SolrIndex.class); + + + /** + * Constructor + * @throws SAXException + * @throws IOException + */ + public SolrIndex(XMLNamespaceConfig xmlNamespaceConfig, BaseXPathDocumentSubprocessor systemMetadataProcessor, HTTPService httpService) + throws XPathExpressionException, ParserConfigurationException, IOException, SAXException { + this.xmlNamespaceConfig = xmlNamespaceConfig; + this.systemMetadataProcessor = systemMetadataProcessor; + this.httpService = httpService; + init(); + } + + private void init() throws ParserConfigurationException, XPathExpressionException { + sysmetaSolrFields = systemMetadataProcessor.getFieldList(); + copyFields = httpService.getSolrCopyFields(); + if (copyFields != null) { + log.info("SolrIndex.init - the size of the copy fields from the solr schema is : " + copyFields.size()); + for(String copyField : copyFields) { + log.debug("SolrIndex.init - the copy field from the solr schema: " + copyField); + } + } else { + log.warn("SolrIndex.init - the size of the copy fields from the solr schema is 0."); + } + + } + + /** + * Get the list of the Subprocessors in this index. + * @return the list of the Subprocessors. + */ + public List getSubprocessors() { + return subprocessors; + } + + /** + * Set the list of Subprocessors. + * @param subprocessorList the list will be set. + */ + public void setSubprocessors(List subprocessorList) { + for (IDocumentSubprocessor subprocessor : subprocessorList) { + if (subprocessor instanceof BaseXPathDocumentSubprocessor) { + XPathFactory xpathFactory = XPathFactory.newInstance(); + XPath xpath = xpathFactory.newXPath(); + xpath.setNamespaceContext(xmlNamespaceConfig); + ((BaseXPathDocumentSubprocessor)subprocessor).initExpression(xpath); + } + } + this.subprocessors = subprocessorList; + } + + public List getDeleteSubprocessors() { + return deleteSubprocessors; + } + + public void setDeleteSubprocessors( + List deleteSubprocessors) { + this.deleteSubprocessors = deleteSubprocessors; + } + + /** + * Generate the index for the given information + * @param id + * @param systemMetadata + * @param dataStream + * @return + * @throws IOException + * @throws SAXException + * @throws ParserConfigurationException + * @throws XPathExpressionException + * @throws MarshallingException + * @throws SolrServerException + * @throws EncoderException + * @throws UnsupportedType + * @throws NotFound + * @throws NotImplemented + */ + private Map process(String id, SystemMetadata systemMetadata, String objectPath, boolean isSysmetaChangeOnly) + throws IOException, SAXException, ParserConfigurationException, + XPathExpressionException, MarshallingException, EncoderException, SolrServerException, NotImplemented, NotFound, UnsupportedType{ + log.debug("SolrIndex.process - trying to generate the solr doc object for the pid "+id); + long start = System.currentTimeMillis(); + Map docs = new HashMap(); + // Load the System Metadata document + ByteArrayOutputStream systemMetadataOutputStream = new ByteArrayOutputStream(); + TypeMarshaller.marshalTypeToOutputStream(systemMetadata, systemMetadataOutputStream); + ByteArrayInputStream systemMetadataStream = new ByteArrayInputStream(systemMetadataOutputStream.toByteArray()); + try { + docs = systemMetadataProcessor.processDocument(id, docs, systemMetadataStream); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new SolrServerException(e.getMessage()); + } + long end = System.currentTimeMillis(); + //log.info("SolrIndex.process - the time for processing the system metadata for the pid " + id + " is " + (end-start) + "milliseconds."); + // get the format id for this object + String formatId = docs.get(id).getFirstFieldValue(SolrElementField.FIELD_OBJECTFORMAT); + boolean skipOtherProcessor = false; + log.debug("SolrIndex.process - the object format id for the pid "+id+" is "+formatId); + if (resourceMapFormatIdList.contains(formatId) && isSysmetaChangeOnly) { + //we need to make the solr doc exists (means the resource map was processed + SolrDoc existingResourceMapSolrDoc = httpService.getSolrDocumentById(solrQueryUri, id); + if (existingResourceMapSolrDoc != null ) { + log.info("SolrIndex.process - This is a systemmetadata-change-only event for the resource map " + id + + ". So we only use the system metadata subprocessor"); + skipOtherProcessor = true; + } else { + log.info("SolrIndex.process - There is no solr doc for the resource map " + id + + ". Even though this is a systemmetadata-change-only event, we can NOT just reindex the systemmeta only."); + } + + } + log.debug("SolrIndex.process - the value of skipOtherProcessors is " + skipOtherProcessor + + " and the object path is " + objectPath + " for the id " + id); + //if the objectPath is null, we should skip the other processes + if (!skipOtherProcessor && objectPath != null) { + log.debug("SolrIndex.process - Start to use subprocessor list to process " + id); + // Determine if subprocessors are available for this ID + if (subprocessors != null) { + // for each subprocessor loaded from the spring config + for (IDocumentSubprocessor subprocessor : subprocessors) { + // Does this subprocessor apply? + if (subprocessor.canProcess(formatId)) { + // if so, then extract the additional information from the + // document. + try { + // docObject = the resource map document or science + // metadata document. + // note that resource map processing touches all objects + // referenced by the resource map. + //start = System.currentTimeMillis(); + FileInputStream dataStream = new FileInputStream(objectPath); + //end = System.currentTimeMillis(); + //log.info("SolrIndex.process - the time for reading the file input stream " + " for the pid " + id + " is " + (end-start) + "milliseconds."); + if (!dataStream.getFD().valid()) { + log.error("SolrIndex.process - subprocessor "+ subprocessor.getClass().getName() +" couldn't process since it could not load OBJECT file for ID,Path=" + id + ", " + + objectPath); + //throw new Exception("Could not load OBJECT for ID " + id ); + } else { + start = System.currentTimeMillis(); + docs = subprocessor.processDocument(id, docs, dataStream); + end = System.currentTimeMillis(); + log.info("SolrIndex.process - the time for calling processDocument for the subprocessor " + subprocessor.getClass().getName() +" for the pid " + id + " is " + (end-start) + "milliseconds."); + log.debug("SolrIndex.process - subprocessor "+ subprocessor.getClass().getName() +" generated solr doc for id "+id); + } + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + throw new SolrServerException(e.getMessage()); + } + } + } + } + } + + /*if(docs != null) { + SolrDoc solrDoc = docs.get(id); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + solrDoc.serialize(baos, "UTF-8"); + log.warn("after process the science metadata, the solr doc is \n"+baos.toString()); + }*/ + + // TODO: in the XPathDocumentParser class in d1_cn_index_process module, + // merge is only for resource map. We need more work here. + for (SolrDoc mergeDoc : docs.values()) { + if (!mergeDoc.isMerged()) { + mergeWithIndexedDocument(mergeDoc); + } + } + + /*if(docs != null) { + SolrDoc solrDoc = docs.get(id); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + solrDoc.serialize(baos, "UTF-8"); + log.warn("after merge, the solr doc is \n"+baos.toString()); + }*/ + //SolrElementAdd addCommand = getAddCommand(new ArrayList(docs.values())); + + return docs; + } + + /** + * Merge updates with existing solr documents + * + * This method appears to re-set the data package field data into the + * document about to be updated in the solr index. Since packaging + * information is derived from the package document (resource map), this + * information is not present when processing a document contained in a data + * package. This method replaces those values from the existing solr index + * record for the document being processed. -- sroseboo, 1-18-12 + * + * @param indexDocument + * @return + * @throws IOException + * @throws EncoderException + * @throws XPathExpressionException + * @throws SAXException + * @throws ParserConfigurationException + * @throws SolrServerException + * @throws UnsupportedType + * @throws NotFound + * @throws NotImplemented + */ + // TODO:combine merge function with resourcemap merge function + + private SolrDoc mergeWithIndexedDocument(SolrDoc indexDocument) throws IOException, + EncoderException, XPathExpressionException, SolrServerException, ParserConfigurationException, SAXException, NotImplemented, NotFound, UnsupportedType { + //Retrieve the existing solr document from the solr server for the id. If it doesn't exist, null or empty solr doc will be returned. + SolrDoc indexedDocument = httpService.getSolrDocumentById(solrQueryUri, indexDocument.getIdentifier()); + /*int wait = new Double(Math.random() * 10000).intValue(); + System.out.println("++++++++++++++++++++++++++++ the wait time is " + wait); + try { + Thread.sleep(wait); + } catch (Exception e) { + + }*/ + if (indexedDocument == null || indexedDocument.getFieldList().size() <= 0) { + return indexDocument; + } else { + Vector mergeNeededFields = new Vector(); + for (SolrElementField field : indexedDocument.getFieldList()) { + if ((field.getName().equals(SolrElementField.FIELD_ISDOCUMENTEDBY) + || field.getName().equals(SolrElementField.FIELD_DOCUMENTS) || field + .getName().equals(SolrElementField.FIELD_RESOURCEMAP)) + && !indexDocument.hasFieldWithValue(field.getName(), field.getValue())) { + indexDocument.addField(field); + } else if (!copyFields.contains(field.getName()) && !indexDocument.hasField(field.getName()) && !isSystemMetadataField(field.getName())) { + // we don't merge the system metadata field since they can be removed. + // we don't merge the copyFields as well + log.debug("SolrIndex.mergeWithIndexedDocument - put the merge-needed existing solr field "+field.getName()+" with value "+field.getValue()+" from the solr server to a vector. We will merge it later."); + //indexDocument.addField(field); + mergeNeededFields.add(field);//record this name since we can have mutiple name/value for the same name. See https://projects.ecoinformatics.org/ecoinfo/issues/7168 + } + } + if(mergeNeededFields != null) { + for(SolrElementField field: mergeNeededFields) { + log.debug("SolrIndex.mergeWithIndexedDocument - merge the existing solr field "+field.getName()+" with value "+field.getValue()+" from the solr server to the currently processing document of "+indexDocument.getIdentifier()); + indexDocument.addField(field); + } + } + indexDocument.setMerged(true); + return indexDocument; + } + } + + /* + * If the given field name is a system metadata field. + */ + private boolean isSystemMetadataField(String fieldName) { + boolean is = false; + if (fieldName != null && !fieldName.trim().equals("") && sysmetaSolrFields != null) { + for(ISolrField field : sysmetaSolrFields) { + if(field != null && field.getName() != null && field.getName().equals(fieldName)) { + log.debug("SolrIndex.isSystemMetadataField - the field name "+fieldName+" matches one record of system metadata field list. It is a system metadata field."); + is = true; + break; + } + } + } + return is; + } + + + /** + * Check the parameters of the insert or update methods. + * @param pid + * @param systemMetadata + * @param data + * @throws SolrServerException + */ + private void checkParams(Identifier pid, SystemMetadata systemMetadata, String objectPath) throws InvalidRequest { + if(pid == null || pid.getValue() == null || pid.getValue().trim().equals("")) { + throw new InvalidRequest("0000", "The identifier of the indexed document should not be null or blank."); + } + if(systemMetadata == null) { + throw new InvalidRequest("0000", "The system metadata of the indexed document "+pid.getValue()+ " should not be null."); + } + /*if(objectPath == null) { + throw new SolrServerException("The indexed document itself for pid "+pid.getValue()+" should not be null."); + }*/ + } + + /** + * Insert the indexes for a document. + * @param pid the id of this document + * @param systemMetadata the system metadata associated with the data object + * @param data the path to the object file itself + * @throws SolrServerException + * @throws MarshallingException + * @throws EncoderException + * @throws UnsupportedType + * @throws NotFound + * @throws NotImplemented + * @throws InvalidRequest + */ + private void insert(Identifier pid, SystemMetadata systemMetadata, String objectPath, boolean isSysmetaChangeOnly) + throws IOException, SAXException, ParserConfigurationException, InvalidRequest, + XPathExpressionException, SolrServerException, MarshallingException, EncoderException, NotImplemented, NotFound, UnsupportedType { + checkParams(pid, systemMetadata, objectPath); + log.debug("SolrIndex.insert - trying to insert the solrDoc for object "+pid.getValue()); + long start = System.currentTimeMillis(); + Map docs = process(pid.getValue(), systemMetadata, objectPath, isSysmetaChangeOnly); + long end = System.currentTimeMillis(); + log.info("SolrIndex.insert - the subprocessor processing time of " + pid.getValue() + " is " + (end-start) + " milliseconds."); + //transform the Map to the SolrInputDocument which can be used by the solr server + if(docs != null) { + start = System.currentTimeMillis(); + Set ids = docs.keySet(); + for(String id : ids) { + if(id != null) { + SolrDoc doc = docs.get(id); + insertToIndex(doc); + log.debug("SolrIndex.insert - inserted the solr-doc object of pid "+id+", which relates to object "+pid.getValue()+", into the solr server."); + } + + } + end = System.currentTimeMillis(); + log.info("SolrIndex.insert - finished to insert the solrDoc to the solr server for object " + pid.getValue() + + " and it took " + (end-start) + " milliseconds."); + } else { + log.debug("SolrIndex.insert - the genered solrDoc is null. So we will not index the object "+pid.getValue()); + } + } + + /* + * Insert a SolrDoc to the solr server. + */ + private void insertToIndex(SolrDoc doc) throws SolrServerException, IOException { + Vector docs = new Vector(); + docs.add(doc); + SolrElementAdd addCommand = new SolrElementAdd(docs); + httpService.sendUpdate(solrIndexUri, addCommand, "UTF-8"); + } + + + /*private void insertToIndex(SolrDoc doc) throws SolrServerException, IOException { + if(doc != null ) { + SolrInputDocument solrDoc = new SolrInputDocument(); + List list = doc.getFieldList(); + if(list != null) { + //solrDoc.addField(METACATPIDFIELD, pid); + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + SolrElementField field = iterator.next(); + if(field != null) { + String value = field.getValue(); + String name = field.getName(); + log.trace("SolrIndex.insertToIndex - add name/value pair - "+name+"/"+value); + solrDoc.addField(name, value); + } + } + } + if(!solrDoc.isEmpty()) { + try { + UpdateResponse response = solrServer.add(solrDoc); + solrServer.commit(); + } catch (SolrServerException e) { + throw e; + } catch (IOException e) { + throw e; + } + //System.out.println("=================the response is:\n"+response.toString()); + } + } + }*/ + + /** + * Update the solr index. This method handles the three scenarios: + * 1. Remove an existing doc - if the the system metadata shows the value of the archive is true, + * remove the index for the previous version(s) and generate new index for the doc. + * 2. Add a new doc - if the system metadata shows the value of the archive is false, generate the + * index for the doc. + * @throws NotFound + * @throws ServiceFailure + * @throws NotImplemented + * @throws NotAuthorized + * @throws InvalidToken + * @throws EncoderException + * @throws MarshallingException + * @throws SolrServerException + * @throws ParserConfigurationException + * @throws SAXException + * @throws UnsupportedType + * @throws XPathExpressionException + * @throws InterruptedException + * @throws IOException + * @throws InvalidRequest + * @throws IllegalAccessException + * @throws InstantiationException + */ + public void update(Identifier pid, String relativePath, boolean isSysmetaChangeOnly) throws InvalidToken, NotAuthorized, + NotImplemented, ServiceFailure, NotFound, XPathExpressionException, UnsupportedType, + SAXException, ParserConfigurationException, SolrServerException, MarshallingException, + EncoderException, InterruptedException, IOException, InvalidRequest, InstantiationException, IllegalAccessException { + log.debug("SolrIndex.update - trying to update(insert or remove) solr index of object "+pid.getValue()); + String objectPath = null; + SystemMetadata systemMetadata = ObjectManager.getInstance().getSystemMetadata(pid.getValue(), relativePath); + objectPath = ObjectManager.getInstance().getFilePath(relativePath, systemMetadata.getFormatId().getValue()); + try { + insert(pid, systemMetadata, objectPath, isSysmetaChangeOnly); + } catch (SolrServerException e) { + if (e.getMessage().contains(VERSION_CONFLICT) && VERSION_CONFLICT_MAX_ATTEMPTS > 0) { + log.info("SolrIndex.update - Indexer grabbed an older verion (version conflict) of the solr doc for object " + + pid.getValue() + ". It will try " + VERSION_CONFLICT_MAX_ATTEMPTS + " to fix the issues"); + for (int i=0; i docsToUpdate = getUpdatedSolrDocsByRemovingResourceMap(pid); + if (docsToUpdate != null && !docsToUpdate.isEmpty()) { + //SolrElementAdd addCommand = new SolrElementAdd(docsToUpdate); + //httpService.sendUpdate(solrIndexUri, addCommand); + for(SolrDoc doc : docsToUpdate) { + //deleteDocFromIndex(doc.getIdentifier()); + insertToIndex(doc); + } + } + break; + } catch (SolrServerException e) { + if (e.getMessage().contains(VERSION_CONFLICT) && VERSION_CONFLICT_MAX_ATTEMPTS > 0) { + log.info("SolrIndex.removeDataPackage - Indexer grabbed an older verion (version conflict) of the solr doc for object" + + ". It will try " + (VERSION_CONFLICT_MAX_ATTEMPTS - i )+ " to fix the issues"); + } else { + throw e; + } + } + } + } + + /* + * Get the list of the solr doc which need to be updated because the removal of the resource map + */ + private List getUpdatedSolrDocsByRemovingResourceMap(String resourceMapId) + throws UnsupportedType, NotFound, SolrServerException, ParserConfigurationException, SAXException, MalformedURLException, IOException, XPathExpressionException, EncoderException { + List updatedSolrDocs = null; + if (resourceMapId != null && !resourceMapId.trim().equals("")) { + /*List docsContainResourceMap = httpService.getDocumentsByResourceMap( + solrQueryUri, resourceMapId);*/ + List docsContainResourceMap = httpService.getDocumentsByResourceMap(solrQueryUri, resourceMapId); + updatedSolrDocs = removeResourceMapRelationship(docsContainResourceMap, + resourceMapId); + } + return updatedSolrDocs; + } + + /* + * Get the list of the solr doc which need to be updated because the removal of the resource map + */ + private List removeResourceMapRelationship(List docsContainResourceMap, + String resourceMapId) throws XPathExpressionException, IOException { + List totalUpdatedSolrDocs = new ArrayList(); + if (docsContainResourceMap != null && !docsContainResourceMap.isEmpty()) { + for (SolrDoc doc : docsContainResourceMap) { + List updatedSolrDocs = new ArrayList(); + List resourceMapIdStrs = doc + .getAllFieldValues(SolrElementField.FIELD_RESOURCEMAP); + List dataIdStrs = doc + .getAllFieldValues(SolrElementField.FIELD_DOCUMENTS); + List metadataIdStrs = doc + .getAllFieldValues(SolrElementField.FIELD_ISDOCUMENTEDBY); + if ((dataIdStrs == null || dataIdStrs.isEmpty()) + && (metadataIdStrs == null || metadataIdStrs.isEmpty())) { + // only has resourceMap field, doesn't have either documentBy or documents fields. + // so we only remove the resource map field. + doc.removeFieldsWithValue(SolrElementField.FIELD_RESOURCEMAP, resourceMapId); + updatedSolrDocs.add(doc); + } else if ((dataIdStrs != null && !dataIdStrs.isEmpty()) + && (metadataIdStrs == null || metadataIdStrs.isEmpty())) { + //The solr doc is for a metadata object since the solr doc documents data files + updatedSolrDocs = removeAggregatedItems(resourceMapId, doc, resourceMapIdStrs, + dataIdStrs, SolrElementField.FIELD_DOCUMENTS); + } else if ((dataIdStrs == null || dataIdStrs.isEmpty()) + && (metadataIdStrs != null && !metadataIdStrs.isEmpty())) { + //The solr doc is for a data object since it documentedBy elements. + updatedSolrDocs = removeAggregatedItems(resourceMapId, doc, resourceMapIdStrs, + metadataIdStrs, SolrElementField.FIELD_ISDOCUMENTEDBY); + } else if ((dataIdStrs != null && !dataIdStrs.isEmpty()) + && (metadataIdStrs != null && !metadataIdStrs.isEmpty())){ + // both metadata and data for one object + List solrDocsRemovedDocuments = removeAggregatedItems(resourceMapId, doc, resourceMapIdStrs, + dataIdStrs, SolrElementField.FIELD_DOCUMENTS); + List solrDocsRemovedDocumentBy = removeAggregatedItems(resourceMapId, doc, resourceMapIdStrs, + metadataIdStrs, SolrElementField.FIELD_ISDOCUMENTEDBY); + updatedSolrDocs = mergeUpdatedSolrDocs(solrDocsRemovedDocumentBy, solrDocsRemovedDocuments); + } + //move them to the final result + if(updatedSolrDocs != null) { + for(SolrDoc updatedDoc: updatedSolrDocs) { + totalUpdatedSolrDocs.add(updatedDoc); + } + } + + } + + } + return totalUpdatedSolrDocs; + } + + /* + * Process the list of ids of the documentBy/documents in a slor doc. + */ + private List removeAggregatedItems(String targetResourceMapId, SolrDoc doc, + List resourceMapIdsInDoc, List aggregatedItemsInDoc, String fieldNameRemoved) { + List updatedSolrDocs = new ArrayList(); + if (doc != null && resourceMapIdsInDoc != null && aggregatedItemsInDoc != null + && fieldNameRemoved != null) { + if (resourceMapIdsInDoc.size() == 1) { + //only has one resource map. remove the resource map. also remove the documentBy + doc.removeFieldsWithValue(SolrElementField.FIELD_RESOURCEMAP, targetResourceMapId); + doc.removeAllFields(fieldNameRemoved); + updatedSolrDocs.add(doc); + } else if (resourceMapIdsInDoc.size() > 1) { + //we have multiple resource maps. We should match them. + Map ids = matchResourceMapsAndItems(doc.getIdentifier(), + targetResourceMapId, resourceMapIdsInDoc, aggregatedItemsInDoc, fieldNameRemoved); + if (ids != null) { + for (String id : ids.keySet()) { + doc.removeFieldsWithValue(fieldNameRemoved, id); + } + } + doc.removeFieldsWithValue(SolrElementField.FIELD_RESOURCEMAP, + targetResourceMapId); + updatedSolrDocs.add(doc); + /*if (aggregatedItemsInDoc.size() > 1) { + + + } else { + //multiple resource map aggregate same metadata and data. Just remove the resource map + doc.removeFieldsWithValue(SolrElementField.FIELD_RESOURCEMAP, + targetResourceMapId); + updatedSolrDocs.add(doc); + }*/ + } + } + return updatedSolrDocs; + } + + /* + * Return a map of mapping aggregation id map the target resourceMapId. + * This will look the aggregation information in another side - If the targetId + * is a metadata object, we will look the data objects which it describes; If + * the targetId is a data object, we will look the metadata object which documents it. + */ + private Map matchResourceMapsAndItems(String targetId, + String targetResourceMapId, List originalResourceMaps, List aggregatedItems, String fieldName) { + Map map = new HashMap(); + if (targetId != null && targetResourceMapId != null && aggregatedItems != null + && fieldName != null) { + String newFieldName = null; + if (fieldName.equals(SolrElementField.FIELD_ISDOCUMENTEDBY)) { + newFieldName = SolrElementField.FIELD_DOCUMENTS; + } else if (fieldName.equals(SolrElementField.FIELD_DOCUMENTS)) { + newFieldName = SolrElementField.FIELD_ISDOCUMENTEDBY; + } + if (newFieldName != null) { + for (String item : aggregatedItems) { + SolrDoc doc = null; + try { + doc = httpService.getSolrDocumentById(solrQueryUri, item); + List fieldValues = doc.getAllFieldValues(newFieldName); + List resourceMapIds = doc + .getAllFieldValues(SolrElementField.FIELD_RESOURCEMAP); + if ((fieldValues != null && fieldValues.contains(targetId)) + && (resourceMapIds != null && resourceMapIds + .contains(targetResourceMapId))) { + //okay, we found the target aggregation item id and the resource map id + //in this solr doc. However, we need check if another resource map with different + //id but specify the same relationship. If we have the id(s), we should not + // remove the documents( or documentBy) element since we need to preserve the + // relationship for the remain resource map. + boolean hasDuplicateIds = false; + if(originalResourceMaps != null) { + for(String id :resourceMapIds) { + if (originalResourceMaps.contains(id) && !id.equals(targetResourceMapId)) { + hasDuplicateIds = true; + break; + } + } + } + if(!hasDuplicateIds) { + map.put(item, targetResourceMapId); + } + + } + } catch (Exception e) { + log.warn("SolrIndex.matchResourceMapsAndItems - can't get the solrdoc for the id " + + item + " since " + e.getMessage()); + } + } + } + } + return map; + } + + + /* + * Merge two list of updated solr docs. removedDocumentBy has the correct information about documentBy element. + * removedDocuments has the correct information about the documents element. + * So we go through the two list and found the two docs having the same identifier. + * Get the list of the documents value from the one in the removedDoucments (1). + * Remove all values of documents from the one in the removedDocumentBy. + * Then copy the list of documents value from (1) to to the one in the removedDocumentBy. + */ + private List mergeUpdatedSolrDocs(ListremovedDocumentBy, ListremovedDocuments) { + List mergedDocuments = new ArrayList(); + if(removedDocumentBy == null || removedDocumentBy.isEmpty()) { + mergedDocuments = removedDocuments; + } else if (removedDocuments == null || removedDocuments.isEmpty()) { + mergedDocuments = removedDocumentBy; + } else { + int sizeOfDocBy = removedDocumentBy.size(); + int sizeOfDocs = removedDocuments.size(); + for(int i=sizeOfDocBy-1; i>= 0; i--) { + SolrDoc docInRemovedDocBy = removedDocumentBy.get(i); + for(int j= sizeOfDocs-1; j>=0; j--) { + SolrDoc docInRemovedDocs = removedDocuments.get(j); + if(docInRemovedDocBy.getIdentifier().equals(docInRemovedDocs.getIdentifier())) { + //find the same doc in both list. let's merge them. + //first get all the documents element from the docWithDocs(it has the correct information about the documents element) + List idsInDocuments = docInRemovedDocs.getAllFieldValues(SolrElementField.FIELD_DOCUMENTS); + docInRemovedDocBy.removeAllFields(SolrElementField.FIELD_DOCUMENTS);//clear out any documents element in docInRemovedDocBy + //add the Documents element from the docInRemovedDocs if it has any. + // The docInRemovedDocs has the correct information about the documentBy. Now it copied the correct information of the documents element. + // So docInRemovedDocs has both correct information about the documentBy and documents elements. + if(idsInDocuments != null) { + for(String id : idsInDocuments) { + if(id != null && !id.trim().equals("")) { + docInRemovedDocBy.addField(new SolrElementField(SolrElementField.FIELD_DOCUMENTS, id)); + } + + } + } + //intersect the resource map ids. + List resourceMapIdsInWithDocs = docInRemovedDocs.getAllFieldValues(SolrElementField.FIELD_RESOURCEMAP); + List resourceMapIdsInWithDocBy = docInRemovedDocBy.getAllFieldValues(SolrElementField.FIELD_RESOURCEMAP); + docInRemovedDocBy.removeAllFields(SolrElementField.FIELD_RESOURCEMAP); + Collection resourceMapIds = CollectionUtils.union(resourceMapIdsInWithDocs, resourceMapIdsInWithDocBy); + if(resourceMapIds != null) { + for(Object idObj : resourceMapIds) { + String id = (String)idObj; + docInRemovedDocBy.addField(new SolrElementField(SolrElementField.FIELD_RESOURCEMAP, id)); + } + } + //we don't need do anything about the documentBy elements since the docInRemovedDocBy has the correct information. + mergedDocuments.add(docInRemovedDocBy); + //delete the two documents from the list + removedDocumentBy.remove(i); + removedDocuments.remove(j); + break; + } + + } + } + // when we get there, if the two lists are empty, this will be a perfect merge. However, if something are left. we + //just put them in. + for(SolrDoc doc: removedDocumentBy) { + mergedDocuments.add(doc); + } + for(SolrDoc doc: removedDocuments) { + mergedDocuments.add(doc); + } + } + return mergedDocuments; + } + + + /* + * Remove a pid which is part of resource map. + */ + private void removeFromDataPackage(String pid) throws XPathExpressionException, IOException, EncoderException, SolrServerException { + SolrDoc indexedDoc = httpService.getSolrDocumentById(solrQueryUri, pid); + deleteDocFromIndex(pid); + List documents = indexedDoc.getAllFieldValues(SolrElementField.FIELD_DOCUMENTS); + if (documents != null && !documents.isEmpty()) { + for (String documentsValue : documents) { + for (int i=0; i 0) { + log.info("SolrIndex.removeFromDataPackage - Indexer grabbed an older verion (version conflict) of the solr doc for object " + + documentsValue + ". It will try " + (VERSION_CONFLICT_MAX_ATTEMPTS - i )+ " to fix the issues"); + } else { + throw e; + } + } + } + } + } + + List documentedBy = indexedDoc.getAllFieldValues(SolrElementField.FIELD_ISDOCUMENTEDBY); + if (documentedBy != null && !documentedBy.isEmpty()) { + for (String documentedByValue : documentedBy) { + for (int i=0; i 0) { + log.info("SolrIndex.removeFromDataPackage - Indexer grabbed an older verion (version conflict) of the solr doc for object " + + documentedByValue + ". It will try " + (VERSION_CONFLICT_MAX_ATTEMPTS - i )+ " to fix the issues"); + } else { + throw e; + } + } + } + } + } + } + + /* + * Remove a pid from the solr index + */ + /*private synchronized void removeFromIndex(String identifier) throws Exception { + + + Map docs = new HashMap(); + + for (IDocumentDeleteSubprocessor deleteSubprocessor : deleteSubprocessors) { + docs.putAll(deleteSubprocessor.processDocForDelete(identifier, docs)); + } + List docsToUpdate = new ArrayList(); + List idsToIndex = new ArrayList(); + for (String idToUpdate : docs.keySet()) { + if (docs.get(idToUpdate) != null) { + docsToUpdate.add(docs.get(idToUpdate)); + } else { + idsToIndex.add(idToUpdate); + } + } + + // update the docs we have + for (SolrDoc docToUpdate : docsToUpdate) { + insertToIndex(docToUpdate); + } + + // delete this one + deleteDocFromIndex(identifier); + + // index the rest + //TODO: we need to figure out how to get the file path + for (String idToIndex : idsToIndex) { + Identifier pid = new Identifier(); + pid.setValue(idToIndex); + SystemMetadata sysMeta = DistributedMapsFactory.getSystemMetadata(idToIndex); + if (SolrDoc.visibleInIndex(sysMeta)) { + String objectPath = DistributedMapsFactory.getObjectPathMap().get(pid); + boolean isSysmetaChangeOnlyEvent = false; + insert(pid, sysMeta, objectPath, isSysmetaChangeOnlyEvent); + } + } + + }*/ + + private void deleteDocFromIndex(String pid) throws IOException { + if (pid != null && !pid.trim().equals("")) { + try { + //solrServer.deleteById(pid); + //solrServer.commit(); + httpService.sendSolrDelete(pid, solrIndexUri); + //} catch (SolrServerException e) { + //throw e; + + } catch (IOException e) { + throw e; + } + + } + + } + + + /** + * Set the http service + * @param service + */ + public void setHttpService(HTTPService service) { + this.httpService = service; + } + + /** + * Get the http service + * @return the http service + */ + public HTTPService getHttpService() { + return httpService; + } + +} diff --git a/src/main/java/org/dataone/cn/indexer/SolrIndexService.java b/src/main/java/org/dataone/cn/indexer/SolrIndexService.java deleted file mode 100644 index e9956dcf..00000000 --- a/src/main/java/org/dataone/cn/indexer/SolrIndexService.java +++ /dev/null @@ -1,408 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.indexer; - -import java.io.ByteArrayInputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPathExpressionException; - -import org.apache.commons.codec.EncoderException; -import org.apache.commons.io.output.ByteArrayOutputStream; -import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.index.util.PerformanceLogger; -import org.dataone.cn.indexer.parser.IDocumentDeleteSubprocessor; -import org.dataone.cn.indexer.parser.IDocumentSubprocessor; -import org.dataone.cn.indexer.solrhttp.HTTPService; -import org.dataone.cn.indexer.solrhttp.SolrDoc; -import org.dataone.cn.indexer.solrhttp.SolrElementAdd; -import org.dataone.cn.indexer.solrhttp.SolrElementField; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v2.SystemMetadata; -import org.dataone.service.util.TypeMarshaller; -import org.springframework.beans.factory.annotation.Autowired; -import org.xml.sax.SAXException; - -/** - * Top level document processing class. - * - * Contains collection of document sub-processors which are used to mine search - * index data from document objects. Each sub-processor is configured via spring - * to collect data from different types of documents (by formatId). - * - * There should only be one instance of XPathDocumentParser in place at a time - * since it performs updates on the SOLR index and transactions on SOLR are at - * the server level - so if multiple threads write and commit then things could - * get messy. - * - */ - -public class SolrIndexService { - - private static Logger log = Logger.getLogger(SolrIndexService.class); - private static final String OUTPUT_ENCODING = "UTF-8"; - private List subprocessors = null; - private List deleteSubprocessors = null; - private IDocumentSubprocessor systemMetadataProcessor = null; - - @Autowired - private HTTPService httpService = null; - - @Autowired - private String solrIndexUri = null; - - @Autowired - private String solrQueryUri = null; - - private PerformanceLogger perfLog = PerformanceLogger.getInstance(); - - public SolrIndexService() { - } - - public void removeFromIndex(String identifier) throws Exception { - - Map docs = new HashMap(); - - for (IDocumentDeleteSubprocessor deleteSubprocessor : getDeleteSubprocessors()) { - docs.putAll(deleteSubprocessor.processDocForDelete(identifier, docs)); - } - List docsToUpdate = new ArrayList(); - List idsToIndex = new ArrayList(); - for (String idToUpdate : docs.keySet()) { - if (docs.get(idToUpdate) != null) { - docsToUpdate.add(docs.get(idToUpdate)); - } else { - idsToIndex.add(idToUpdate); - } - } - - SolrElementAdd addCommand = getAddCommand(docsToUpdate); - sendCommand(addCommand); - - deleteDocFromIndex(identifier); - - for (String idToIndex : idsToIndex) { - Identifier pid = new Identifier(); - pid.setValue(idToIndex); - SystemMetadata sysMeta = HazelcastClientFactory.getSystemMetadataMap().get(pid); - if (SolrDoc.visibleInIndex(sysMeta)) { - String objectPath = HazelcastClientFactory.getObjectPathMap().get(pid); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - TypeMarshaller.marshalTypeToOutputStream(sysMeta, os); - insertIntoIndex(idToIndex, new ByteArrayInputStream(os.toByteArray()), objectPath); - } - } - } - - public void removeFromIndex(List tasks) throws Exception { - - for (IndexTask indexTask : tasks) { - String identifier = indexTask.getPid(); - try { - removeFromIndex(identifier); - } catch (Exception e) { - log.error("Unable to remove from index: " + identifier, e); - } - } - - /* - * TODO test: - - SolrElementAdd addCommand = new SolrElementAdd(); - List identifiersToDelete = new ArrayList(); - List idsToIndex = new ArrayList(); - List tasksToIndex = new ArrayList(); - - for (IndexTask indexTask : tasks) { - Map docs = new HashMap(); - String identifier = indexTask.getPid(); - - for (IDocumentDeleteSubprocessor deleteSubprocessor : getDeleteSubprocessors()) { - docs.putAll(deleteSubprocessor.processDocForDelete(identifier, docs)); - } - List docsToUpdate = new ArrayList(); - - for (String idToUpdate : docs.keySet()) { - if (docs.get(idToUpdate) != null) { - docsToUpdate.add(docs.get(idToUpdate)); - } else { - idsToIndex.add(idToUpdate); - } - } - - SolrElementAdd newAddCommand = getAddCommand(docsToUpdate); - addCommand = mergeAddCommands(addCommand, newAddCommand); - - identifiersToDelete.add(identifier); - - for (String idToIndex : idsToIndex) { - Identifier pid = new Identifier(); - pid.setValue(idToIndex); - SystemMetadata sysMeta = HazelcastClientFactory.getSystemMetadataMap().get(pid); - if (SolrDoc.visibleInIndex(sysMeta)) { - String objectPath = HazelcastClientFactory.getObjectPathMap().get(pid); - IndexTask task = new IndexTask(sysMeta, objectPath); - tasksToIndex.add(task); - } - } - } - - sendCommand(addCommand); - httpService.sendSolrDeletes(identifiersToDelete); - insertIntoIndex(tasksToIndex); - */ - } - - /** - * Given a PID, system metadata input stream, and an optional document - * path, populate the set of SOLR fields for the document. - * - * @param id - * @param systemMetaDataStream - * @param objectPath - * @return - * @throws IOException - * @throws SAXException - * @throws ParserConfigurationException - * @throws XPathExpressionException - * @throws EncoderException - */ - public SolrElementAdd processObject(String id, InputStream systemMetaDataStream, - String objectPath) throws IOException, SAXException, ParserConfigurationException, - XPathExpressionException, EncoderException, Exception { - - long processObjStart = System.currentTimeMillis(); - - Map docs = new HashMap(); - try { - long sysmetaProcStart = System.currentTimeMillis(); - docs = systemMetadataProcessor.processDocument(id, docs, systemMetaDataStream); - perfLog.log(systemMetadataProcessor.getClass().getSimpleName() + ".processDocument() processing sysmeta for id "+id, System.currentTimeMillis() - sysmetaProcStart); - } catch (Exception e) { - log.error("Error parsing system metadata for id: " + id + e.getMessage(), e); - } - - if (objectPath != null) { - String formatId = docs.get(id).getFirstFieldValue(SolrElementField.FIELD_OBJECTFORMAT); - int i=1; - for (IDocumentSubprocessor subprocessor : getSubprocessors()) { - if (subprocessor.canProcess(formatId)) { - try { - // note that resource map processing touches all objects - // referenced by the resource map. - long startFechingFile = System.currentTimeMillis(); - FileInputStream objectStream = new FileInputStream(objectPath); - perfLog.log("Loop "+i+". SolrIndexService.processObject() fetch file for id "+id, System.currentTimeMillis() - startFechingFile); - if (!objectStream.getFD().valid()) { - log.error("Could not load OBJECT file for ID,Path=" + id + ", " - + objectPath); - } else { - long scimetaProcStart = System.currentTimeMillis(); - docs = subprocessor.processDocument(id, docs, objectStream); - perfLog.log(String.format( - "Loop %d. SolrIndexService.processObject() " - + "%s.processDocument() total subprocessor processing time for id %s with format: %s", - i, - subprocessor.getClass().getSimpleName(), - id, - formatId), - System.currentTimeMillis() - scimetaProcStart); - } - } catch (Exception e) { - log.warn(String.format("The subprocessor %s can't process the id %s since %s. " + - "However, the index still can be achieved without this part of information provided by the processor.", - subprocessor.getClass().getName(), - id, - e.getMessage()), - e); - } - } - i++; - } - } else { - log.warn("The optional objectPath for pid " + id + " is null, so skipping processing with content subprocessors"); - } - - long mergeProcStart = System.currentTimeMillis(); - Map mergedDocs = new HashMap(); - int index =1; - for (SolrDoc mergeDoc : docs.values()) { - int innerIndex =1; - for (IDocumentSubprocessor subprocessor : getSubprocessors()) { - long before = System.currentTimeMillis(); - mergeDoc = subprocessor.mergeWithIndexedDocument(mergeDoc); - perfLog.log("Outer loop "+index+", inner loop"+innerIndex+" SolrIndexService.processObject() merging docs for id "+id, System.currentTimeMillis() - before); - innerIndex++; - } - mergedDocs.put(mergeDoc.getIdentifier(), mergeDoc); - index++; - } - perfLog.log("Total - SolrIndexService.processObject() merging docs for id "+id, System.currentTimeMillis() - mergeProcStart); - - SolrElementAdd addCommand = getAddCommand(new ArrayList(mergedDocs.values())); - if (log.isTraceEnabled()) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - addCommand.serialize(baos, OUTPUT_ENCODING); - log.trace(baos.toString()); - } - - perfLog.log("SolrIndexService.processObject() total processing time for id " + id, System.currentTimeMillis() - processObjStart); - return addCommand; - } - - /** - * Given a PID, system metadata input stream, and an optional document - * path, populate the set of SOLR fields for the document and update the - * index. Note that if the document is a resource map, then records that it - * references will be updated as well. - * - * @param id - * @param systemMetaDataStream - * @param objectPath - * @return - * @throws IOException - * @throws SAXException - * @throws ParserConfigurationException - * @throws XPathExpressionException - * @throws EncoderException - */ - public void insertIntoIndex(String id, InputStream systemMetaDataStream, String objectPath) - throws IOException, SAXException, ParserConfigurationException, - XPathExpressionException, EncoderException, Exception { - - // get the add command for solr - SolrElementAdd addCommand = processObject(id, systemMetaDataStream, objectPath); - - // send it - long solrAddStart = System.currentTimeMillis(); - sendCommand(addCommand); - perfLog.log("SolrIndexService.sendCommand(SolrElementAdd) adding docs into Solr index for id "+id, System.currentTimeMillis() - solrAddStart); - } - - public void insertIntoIndex(List tasks) - throws IOException, SAXException, ParserConfigurationException, - XPathExpressionException, EncoderException, Exception { - - SolrElementAdd batchAddCommand = new SolrElementAdd(); - - for (IndexTask task : tasks) { - InputStream smdStream = new ByteArrayInputStream(task.getSysMetadata().getBytes()); - - // get the add command for solr - SolrElementAdd addCommand = processObject(task.getPid(), smdStream, task.getObjectPath()); - batchAddCommand = mergeAddCommands(batchAddCommand, addCommand); - } - // send batch add command - long solrAddStart = System.currentTimeMillis(); - sendCommand(batchAddCommand); - perfLog.log("SolrIndexService.sendCommand(SolrElementAdd) batch adding (" + tasks.size() + ") docs into Solr index", System.currentTimeMillis() - solrAddStart); - } - - private SolrElementAdd mergeAddCommands(SolrElementAdd original, SolrElementAdd addition) { - if (original.getDocList() == null) - original.setDocList(new ArrayList()); - if (addition.getDocList() == null) - addition.setDocList(new ArrayList()); - - original.getDocList().addAll(addition.getDocList()); - - return original; - } - - private void sendCommand(SolrElementAdd addCommand) throws IOException { - HTTPService service = getHttpService(); - service.sendUpdate(getSolrindexUri(), addCommand, OUTPUT_ENCODING); - } - - private SolrElementAdd getAddCommand(List docs) { - return new SolrElementAdd(docs); - } - - private void deleteDocFromIndex(String identifier) { - httpService.sendSolrDelete(identifier); - } - - public String getSolrindexUri() { - return solrIndexUri; - } - - public void setSolrIndexUri(String solrindexUri) { - this.solrIndexUri = solrindexUri; - } - - public void setHttpService(HTTPService service) { - this.httpService = service; - } - - public HTTPService getHttpService() { - return httpService; - } - - public String getSolrQueryUri() { - return solrQueryUri; - } - - public void setSolrQueryUri(String solrQueryUri) { - this.solrQueryUri = solrQueryUri; - } - - public List getSubprocessors() { - if (this.subprocessors == null) { - this.subprocessors = new ArrayList(); - } - return subprocessors; - } - - public List getDeleteSubprocessors() { - if (this.deleteSubprocessors == null) { - this.deleteSubprocessors = new ArrayList(); - } - return deleteSubprocessors; - } - - public void setSubprocessors(List subprocessorList) { - this.subprocessors = subprocessorList; - } - - public void setDeleteSubprocessors(List deleteSubprocessorList) { - this.deleteSubprocessors = deleteSubprocessorList; - } - - public IDocumentSubprocessor getSystemMetadataProcessor() { - return systemMetadataProcessor; - } - - public void setSystemMetadataProcessor(IDocumentSubprocessor systemMetadataProcessor) { - this.systemMetadataProcessor = systemMetadataProcessor; - } - -} diff --git a/src/main/java/org/dataone/cn/indexer/annotation/AnnotatorSubprocessor.java b/src/main/java/org/dataone/cn/indexer/annotation/AnnotatorSubprocessor.java index 8a260d78..c33bf97f 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/AnnotatorSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/AnnotatorSubprocessor.java @@ -19,13 +19,14 @@ import org.apache.commons.codec.EncoderException; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.parser.IDocumentSubprocessor; import org.dataone.cn.indexer.parser.ISolrDataField; import org.dataone.cn.indexer.parser.SubprocessorUtility; import org.dataone.cn.indexer.solrhttp.HTTPService; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; +import org.dataone.indexer.performance.PerformanceLogger; import org.dataone.cn.indexer.annotation.OntologyModelService; import org.springframework.beans.factory.annotation.Autowired; @@ -46,14 +47,11 @@ public class AnnotatorSubprocessor implements IDocumentSubprocessor { private static Logger log = Logger.getLogger(AnnotatorSubprocessor.class.getName()); - @Autowired private SubprocessorUtility processorUtility; - @Autowired private HTTPService httpService = null; - @Autowired - private String solrQueryUri = null; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); private PerformanceLogger perfLog = PerformanceLogger.getInstance(); @@ -86,6 +84,38 @@ public List getFieldList() { public void setFieldList(List fieldList) { this.fieldList = fieldList; } + + /** + * Set the http service + * @param service + */ + public void setHttpService(HTTPService service) { + this.httpService = service; + } + + /** + * Get the http service + * @return the http service + */ + public HTTPService getHttpService() { + return httpService; + } + + /** + * Get the subprocessor utility object + * @return the subprocessor utility + */ + public SubprocessorUtility getProcessorUtility() { + return processorUtility; + } + + /** + * Set the subprocessor utility + * @param processorUtility the subprocessor utility object will be set + */ + public void setProcessorUtility(SubprocessorUtility processorUtility) { + this.processorUtility = processorUtility; + } /** * Returns true if subprocessor should be run against object diff --git a/src/main/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessor.java b/src/main/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessor.java index c3df77fe..3d878511 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessor.java @@ -16,12 +16,12 @@ import org.apache.commons.codec.EncoderException; import org.apache.log4j.Logger; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.parser.IDocumentSubprocessor; import org.dataone.cn.indexer.parser.ISolrField; import org.dataone.cn.indexer.parser.SubprocessorUtility; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.indexer.performance.PerformanceLogger; import org.dataone.cn.indexer.XmlDocumentUtility; import org.springframework.beans.factory.annotation.Autowired; import org.w3c.dom.Document; @@ -43,7 +43,6 @@ public class EmlAnnotationSubprocessor implements IDocumentSubprocessor { private PerformanceLogger perfLog = PerformanceLogger.getInstance(); - @Autowired private SubprocessorUtility processorUtility; private List matchDocuments = null; @@ -96,8 +95,10 @@ public Map processDocument(String identifier, Map> expandedConcepts = OntologyModelService.getInstance().expandConcepts(field.getValue()); - + //long end = System.currentTimeMillis(); + //log.info("EmlAnnotation.processDocument - the time to get expandedConcepts is" + (end-start) + " milliseconds."); for (Map.Entry> expandedField: expandedConcepts.entrySet()) { for (String value: expandedField.getValue()) { if (!expandedFields.containsKey(field.getName())) { diff --git a/src/main/java/org/dataone/cn/indexer/annotation/OntologyModelService.java b/src/main/java/org/dataone/cn/indexer/annotation/OntologyModelService.java index 4485ba83..0c45cc32 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/OntologyModelService.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/OntologyModelService.java @@ -6,7 +6,11 @@ import java.util.HashMap; import java.util.HashSet; import java.io.File; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import org.apache.log4j.Logger; @@ -27,6 +31,9 @@ public class OntologyModelService { private static Logger log = Logger.getLogger(OntologyModelService.class); + private static String jarPrefix = "jar:file:"; + private static String jarAppendix = "!/"; + private static String filePrefix = "file:src/main/resources/"; private static OntologyModelService instance = null; private static OntModel ontModel = null; public static final String FIELD_ANNOTATION = "sem_annotation"; @@ -37,18 +44,21 @@ private OntologyModelService() {} public static OntologyModelService getInstance() { if (instance == null) { - instance = new OntologyModelService(); - - // Populate the ontology model with registered ontologies and alternate - // entries (local cache locations) - instance.init(); + synchronized(OntologyModelService.class) { + if (instance == null) { + instance = new OntologyModelService(); + // Populate the ontology model with registered ontologies and alternate + // entries (local cache locations) + instance.init(); + } + } } - + log.info("OntologyModelService.getInstance - the instance is " + instance.toString()); return instance; } private void init() { - log.debug(OntologyModelService.class.getName() + " init() called"); + log.info(OntologyModelService.class.getName() + " init() called"); if (ontModel != null) { return; @@ -73,6 +83,7 @@ private void init() { } protected Map> expandConcepts(String uri) { + long start_method = System.currentTimeMillis(); log.debug("expandConcepts " + uri); Map> conceptFields = new HashMap>(); @@ -99,14 +110,16 @@ protected Map> expandConcepts(String uri) { Query query = QueryFactory.create(q); QueryExecution qexec = QueryExecutionFactory.create(query, ontModel); ResultSet results = qexec.execSelect(); - + // each field might have multiple solution values String name = field.getName(); Set values = new HashSet(); - + long start = System.currentTimeMillis(); while (results.hasNext()) { QuerySolution solution = results.next(); log.debug("Solution SPARQL result: " + solution.toString()); + long end = System.currentTimeMillis(); + log.info("OntologyMondelService.expandConcepts - the time to execute results.hasNext() " + (end - start) + "milliseconds."); if (!solution.contains(name)) { continue; } @@ -119,6 +132,7 @@ protected Map> expandConcepts(String uri) { String value = solution.get(name).toString(); log.debug("Adding value " + value); values.add(value); + start = System.currentTimeMillis(); } conceptFields.put(name, values); @@ -126,7 +140,8 @@ protected Map> expandConcepts(String uri) { } catch (QueryException ex) { log.error("OntologyModelService.expandConcepts(" + uri + ") encountered an exception while querying."); } - + long end = System.currentTimeMillis(); + log.info("OntologyModelService.expandConcept - the total time for the method is " + (end -start_method) + " milliseconds."); return conceptFields; } @@ -154,7 +169,7 @@ public void setAltEntryList(Map entryList) { altEntryList = entryList; } - public void loadAltEntries() { + protected void loadAltEntries() { log.debug("OntologyModelService - Loading altEntries of size " + altEntryList.size()); OntDocumentManager ontManager = ontModel.getDocumentManager(); @@ -163,9 +178,49 @@ public void loadAltEntries() { // to grab imported OWL files in OWL files contained in the altEntries // list. I did this for speed and for security. ontManager.setProcessImports(false); - + + boolean firstEntry = true; + String prefix = null; for (Map.Entry entry: altEntryList.entrySet()) { - ontManager.addAltEntry(entry.getKey(), entry.getValue()); + String path = entry.getValue();//this is the relative path + if (firstEntry) { + firstEntry = false; + String jarFilePath = getJarFilePath(); + if (jarFilePath != null && !jarFilePath.trim().equals("")) { + //if the file path doesn't exist, we will try the jar file path + prefix = jarPrefix + jarFilePath + jarAppendix; + } else { + //the file exists and we will use the file path + prefix = filePrefix; + } + log.info("OntologyModelService.loadAltEntries - the final prefix for ontology files is " + prefix); + } + ontManager.addAltEntry(entry.getKey(), prefix + path); } } + + /** + * Get the current jar file path + * @return the jar file path + */ + protected String getJarFilePath() { + String jarPath = ""; + URL classResource = OntologyModelService.class.getResource(OntologyModelService.class.getSimpleName() + ".class"); + if (classResource == null) { + return jarPath; + } + String url = classResource.toString(); + log.info("OntologyModelService.getJarFilePrefix - the full path of the class is " + url); + if (url.startsWith(jarPrefix)) { + // extract 'file:......jarName.jar' part from the url string + String path = url.replaceAll("^jar:(file:.*[.]jar)!/.*", "$1"); + try { + jarPath = Paths.get(new URL(path).toURI()).toString(); + } catch (MalformedURLException | URISyntaxException e) { + jarPath = ""; + } + } + log.info("OntologyModelService.getJarFilePrefix - the full path of the jar file is " + jarPath); + return jarPath; + } } \ No newline at end of file diff --git a/src/main/java/org/dataone/cn/indexer/annotation/RdfXmlSubprocessor.java b/src/main/java/org/dataone/cn/indexer/annotation/RdfXmlSubprocessor.java index 8f2e19a8..4f1cb494 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/RdfXmlSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/RdfXmlSubprocessor.java @@ -34,7 +34,6 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.annotation.SparqlField; import org.dataone.cn.indexer.annotation.TripleStoreService; import org.dataone.cn.indexer.parser.IDocumentSubprocessor; @@ -43,6 +42,8 @@ import org.dataone.cn.indexer.solrhttp.HTTPService; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; +import org.dataone.indexer.performance.PerformanceLogger; import org.springframework.beans.factory.annotation.Autowired; import com.hp.hpl.jena.ontology.OntModel; @@ -74,13 +75,11 @@ public class RdfXmlSubprocessor implements IDocumentSubprocessor { private List fieldsToMerge = new ArrayList(); - @Autowired + private HTTPService httpService = null; - @Autowired - private String solrQueryUri = null; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); - @Autowired private SubprocessorUtility processorUtility; /** @@ -476,4 +475,37 @@ public List getFieldsToMerge() { public void setFieldsToMerge(List fieldsToMerge) { this.fieldsToMerge = fieldsToMerge; } + + /** + * Get the http service object + * @return the http service object + */ + public HTTPService getHttpService() { + return httpService; + } + + /** + * Set the http service object for this class + * @param httpService the object will be set + */ + public void setHttpService(HTTPService httpService) { + this.httpService = httpService; + } + + + /** + * Get the subprocessor utility + * @return the subprocessor utility object + */ + public SubprocessorUtility getProcessorUtility() { + return processorUtility; + } + + /** + * Set the subprocessor utility object for this class + * @param processorUtility the subprocessor utility object will be set + */ + public void setProcessorUtility(SubprocessorUtility processorUtility) { + this.processorUtility = processorUtility; + } } diff --git a/src/main/java/org/dataone/cn/indexer/annotation/RemoteAnnotatorSubprocessor.java b/src/main/java/org/dataone/cn/indexer/annotation/RemoteAnnotatorSubprocessor.java index b96d0a1f..94f4fa3c 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/RemoteAnnotatorSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/RemoteAnnotatorSubprocessor.java @@ -25,12 +25,12 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.parser.IDocumentSubprocessor; import org.dataone.cn.indexer.parser.ISolrDataField; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; import org.dataone.configuration.Settings; +import org.dataone.indexer.performance.PerformanceLogger; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.query.Dataset; diff --git a/src/main/java/org/dataone/cn/indexer/annotation/TripleStoreService.java b/src/main/java/org/dataone/cn/indexer/annotation/TripleStoreService.java index cdf71871..a2b1ff32 100644 --- a/src/main/java/org/dataone/cn/indexer/annotation/TripleStoreService.java +++ b/src/main/java/org/dataone/cn/indexer/annotation/TripleStoreService.java @@ -30,7 +30,7 @@ public static TripleStoreService getInstance() { public Dataset getDataset() throws IOException { String directory = Settings.getConfiguration().getString("index.tdb.directory", "./tdb"); - log.info("TripleStoreService.getDataset - the parent directory of the triple store location ================= is "+directory); + log.debug("TripleStoreService.getDataset - the parent directory of the triple store location ================= is "+directory); // for testing, delete the triplestore each time File dir = new File(directory); if (!dir.exists()) { diff --git a/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeConverter.java b/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeConverter.java index 21bfab77..23c2eb2e 100644 --- a/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeConverter.java +++ b/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeConverter.java @@ -28,7 +28,6 @@ public class MemberNodeServiceRegistrationTypeConverter implements IConverter { - @Autowired private MemberNodeServiceRegistrationTypeCache mnServiceRegistrationTypeCacheService; @Override @@ -44,5 +43,14 @@ public String convert(String data) { return data; } + + public MemberNodeServiceRegistrationTypeCache getMnServiceRegistrationTypeCacheService() { + return mnServiceRegistrationTypeCacheService; + } + + public void setMnServiceRegistrationTypeCacheService( + MemberNodeServiceRegistrationTypeCache mnServiceRegistrationTypeCacheService) { + this.mnServiceRegistrationTypeCacheService = mnServiceRegistrationTypeCacheService; + } } diff --git a/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeDocumentService.java b/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeDocumentService.java index fd44825a..a191272e 100644 --- a/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeDocumentService.java +++ b/src/main/java/org/dataone/cn/indexer/convert/MemberNodeServiceRegistrationTypeDocumentService.java @@ -46,9 +46,17 @@ public class MemberNodeServiceRegistrationTypeDocumentService { private static final String SERVICE_DOC_LOCATION_URL = Settings.getConfiguration().getString( "dataone.mn.registration.serviceType.url"); - @Autowired private HttpComponentsClientHttpRequestFactory httpRequestFactory; + public HttpComponentsClientHttpRequestFactory getHttpRequestFactory() { + return httpRequestFactory; + } + + public void setHttpRequestFactory( + HttpComponentsClientHttpRequestFactory httpRequestFactory) { + this.httpRequestFactory = httpRequestFactory; + } + public MemberNodeServiceRegistrationTypeDocumentService() { } diff --git a/src/main/java/org/dataone/cn/indexer/object/ObjectManager.java b/src/main/java/org/dataone/cn/indexer/object/ObjectManager.java new file mode 100644 index 00000000..f897903f --- /dev/null +++ b/src/main/java/org/dataone/cn/indexer/object/ObjectManager.java @@ -0,0 +1,393 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.cn.indexer.object; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Files; + +import org.apache.commons.io.FileUtils; +import org.apache.log4j.Logger; +import org.dataone.client.auth.AuthTokenSession; +import org.dataone.client.exception.ClientSideException; +import org.dataone.client.rest.HttpMultipartRestClient; +import org.dataone.client.rest.MultipartRestClient; +import org.dataone.client.v2.formats.ObjectFormatCache; +import org.dataone.client.v2.impl.MultipartCNode; +import org.dataone.client.v2.impl.MultipartD1Node; +import org.dataone.client.v2.impl.MultipartMNode; +import org.dataone.configuration.Settings; +import org.dataone.exceptions.MarshallingException; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.types.v1.Identifier; +import org.dataone.service.types.v1.Session; +import org.dataone.service.types.v2.ObjectFormat; +import org.dataone.service.types.v2.SystemMetadata; +import org.dataone.service.util.TypeMarshaller; + + +/** + * A class to get the file path and system metadata for an identifier + * @author tao + * + */ +public class ObjectManager { + private static ObjectManager manager = null; + private static String dataRootDir = Settings.getConfiguration().getString("index.data.root.directory"); + private static String documentRootDir = Settings.getConfiguration().getString("index.document.root.directory"); + private static String nodeBaseURL = Settings.getConfiguration().getString("dataone.mn.baseURL"); + private static String DataONEauthToken = null; + private static Logger logger = Logger.getLogger(ObjectManager.class); + private static final String TOKEN_VARIABLE_NAME = "DATAONE_AUTH_TOKEN"; + private static final String TOKEN_FILE_PATH_PROP_NAME = "dataone.nodeToken.file"; + private static final String SYSTEMMETA_FILE_NAME = "systemmetadata.xml"; + + private static MultipartD1Node d1Node = null; + private static Session session = null; + private static boolean ifDataAndDocRootSame = false; + + /** + * Private constructor + * @throws ServiceFailure + */ + private ObjectManager() throws ServiceFailure { + if (dataRootDir == null || dataRootDir.trim().equals("")) { + throw new ServiceFailure("0000", "The data root directory specified by the property index.data.root.directory is blank in the properties file"); + } + if (documentRootDir == null || documentRootDir.trim().equals("")) { + throw new ServiceFailure("0000", "The metadata root directory specified by the property index.document.root.directory is blank in the properties file"); + } + if (!Files.exists(FileSystems.getDefault().getPath(dataRootDir))) { + throw new ServiceFailure("0000", "The data root directory " + dataRootDir + + " specified in the properties file doesn't exist"); + } + if (!Files.exists(FileSystems.getDefault().getPath(documentRootDir))) { + throw new ServiceFailure("0000", "The document root directory " + documentRootDir + + " specified in the properties file doesn't exist"); + } + if (!dataRootDir.endsWith("/")) { + dataRootDir = dataRootDir + "/"; + } + if (!documentRootDir.endsWith("/")) { + documentRootDir = documentRootDir + "/"; + } + + if (documentRootDir.equals(dataRootDir)) { + ifDataAndDocRootSame = true; + } + logger.info("ObjectManager.constructor - the root document directory is " + + documentRootDir + " and the root data directory is " + dataRootDir + + " Are they same?" + ifDataAndDocRootSame); + if (d1Node == null) { + refreshD1Node(); + } else { + logger.info("ObjectManager ---NOT going to create the d1node with the url " + nodeBaseURL + + " since the ObjectManager already was assigned a d1node with the url " + d1Node.getNodeBaseServiceUrl()); + } + } + + /** + * Get an ObjectManager instance through the singleton pattern. + * @return the instance of ObjectManager + * @throws ServiceFailure + */ + public static ObjectManager getInstance() throws ServiceFailure { + if (manager == null) { + synchronized (ObjectManager.class) { + if (manager == null) { + manager = new ObjectManager(); + } + } + } + return manager; + } + + /** + * Get the absolute file path for a given relative path. If the relativePath is null or blank, + * null will be returned + * @param relativePath + * @param objectFormat + * @return the absolute file path + * @throws NotFound + */ + public String getFilePath(String relativePath, String objectFormat) throws NotFound { + String absolutePath = null; + if (relativePath != null && !relativePath.trim().equals("")) { + if (ifDataAndDocRootSame) { + absolutePath = documentRootDir + relativePath; + } else if (objectFormat != null && !objectFormat.trim().equals("")) { + ObjectFormat format =ObjectFormatCache.getInstance().getFormat(objectFormat); + if (format.getFormatType().equals("METADATA")) { + absolutePath = documentRootDir + relativePath; + } else { + absolutePath = dataRootDir + relativePath; + } + } + } + logger.debug("ObjectManager.getFilePath - the absolute file path for the relative file path " + + relativePath + " is " + absolutePath); + return absolutePath; + } + + /** + * Get the system metadata for the given id + * @param id the id to identify the system metadata + * @param objectRelativePath the object path for this id. It can help to determine + * the system metadata file if the system metadata file exists. + * @return the system metadata associated with the id + * @throws InvalidToken + * @throws NotAuthorized + * @throws NotImplemented + * @throws ServiceFailure + * @throws NotFound + * @throws MarshallingException + * @throws IOException + * @throws IllegalAccessException + * @throws InstantiationException + */ + public SystemMetadata getSystemMetadata(String id, String relativeObjPath) throws InvalidToken, NotAuthorized, NotImplemented, + ServiceFailure, NotFound, InstantiationException, IllegalAccessException, IOException, MarshallingException { + SystemMetadata sysmeta = null; + long start = System.currentTimeMillis(); + //try to get the system metadata from the file system first + File sysmetaFile = getSysmetaFile(relativeObjPath); + if (sysmetaFile != null) { + sysmeta = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, sysmetaFile); + long end = System.currentTimeMillis(); + logger.info("ObjectManager.getSystemMetadata - finish getting the system metadata via the file system for the pid " + id + + " and it took " + (end - start) + "milliseconds"); + } else { + //if we can't get it from the file system, get it from dataone API + Identifier identifier = new Identifier(); + identifier.setValue(id); + try { + for (int i=0; i<5; i++) { + try { + sysmeta = d1Node.getSystemMetadata(session, identifier); + break; + } catch (ServiceFailure ee) { + logger.warn("The DataONE api call doesn't get the system metadata since " + + ee.getMessage() + ". This is " + i + + " try and Indexer will try again."); + try { + Thread.sleep(300); + } catch (InterruptedException ie) { + logger.info("The sleep of the thread was interrupted."); + } + continue; + } + } + logger.debug("ObjectManager.getSystemMetadata - finish getting the system metadata via the DataONE API call for the pid " + id); + } catch (NotAuthorized e) { + logger.info("ObjectManager.getSystemMetadata - failed to get the system metadata via the DataONE API call for the pid " + id + + " since it is not authorized. We will refresh the token and try again"); + refreshD1Node(); + sysmeta = d1Node.getSystemMetadata(session, identifier); + } + long end = System.currentTimeMillis(); + logger.info("ObjectManager.getSystemMetadata - finish getting the system metadata via DataONE API for the pid " + id + + " and it took " + (end - start) + "milliseconds"); + } + return sysmeta; + } + + /** + * Set the d1 node for this object manager. + * We only use it for testing + * @param node the d1node will be assigned + */ + public static void setD1Node(MultipartD1Node node) { + d1Node = node; + } + + /** + * Get the system metadata file path from the objectPath. + * We assume the object and system metadata file are in the same directory. + * The system metadata file has a fixed name - systemmetadata.xml + * @param relativeObjPath the relative path of the object + * @return the file of system metadata. If it is null, this means the system metadata file does not exist. + */ + protected static File getSysmetaFile(String relativeObjPath) { + File sysmetaFile = null; + String sysmetaPath = null; + String relativeSysmetaPath = null; + if (relativeObjPath != null) { + if (relativeObjPath.contains(File.separator)) { + logger.debug("ObjectManager.getSysmetaFile - the object file path " + relativeObjPath + " has at least one path separator " + File.pathSeparator); + relativeSysmetaPath = relativeObjPath.substring(0, relativeObjPath.lastIndexOf(File.separator) + 1) + SYSTEMMETA_FILE_NAME; + } else { + logger.debug("ObjectManager.getSysmetaFile - the object file path " + relativeObjPath + " doesnot have any path separator " + File.pathSeparator); + //There is not path information in the object path ( it only has the file name). So we just simply return systemmetadata.xml + relativeSysmetaPath = SYSTEMMETA_FILE_NAME; + } + logger.debug("ObjectManager.getSysmetaFile - the relative system metadata file path for the object path " + + relativeObjPath + " is " + relativeSysmetaPath); + if (ifDataAndDocRootSame) { + sysmetaPath = documentRootDir + relativeSysmetaPath; + sysmetaFile = new File(sysmetaPath); + if (!sysmetaFile.exists()) { + //the system metadata file doesn't exist and we set it to null + sysmetaPath = null; + sysmetaFile = null; + } + } else { + //try if this object is a document first since we have no idea if the object is metadata or data. + sysmetaPath = documentRootDir + relativeSysmetaPath; + sysmetaFile = new File(sysmetaPath); + if (!sysmetaFile.exists()) { + // try data + sysmetaPath = dataRootDir + relativeSysmetaPath; + sysmetaFile = new File(sysmetaPath); + if (!sysmetaFile.exists()) { + //the system metadata file doesn't exist and we set it to null + sysmetaPath = null; + sysmetaFile = null; + } + } + } + } + logger.debug("ObjectManager.getSysmetaFile - the final system metadata file path for the object path " + + relativeObjPath + " is " + sysmetaPath + ". Null means that not system metadata file exists."); + return sysmetaFile; + } + + /** + * In case the token expired, the method will retrieve the token and create a new d1 node + * @throws ServiceFailure + */ + private void refreshD1Node() throws ServiceFailure { + //get the token + DataONEauthToken = System.getenv(TOKEN_VARIABLE_NAME); + if (DataONEauthToken == null || DataONEauthToken.trim().equals("")) { + //can't get the token from the env variable. So try to get it from a file specified in the property + String tokenFilePath = Settings.getConfiguration().getString(TOKEN_FILE_PATH_PROP_NAME); + if (tokenFilePath != null && !tokenFilePath.trim().equals("")) { + logger.info("ObjectManager.refreshD1Node - We can't get the token from the env variable so try to get the auth token from the file " + tokenFilePath); + try { + DataONEauthToken = FileUtils.readFileToString(new File(tokenFilePath), "UTF-8"); + } catch (IOException e) { + DataONEauthToken = null; + logger.warn("ObjectManager.refreshD1Node - can NOT get the authen token from the file " + tokenFilePath + " since " + e.getMessage()); + } + if (DataONEauthToken != null && !DataONEauthToken.trim().equals("")) { + logger.info("ObjectManager.refreshD1Node - Got the auth token from the file "+ tokenFilePath); + } + } + } else { + logger.info("ObjectManager.refreshD1Node - Got the auth token from an env. variable"); + } + + if (DataONEauthToken == null || DataONEauthToken.trim().equals("")) { + logger.warn("ObjectManager.refreshD1Node ------ Could NOT get an auth token from either an env. variable or the properties file. So it will act as the public user."); + } + session = createSession(DataONEauthToken); + logger.info("ObjectManager.refreshD1Node ------ going to create the d1node with url " + nodeBaseURL); + try { + d1Node = getMultipartD1Node(session, nodeBaseURL); + } catch (IOException | ClientSideException e) { + logger.error("ObjectManager.refreshD1Node - couldn't create the d1node for the url " + nodeBaseURL + " since " + e.getMessage()); + throw new ServiceFailure("0000", e.getMessage()); + } + } + + /** + * Get a DataONE authenticated session + *

+ * If no subject or authentication token are provided, a public session is returned + *

+ * @param authToken the authentication token + * @return the DataONE session + */ + private Session createSession(String authToken) { + Session session = null; + if (authToken == null || authToken.trim().equals("")) { + logger.info("ObjectManager.createSession - Creating the public session"); + session = new Session(); + } else { + logger.info("ObjectManger.createSession - Creating authentication session from token: " + authToken.substring(0, 5) + "..."); + session = new AuthTokenSession(authToken); + } + return session; + } + + /** + * Get a DataONE MultipartCNode object, which will be used to communication with a CN + * + * @param session a DataONE authentication session + * @param serviceUrl the service URL for the node we are connecting to + * @return a DataONE MultipartCNode object + * @throws ClientSideException + * @throws IOException + * @throws MetadigException + */ + private MultipartD1Node getMultipartD1Node(Session session, String serviceUrl) throws IOException, ClientSideException { + MultipartRestClient mrc = null; + MultipartD1Node d1Node = null; + // First create a default HTTP client + mrc = new HttpMultipartRestClient(); + // Now create a DataONE object that uses the rest client + Boolean isCN = isCN(serviceUrl); + // Now create a DataONE object that uses the rest client + if (isCN) { + logger.info("ObjectManager.getMultipartD1Node - creating cn MultipartMNode from the url " + serviceUrl); + d1Node = new MultipartCNode(mrc, serviceUrl, session); + } else { + logger.info("ObjectManager.getMultipartD1Node - creating mn MultipartMNode from the url " + serviceUrl); + d1Node = new MultipartMNode(mrc, serviceUrl, session); + } + return d1Node; + } + + /* + * Determine if the string represents a DataONE CN. + * @param nodeStr either a DataONE node serviceURL (e.g. https://knb.ecoinformatics.org/knb/d1/mn) + * or a DataONE node identifier (e.g. urn:node:CN) + */ + private Boolean isCN(String nodeStr) { + Boolean isCN = false; + // match node urn, e.g. "https://cn.dataone.org/cn" + if (nodeStr.matches("^\\s*urn:node:.*")) { + if (nodeStr.matches("^\\s*urn:node:CN.*$|^\\s*urn:node:cn.*$")) { + isCN = true; + logger.debug("ObjectManager.isCN - The nodeId is for a CN: " + nodeStr); + } else { + logger.debug("ObjectManager.isCN - The nodeId is not for a CN: " + nodeStr); + isCN = false; + } + } else { + // match cn service url e.g. "https://cn.dataone.org/cn" + if (nodeStr.matches("^\\s*https*://cn.*?\\.dataone\\.org.*$|https*://cn.*?\\.test\\.dataone\\.org.*$")) { + isCN = true; + logger.debug("ObjectManager.isCN - The service URL is for a CN: " + nodeStr); + } else { + logger.debug("ObjectManager.isCN - The service URL is not for a CN: " + nodeStr); + isCN = false; + } + } + return isCN; + } + +} diff --git a/src/main/java/org/dataone/cn/indexer/parser/BaseDocumentDeleteSubprocessor.java b/src/main/java/org/dataone/cn/indexer/parser/BaseDocumentDeleteSubprocessor.java index b294a804..801aa78d 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/BaseDocumentDeleteSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/parser/BaseDocumentDeleteSubprocessor.java @@ -37,15 +37,14 @@ import org.dataone.cn.indexer.solrhttp.HTTPService; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; import org.springframework.beans.factory.annotation.Autowired; public class BaseDocumentDeleteSubprocessor implements IDocumentDeleteSubprocessor { - @Autowired private HTTPService httpService; - @Autowired - private String solrQueryUri; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); private String relationSourceFormatId; private String relationSourceField; @@ -175,4 +174,20 @@ public void setBiDirectionalRelationFields(List biDirectionalRelationFie public void setUniDirectionalRelationFields(List uniDirectionalRelationFields) { this.uniDirectionalRelationFields = uniDirectionalRelationFields; } + + /** + * Set the http service + * @param service + */ + public void setHttpService(HTTPService service) { + this.httpService = service; + } + + /** + * Get the http service + * @return the http service + */ + public HTTPService getHttpService() { + return httpService; + } } diff --git a/src/main/java/org/dataone/cn/indexer/parser/BaseReprocessSubprocessor.java b/src/main/java/org/dataone/cn/indexer/parser/BaseReprocessSubprocessor.java deleted file mode 100644 index 50b41853..00000000 --- a/src/main/java/org/dataone/cn/indexer/parser/BaseReprocessSubprocessor.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.indexer.parser; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.xml.xpath.XPathExpressionException; - -import org.apache.commons.codec.EncoderException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.dataone.client.v2.formats.ObjectFormatCache; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.generator.IndexTaskGenerator; -import org.dataone.cn.index.util.PerformanceLogger; -import org.dataone.cn.indexer.parser.utility.SeriesIdResolver; -import org.dataone.cn.indexer.solrhttp.HTTPService; -import org.dataone.cn.indexer.solrhttp.SolrDoc; -import org.dataone.cn.indexer.solrhttp.SolrElementField; -import org.dataone.service.exceptions.BaseException; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v1.ObjectFormatIdentifier; -import org.dataone.service.types.v2.ObjectFormat; -import org.dataone.service.types.v2.SystemMetadata; -import org.springframework.beans.factory.annotation.Autowired; - -public class BaseReprocessSubprocessor implements IDocumentSubprocessor { - - @Autowired - private HTTPService httpService; - - @Autowired - private String solrQueryUri; - - @Autowired - private IndexTaskGenerator indexTaskGenerator; - - private PerformanceLogger perfLog = PerformanceLogger.getInstance(); - - private List matchDocuments = null; - - private List relationFields; - - public static Log log = LogFactory.getLog(BaseReprocessSubprocessor.class); - - public BaseReprocessSubprocessor() { - } - - @Override - public Map processDocument(String identifier, Map docs, - InputStream is) throws Exception { - - Identifier id = new Identifier(); - id.setValue(identifier); - long getSysMetaStart = System.currentTimeMillis(); - SystemMetadata sysMeta = HazelcastClientFactory.getSystemMetadataMap().get(id); - perfLog.log("BaseReprocessSubprocessor.processDocument() HazelcastClientFactory.getSystemMetadataMap().get(id) for id "+identifier, System.currentTimeMillis() - getSysMetaStart); - - if (sysMeta == null) { - return docs; - } - - Identifier seriesId = sysMeta.getSeriesId(); - - log.debug("seriesId===" + seriesId); - - // only need to reprocess for series Id - if (seriesId != null) { - log.debug("seriesId===" + seriesId.getValue()); - - // find the other objects in the series - long getIdsInSeriesStart = System.currentTimeMillis(); - List previousDocs = httpService.getDocumentsByField(solrQueryUri, - Collections.singletonList(seriesId.getValue()), - SolrElementField.FIELD_SERIES_ID, true); - perfLog.log("BaseReprocessSubprocessor.processDocument() HttpService.getDocumentsByField(idsInSeries) for id "+identifier, System.currentTimeMillis() - getIdsInSeriesStart); - - log.debug("previousDocs===" + previousDocs); - - if (previousDocs != null && !previousDocs.isEmpty()) { - - List pidsToProcess = new ArrayList(); - for (SolrDoc indexedDoc : previousDocs) { - log.debug("indexedDoc===" + indexedDoc); - - for (String fieldName : relationFields) { - log.debug("fieldName===" + fieldName); - - // are there relations that need to be reindexed? - List relationFieldValues = indexedDoc.getAllFieldValues(fieldName); - if (relationFieldValues != null) { - - for (String relationFieldValue : relationFieldValues) { - - // check if this is this a sid - Identifier relatedPid = new Identifier(); - relatedPid.setValue(relationFieldValue); - if (SeriesIdResolver.isSeriesId(relatedPid)) { - try { - relatedPid = SeriesIdResolver.getPid(relatedPid); - } catch (BaseException be) { - log.error("could not locate PID for given identifier: " - + relatedPid.getValue(), be); - // nothing we can do but continue - continue; - } - } - - // only need to reprocess related docs once - if (!pidsToProcess.contains(relatedPid)) { - log.debug("Processing relatedPid===" + relatedPid.getValue()); - - pidsToProcess.add(relatedPid); - // queue a reprocessing of this related document - SystemMetadata relatedSysMeta = HazelcastClientFactory - .getSystemMetadataMap().get(relatedPid); - String objectPath = HazelcastClientFactory.getObjectPathMap() - .get(relatedPid); - log.debug("Processing relatedSysMeta===" + relatedSysMeta); - log.debug("Processing objectPath===" + objectPath); - indexTaskGenerator.processSystemMetaDataUpdate(relatedSysMeta, - objectPath); - } - } - } - } - } - } - perfLog.log("BaseReprocessSubprocessor.processDocument() reprocessing all docs earlier in sid chain for id "+identifier, System.currentTimeMillis() - getIdsInSeriesStart); - } - return docs; - } - - @Override - public boolean canProcess(String formatId) { - // if we are given match formats, use them - if (matchDocuments != null) { - return matchDocuments.contains(formatId); - } - - // otherwise just make sure it's not a RESOURCE type - ObjectFormatIdentifier ofi = new ObjectFormatIdentifier(); - ofi.setValue(formatId); - ObjectFormat objectFormat = null; - try { - objectFormat = ObjectFormatCache.getInstance().getFormat(ofi); - } catch (BaseException e) { - e.printStackTrace(); - } - if (objectFormat != null) { - return !objectFormat.getFormatType().equalsIgnoreCase("RESOURCE"); - } - - // no real harm processing again - return true; - } - - @Override - public SolrDoc mergeWithIndexedDocument(SolrDoc indexDocument) throws IOException, - EncoderException, XPathExpressionException { - // just return the given document - return indexDocument; - } - - public List getRelationFields() { - return relationFields; - } - - public void setRelationFields(List relationFields) { - this.relationFields = relationFields; - } - -} diff --git a/src/main/java/org/dataone/cn/indexer/parser/BaseXPathDocumentSubprocessor.java b/src/main/java/org/dataone/cn/indexer/parser/BaseXPathDocumentSubprocessor.java index 070abd73..1be93575 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/BaseXPathDocumentSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/parser/BaseXPathDocumentSubprocessor.java @@ -34,10 +34,10 @@ import javax.xml.xpath.XPathFactoryConfigurationException; import org.apache.commons.codec.EncoderException; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.XMLNamespaceConfig; import org.dataone.cn.indexer.XmlDocumentUtility; import org.dataone.cn.indexer.solrhttp.SolrDoc; +import org.dataone.indexer.performance.PerformanceLogger; import org.w3c.dom.Document; import net.sf.saxon.lib.NamespaceConstant; diff --git a/src/main/java/org/dataone/cn/indexer/parser/JsonLdSubprocessor.java b/src/main/java/org/dataone/cn/indexer/parser/JsonLdSubprocessor.java index fe67cc8f..35076b1b 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/JsonLdSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/parser/JsonLdSubprocessor.java @@ -34,7 +34,6 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.dataone.cn.index.util.PerformanceLogger; import org.dataone.cn.indexer.annotation.SparqlField; import org.dataone.cn.indexer.annotation.TripleStoreService; import org.dataone.cn.indexer.solrhttp.SolrDoc; @@ -50,6 +49,7 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import org.dataone.configuration.Settings; +import org.dataone.indexer.performance.PerformanceLogger; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; diff --git a/src/main/java/org/dataone/cn/indexer/parser/ResourceMapSubprocessor.java b/src/main/java/org/dataone/cn/indexer/parser/ResourceMapSubprocessor.java index c466bb42..6dfdaff2 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/ResourceMapSubprocessor.java +++ b/src/main/java/org/dataone/cn/indexer/parser/ResourceMapSubprocessor.java @@ -29,27 +29,31 @@ import java.util.List; import java.util.Map; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPathExpressionException; import org.apache.commons.codec.EncoderException; import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.processor.IndexTaskDeleteProcessor; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.index.util.PerformanceLogger; -import org.dataone.cn.indexer.XmlDocumentUtility; -import org.dataone.cn.indexer.parser.utility.SeriesIdResolver; +import org.apache.solr.client.solrj.SolrServerException; import org.dataone.cn.indexer.resourcemap.ResourceMap; import org.dataone.cn.indexer.resourcemap.ResourceMapFactory; import org.dataone.cn.indexer.solrhttp.HTTPService; import org.dataone.cn.indexer.solrhttp.SolrDoc; +import org.dataone.configuration.Settings; +import org.dataone.indexer.performance.PerformanceLogger; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.exceptions.UnsupportedType; import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v2.SystemMetadata; import org.dspace.foresite.OREParserException; import org.springframework.beans.factory.annotation.Autowired; import org.w3c.dom.Document; import org.xml.sax.SAXException; + /** * Resource Map Document processor. Operates on ORE/RDF objects. Maps * 'documents', 'documentedBy', and 'aggregates' relationships. @@ -68,24 +72,32 @@ public class ResourceMapSubprocessor implements IDocumentSubprocessor { private static Logger logger = Logger.getLogger(ResourceMapSubprocessor.class.getName()); + + private static int waitingTime = Settings.getConfiguration().getInt("index.resourcemap.waitingComponent.time", 600); + private static int maxAttempts = Settings.getConfiguration().getInt("index.resourcemap.waitingComponent.max.attempts", 15); + + //private static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + //private static DocumentBuilder builder = null; + /*static { + try { + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + logger.error("ResourceMapSubprocess.static - can't initialize the DocumentBuilder since " + e.getMessage()); + } + }*/ - @Autowired private HTTPService httpService = null; - @Autowired - private String solrQueryUri = null; - - @Autowired - private IndexTaskDeleteProcessor deleteProcessor; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); - @Autowired private SubprocessorUtility processorUtility; private PerformanceLogger perfLog = PerformanceLogger.getInstance(); private List matchDocuments = null; private List fieldsToMerge = new ArrayList(); - + + /** * Merge updates with existing solr documents * @@ -100,33 +112,25 @@ public SolrDoc mergeWithIndexedDocument(SolrDoc indexDocument) throws IOExceptio return processorUtility.mergeWithIndexedDocument(indexDocument, fieldsToMerge); } - /** - * Implements IDocumentSubprocessor.processDocument method. - * Creates a map of D1 Identifier string values to SolrDoc objects which represent - * the Solr search index documents for the data package defined by the ORE/RDF document. - * Each solr record in the data package is updated with 'documents', 'documentedBy', - * and 'resourceMap' field values contained in the incoming Document doc method parameter. - */ + + + @Override public Map processDocument(String identifier, Map docs, - InputStream is) throws XPathExpressionException, IOException, EncoderException { + InputStream is) throws IOException, EncoderException, SAXException, + XPathExpressionException, ParserConfigurationException, SolrServerException, + NotImplemented, NotFound, UnsupportedType, OREParserException, ServiceFailure, InterruptedException{ SolrDoc resourceMapDoc = docs.get(identifier); - List processedDocs = new ArrayList(); - try { - long fetchXmlStart = System.currentTimeMillis(); - Document doc = XmlDocumentUtility.generateXmlDocument(is); - perfLog.log("ResourceMapSubprocessor.processDocument() XmlDocumentUtility.generateXmlDocument() for id "+identifier, System.currentTimeMillis() - fetchXmlStart); - - long procResMapStart = System.currentTimeMillis(); - processedDocs = processResourceMap(resourceMapDoc, doc); - perfLog.log("ResourceMapSubprocessor.processResourceMap() for id "+identifier, System.currentTimeMillis() - procResMapStart); - } catch (OREParserException oreException) { - logger.error("Unable to parse resource map: " + identifier - + ". Unrecoverable parse exception: task will not be re-tried."); - } catch (SAXException e) { - logger.error("Unable to parse resource map: " + identifier - + ". Unrecoverable parse exception: task will not be re-tried."); - } + //Document doc = XmlDocumentUtility.generateXmlDocument(is); + Identifier id = new Identifier(); + id.setValue(identifier); + + //Get the path to the resource map file + //String resourcMapPath = DistributedMapsFactory.getObjectPathMap().get(id); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document resourceMap = builder.parse(is); + List processedDocs = processResourceMap(resourceMapDoc, resourceMap); Map processedDocsMap = new HashMap(); for (SolrDoc processedDoc : processedDocs) { processedDocsMap.put(processedDoc.getIdentifier(), processedDoc); @@ -134,81 +138,57 @@ public Map processDocument(String identifier, Map processResourceMap(SolrDoc indexDocument, Document resourceMapDocument) - throws OREParserException, XPathExpressionException, IOException, EncoderException { - - long buildResMapStart = System.currentTimeMillis(); - ResourceMap resourceMap = ResourceMapFactory.buildResourceMap(resourceMapDocument); - perfLog.log("ResourceMapFactory.buildResourceMap() create ResourceMap from Document", System.currentTimeMillis() - buildResMapStart); - - long getReferencedStart = System.currentTimeMillis(); - List documentIds = resourceMap.getAllDocumentIDs(); // all pids referenced in ResourceMap - perfLog.log("ResourceMap.getAllDocumentIDs() referenced in ResourceMap", System.currentTimeMillis() - getReferencedStart); - - long clearSidChainStart = System.currentTimeMillis(); - this.clearSidChain(indexDocument.getIdentifier(), documentIds); - perfLog.log("ResourceMapSubprocessor.clearSidChain() removing obsoletes chain from Solr index", System.currentTimeMillis() - clearSidChainStart); - - long getSolrDocsStart = System.currentTimeMillis(); - List updateDocuments = httpService.getDocumentsById(solrQueryUri, documentIds); - perfLog.log("HttpService.getDocumentsById() get existing referenced ids' Solr docs", System.currentTimeMillis() - getSolrDocsStart); - + private List processResourceMap(SolrDoc indexDocument, Document resourcMap) + throws XPathExpressionException, IOException, SAXException, ParserConfigurationException, EncoderException, SolrServerException, NotImplemented, NotFound, UnsupportedType, OREParserException, InterruptedException { + //ResourceMap resourceMap = new ResourceMap(resourceMapDocument); + //IndexVisibilityHazelcastImplWithArchivedObj indexVisitility = new IndexVisibilityHazelcastImplWithArchivedObj(); + ResourceMap resourceMap = ResourceMapFactory.buildResourceMap(resourcMap); + List documentIds = resourceMap.getAllDocumentIDs();//this list includes the resourceMap id itself. + //List updateDocuments = httpService.getDocumentsById(getSolrQueryUri(), documentIds); + List updateDocuments = getSolrDocs(resourceMap.getIdentifier(), documentIds); List mergedDocuments = resourceMap.mergeIndexedDocuments(updateDocuments); + /*if(mergedDocuments != null) { + for(SolrDoc doc : mergedDocuments) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + doc.serialize(out, "UTF-8"); + String result = new String(out.toByteArray(), "UTF-8"); + System.out.println("after updated document==========================="); + System.out.println(result); + } + }*/ mergedDocuments.add(indexDocument); return mergedDocuments; } - - /** - * Removes the documents for resourceMapIdentifier and its obsoletes chain - * (meaning anything BEFORE it) from the search index - * (if any ids referenced in resource doc are a sid). - */ - private void clearSidChain(String resourceMapIdentifier, List relatedDocs) { - - // check that we are, indeed, dealing with a SID-identified ORE - Identifier identifier = new Identifier(); - identifier.setValue(resourceMapIdentifier); - - boolean containsSeriesId = false; - for (String relatedDoc : relatedDocs) { - Identifier relatedPid = new Identifier(); - relatedPid.setValue(relatedDoc); - if (SeriesIdResolver.isSeriesId(relatedPid)) { - containsSeriesId = true; - break; - } - } - // if this package contains a SID, then we need to clear out old info - if (containsSeriesId) { - Identifier pidToProcess = identifier; - while (pidToProcess != null) { - // queue a delete processing of all versions in the SID chain - SystemMetadata sysmeta = HazelcastClientFactory.getSystemMetadataMap().get( - pidToProcess); - if (sysmeta != null) { - String objectPath = HazelcastClientFactory.getObjectPathMap().get(pidToProcess); - logger.debug("Removing pidToProcess===" + pidToProcess.getValue()); - logger.debug("Removing objectPath===" + objectPath); - - - IndexTask task = new IndexTask(sysmeta, objectPath); - try { - deleteProcessor.process(task); - } catch (Exception e) { - logger.error(e.getMessage(), e); + + private List getSolrDocs(String resourceMapId, List ids) throws SolrServerException, IOException, ParserConfigurationException, SAXException, XPathExpressionException, NotImplemented, NotFound, UnsupportedType, InterruptedException, EncoderException { + List list = new ArrayList(); + if(ids != null) { + for(String id : ids) { + SolrDoc doc = httpService.getSolrDocumentById(solrQueryUri, id); + if(doc != null) { + list.add(doc); + } else if ( !id.equals(resourceMapId)) { + for (int i=0; i getMatchDocuments() { return matchDocuments; @@ -229,4 +209,36 @@ public List getFieldsToMerge() { public void setFieldsToMerge(List fieldsToMerge) { this.fieldsToMerge = fieldsToMerge; } + + /** + * Set the http service + * @param service + */ + public void setHttpService(HTTPService service) { + this.httpService = service; + } + + /** + * Get the http service + * @return the http service + */ + public HTTPService getHttpService() { + return httpService; + } + + /** + * Get the subprocessor utility object + * @return the subprocessor utility + */ + public SubprocessorUtility getProcessorUtility() { + return processorUtility; + } + + /** + * Set the subprocessor utility + * @param processorUtility the subprocessor utility object will be set + */ + public void setProcessorUtility(SubprocessorUtility processorUtility) { + this.processorUtility = processorUtility; + } } diff --git a/src/main/java/org/dataone/cn/indexer/parser/SubprocessorUtility.java b/src/main/java/org/dataone/cn/indexer/parser/SubprocessorUtility.java index c3358de2..1e7c5e90 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/SubprocessorUtility.java +++ b/src/main/java/org/dataone/cn/indexer/parser/SubprocessorUtility.java @@ -10,17 +10,16 @@ import org.dataone.cn.indexer.solrhttp.HTTPService; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; import org.springframework.beans.factory.annotation.Autowired; public class SubprocessorUtility { private static Logger logger = Logger.getLogger(SubprocessorUtility.class.getName()); - @Autowired private HTTPService httpService = null; - @Autowired - private String solrQueryUri = null; + private String solrQueryUri = Settings.getConfiguration().getString("solr.query.uri"); public SubprocessorUtility() { } @@ -45,4 +44,20 @@ public SolrDoc mergeWithIndexedDocument(SolrDoc indexDocument, List fiel } return indexDocument; } + + /** + * Set the http service + * @param service + */ + public void setHttpService(HTTPService service) { + this.httpService = service; + } + + /** + * Get the http service + * @return the http service + */ + public HTTPService getHttpService() { + return httpService; + } } diff --git a/src/main/java/org/dataone/cn/indexer/parser/utility/MemberNodeServiceRegistrationTypeCache.java b/src/main/java/org/dataone/cn/indexer/parser/utility/MemberNodeServiceRegistrationTypeCache.java index cafc90f9..4f052469 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/utility/MemberNodeServiceRegistrationTypeCache.java +++ b/src/main/java/org/dataone/cn/indexer/parser/utility/MemberNodeServiceRegistrationTypeCache.java @@ -39,7 +39,6 @@ public class MemberNodeServiceRegistrationTypeCache { private static long lastRefreshTime = 0; private static Collection serviceTypes = new ArrayList(); - @Autowired private MemberNodeServiceRegistrationTypeDocumentService mnServiceRegistrationTypeDocumentService; public Collection getServiceTypes() { @@ -57,4 +56,13 @@ public Collection getServiceTypes() { return serviceTypes; } + public MemberNodeServiceRegistrationTypeDocumentService getMnServiceRegistrationTypeDocumentService() { + return mnServiceRegistrationTypeDocumentService; + } + + public void setMnServiceRegistrationTypeDocumentService( + MemberNodeServiceRegistrationTypeDocumentService mnServiceRegistrationTypeDocumentService) { + this.mnServiceRegistrationTypeDocumentService = mnServiceRegistrationTypeDocumentService; + } + } diff --git a/src/main/java/org/dataone/cn/indexer/parser/utility/SeriesIdResolver.java b/src/main/java/org/dataone/cn/indexer/parser/utility/SeriesIdResolver.java index 013e83e7..e921a055 100644 --- a/src/main/java/org/dataone/cn/indexer/parser/utility/SeriesIdResolver.java +++ b/src/main/java/org/dataone/cn/indexer/parser/utility/SeriesIdResolver.java @@ -8,8 +8,9 @@ import org.dataone.client.rest.DefaultHttpMultipartRestClient; import org.dataone.client.v2.impl.MultipartMNode; import org.dataone.client.v2.itk.D1Client; -import org.dataone.cn.hazelcast.HazelcastClientFactory; +import org.dataone.cn.indexer.object.ObjectManager; import org.dataone.configuration.Settings; +import org.dataone.exceptions.MarshallingException; import org.dataone.service.exceptions.InvalidToken; import org.dataone.service.exceptions.NotAuthorized; import org.dataone.service.exceptions.NotFound; @@ -19,14 +20,14 @@ import org.dataone.service.types.v2.SystemMetadata; public class SeriesIdResolver { - + public static Log log = LogFactory.getLog(SeriesIdResolver.class); /** - * Method to find HEAD PID for a given SID. - * If the provided identifier is already a PID, then it will simply be returned. - * If the provided identifier is a SID, then the latest SystemMetadata will be fetched - * and the PID for this latest revision will be returned. + * Method to find HEAD PID for a given SID. If the provided identifier is already a PID, then it + * will simply be returned. If the provided identifier is a SID, then the latest SystemMetadata + * will be fetched and the PID for this latest revision will be returned. + * * @param identifier the SID to look up (if a PID is provided it will simply be returned) * @return the HEAD PID for the given identifier * @throws InvalidToken @@ -34,61 +35,87 @@ public class SeriesIdResolver { * @throws NotAuthorized * @throws NotFound * @throws NotImplemented - * @throws ClientSideException - * @throws IOException + * @throws ClientSideException + * @throws IOException */ - public static Identifier getPid(Identifier identifier) throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, NotImplemented, IOException, ClientSideException { - // check if this is this a sid - Identifier pid = identifier; + public static Identifier getPid(Identifier identifier) + throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, NotImplemented, IOException, + ClientSideException { + // check if this is this a sid + Identifier pid = identifier; log.debug("pid===" + pid.getValue()); String mnBaseURL = Settings.getConfiguration().getString("dataone.mn.baseURL"); String nodeType = Settings.getConfiguration().getString("dataone.nodeType"); - log.info("SeriesIdReolver.getPid - the current node type is "+nodeType); + log.info("SeriesIdResolver.getPid - the current node type is " + nodeType); SystemMetadata fetchedSysmeta = null; - if((nodeType == null || !nodeType.equalsIgnoreCase("cn")) && mnBaseURL != null && !mnBaseURL.trim().equals("")) { - log.info("SeriesIdReolver.getPid - get the system metadata from the mn base url"+mnBaseURL+" for the object "+identifier.getValue()); + if ((nodeType == null || !nodeType.equalsIgnoreCase("cn")) && mnBaseURL != null + && !mnBaseURL.trim().equals("")) { + log.info( + "SeriesIdResolver.getPid - get the system metadata from the mn base url" + mnBaseURL + + " for the object " + identifier.getValue()); try { - MultipartMNode mnode = new MultipartMNode(new DefaultHttpMultipartRestClient(), mnBaseURL); + MultipartMNode mnode = + new MultipartMNode(new DefaultHttpMultipartRestClient(), mnBaseURL); fetchedSysmeta = mnode.getSystemMetadata(null, identifier); } catch (Exception e) { - log.warn("SeriesIdReolver.getPid - can't get the system metadata from the mn "+mnBaseURL+ " for the object "+pid.getValue()+ - " since "+e.getMessage()+". We will try to get it from cn."); + log.warn("SeriesIdResolver.getPid - can't get the system metadata from the mn " + + mnBaseURL + " for the object " + pid.getValue() + " since " + + e.getMessage() + ". We will try to get it from cn."); } } - if( fetchedSysmeta == null) { - log.info("SeriesIdReolver.getPid - get the system metadata for the object "+identifier.getValue()+" from the cn since the current node is cn or the systemmetadata is not available on a mn with baseurl "+mnBaseURL); + if (fetchedSysmeta == null) { + log.info("SeriesIdResolver.getPid - get the system metadata for the object " + + identifier.getValue() + + " from the cn since the current node is cn or the systemmetadata is not" + + " available on a mn with baseurl " + mnBaseURL); fetchedSysmeta = D1Client.getCN().getSystemMetadata(null, identifier); } - if (fetchedSysmeta != null && !fetchedSysmeta.getIdentifier().getValue().equals(identifier.getValue())) { - log.debug("Found pid: " + fetchedSysmeta.getIdentifier().getValue() + " for sid: " + identifier.getValue()); + if (fetchedSysmeta != null && !fetchedSysmeta.getIdentifier().getValue() + .equals(identifier.getValue())) { + log.debug("Found pid: " + fetchedSysmeta.getIdentifier().getValue() + " for sid: " + + identifier.getValue()); pid = fetchedSysmeta.getIdentifier(); } - + return pid; - } - - /** - * Check if the given identifier is a PID or a SID - * @param identifier - * @return true if the identifier is a SID, false if a PID - */ - public static boolean isSeriesId(Identifier identifier) { - - // if we have system metadata available via HZ map, then it's a PID - SystemMetadata systemMetadata = HazelcastClientFactory.getSystemMetadataMap().get(identifier); - if (systemMetadata != null) { - return false; - } - - //TODO: check that it's not just bogus value by looking up the pid? + } + + /** + * Check if the given identifier is a PID or a SID + * + * @param identifier + * @return true if the identifier is a SID, false if a PID + * @throws NotFound + * @throws ServiceFailure + * @throws NotImplemented + * @throws NotAuthorized + * @throws InvalidToken + * @throws MarshallingException + * @throws IOException + * @throws IllegalAccessException + * @throws InstantiationException + */ + public static boolean isSeriesId(Identifier identifier) + throws InvalidToken, NotAuthorized, NotImplemented, ServiceFailure, NotFound, + InstantiationException, IllegalAccessException, IOException, MarshallingException { + + // if we have system metadata available via HZ map, then it's a PID + String relativeObjPath = null;//we don't know the path + SystemMetadata systemMetadata = + ObjectManager.getInstance().getSystemMetadata(identifier.getValue(), relativeObjPath); + if (systemMetadata != null) { + return false; + } + + //TODO: check that it's not just bogus value by looking up the pid? // Identifier pid = getPid(identifier); // if (pid.equals(identifier)) { // return false; // } - - // okay, it's a SID - return true; - - } - + + // okay, it's a SID + return true; + + } + } diff --git a/src/main/java/org/dataone/cn/indexer/resourcemap/ForesiteResourceMap.java b/src/main/java/org/dataone/cn/indexer/resourcemap/ForesiteResourceMap.java index 71a67017..55aa8a4f 100644 --- a/src/main/java/org/dataone/cn/indexer/resourcemap/ForesiteResourceMap.java +++ b/src/main/java/org/dataone/cn/indexer/resourcemap/ForesiteResourceMap.java @@ -39,12 +39,17 @@ import org.apache.commons.io.input.ReaderInputStream; import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.processor.IndexVisibilityDelegateHazelcastImpl; +import org.dataone.cn.indexer.object.ObjectManager; import org.dataone.cn.indexer.parser.utility.SeriesIdResolver; import org.dataone.cn.indexer.solrhttp.SolrDoc; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.exceptions.MarshallingException; import org.dataone.ore.ResourceMapFactory; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; import org.dataone.service.types.v1.Identifier; import org.dataone.service.types.v2.SystemMetadata; import org.dspace.foresite.OREException; @@ -64,7 +69,7 @@ public class ForesiteResourceMap implements ResourceMap { private String identifier = null; private HashMap resourceMap = null; - private IndexVisibilityDelegate indexVisibilityDelegate = new IndexVisibilityDelegateHazelcastImpl(); + private IndexVisibilityDelegate indexVisibilityDelegate = new IndexVisibilityDelegateImpl(); public ForesiteResourceMap(String fileObjectPath) throws OREParserException { FileInputStream fileInputStream = null; @@ -249,11 +254,14 @@ private boolean isHeadVersion(Identifier pid, Identifier sid) { return isHead; } - private SolrDoc _mergeMappedReference(ResourceEntry resourceEntry, SolrDoc mergeDocument) { + private SolrDoc _mergeMappedReference(ResourceEntry resourceEntry, SolrDoc mergeDocument) throws InvalidToken, NotAuthorized, NotImplemented, + ServiceFailure, NotFound, InstantiationException, IllegalAccessException, IOException, MarshallingException { Identifier identifier = new Identifier(); identifier.setValue(mergeDocument.getIdentifier()); - SystemMetadata sysMeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); + //SystemMetadata sysMeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); + String relativeObjPath = null; //we don't know the path + SystemMetadata sysMeta = ObjectManager.getInstance().getSystemMetadata(identifier.getValue(), relativeObjPath); if (sysMeta.getSeriesId() != null && sysMeta.getSeriesId().getValue() != null && !sysMeta.getSeriesId().getValue().trim().equals("")) { // skip this one if(!isHeadVersion(identifier, sysMeta.getSeriesId())) { @@ -363,7 +371,12 @@ public List mergeIndexedDocuments(List docs) { if (doc.getIdentifier().equals(resourceEntry.getIdentifier()) || resourceEntry.getIdentifier().equals(doc.getSeriesId())) { - mergedDocuments.add(_mergeMappedReference(resourceEntry, doc)); + try { + mergedDocuments.add(_mergeMappedReference(resourceEntry, doc)); + } catch (Exception e) { + logger.error("ForestieResourceMap.mergeIndexedDocuments - cannot merge the document since " + e.getMessage()); + } + } } } diff --git a/src/main/java/org/dataone/cn/indexer/resourcemap/IndexVisibilityDelegateImpl.java b/src/main/java/org/dataone/cn/indexer/resourcemap/IndexVisibilityDelegateImpl.java new file mode 100644 index 00000000..1f375ba6 --- /dev/null +++ b/src/main/java/org/dataone/cn/indexer/resourcemap/IndexVisibilityDelegateImpl.java @@ -0,0 +1,98 @@ +package org.dataone.cn.indexer.resourcemap; + +import java.io.IOException; + +import org.apache.log4j.Logger; +import org.dataone.cn.indexer.object.ObjectManager; +import org.dataone.cn.indexer.solrhttp.SolrDoc; +import org.dataone.exceptions.MarshallingException; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.types.v1.Identifier; +import org.dataone.service.types.v2.SystemMetadata; + +public class IndexVisibilityDelegateImpl implements IndexVisibilityDelegate { + + private static Logger logger = Logger.getLogger(IndexVisibilityDelegateImpl.class + .getName()); + + public IndexVisibilityDelegateImpl() { + } + + public boolean isDocumentVisible(Identifier pid) { + boolean visible = false; + try { + + //SystemMetadata systemMetadata = HazelcastClientFactory.getSystemMetadataMap().get(pid); + String relativeObjPath = null; //we don't know the path + SystemMetadata systemMetadata = ObjectManager.getInstance().getSystemMetadata(pid.getValue(), relativeObjPath); + // TODO: Is pid Identifier a SID? + if (systemMetadata == null) { + return true; + } + if (SolrDoc.visibleInIndex(systemMetadata)) { + visible = true; + } + } catch (NullPointerException npe) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " + npe.getMessage()); + } catch (InvalidToken e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (NotAuthorized e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " + e.getMessage()); + } catch (NotImplemented e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (ServiceFailure e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (NotFound e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (InstantiationException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (IllegalAccessException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (IOException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (MarshallingException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } + return visible; + } + + public boolean documentExists(Identifier pid) { + boolean exists = false; + try { + //SystemMetadata systemMetadata = HazelcastClientFactory.getSystemMetadataMap().get(pid); + String relativeObjPath = null; //we don't know the path + SystemMetadata systemMetadata = ObjectManager.getInstance().getSystemMetadata(pid.getValue(), relativeObjPath); + if (systemMetadata != null) { + exists = true; + } else { + // TODO: Is pid Identifier a SID? + return true; + } + } catch (NullPointerException npe) { + logger.warn("Could not get visible value for pid: " + pid.getValue()); + } catch (InvalidToken e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (NotAuthorized e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (NotImplemented e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (ServiceFailure e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (NotFound e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (InstantiationException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (IllegalAccessException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (IOException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } catch (MarshallingException e) { + logger.warn("Could not get visible value for pid: " + pid.getValue() + " since " +e.getMessage()); + } + return exists; + } +} diff --git a/src/main/java/org/dataone/cn/indexer/resourcemap/XPathResourceMap.java b/src/main/java/org/dataone/cn/indexer/resourcemap/XPathResourceMap.java index ccfb933a..02a0ef6c 100644 --- a/src/main/java/org/dataone/cn/indexer/resourcemap/XPathResourceMap.java +++ b/src/main/java/org/dataone/cn/indexer/resourcemap/XPathResourceMap.java @@ -35,7 +35,6 @@ import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; -import org.dataone.cn.index.processor.IndexVisibilityDelegateHazelcastImpl; import org.dataone.cn.indexer.XMLNamespace; import org.dataone.cn.indexer.XMLNamespaceConfig; import org.dataone.cn.indexer.XmlDocumentUtility; @@ -69,7 +68,7 @@ public class XPathResourceMap implements ResourceMap { private XPathFactory factory = null; - private IndexVisibilityDelegate indexVisibilityDelegate = new IndexVisibilityDelegateHazelcastImpl(); + private IndexVisibilityDelegate indexVisibilityDelegate = new IndexVisibilityDelegateImpl(); public static String XPATH_RESOURCE_MAP_IDENTIFIER = "/rdf:RDF/rdf:Description/rdf:type[@rdf:resource='http://www.openarchives.org/ore/terms/ResourceMap']/parent::*/dcterms:identifier/text()"; static private NamespaceContext nameSpaceContext; diff --git a/src/main/java/org/dataone/cn/indexer/solrhttp/HTTPService.java b/src/main/java/org/dataone/cn/indexer/solrhttp/HTTPService.java index 68d136e6..fea35b71 100644 --- a/src/main/java/org/dataone/cn/indexer/solrhttp/HTTPService.java +++ b/src/main/java/org/dataone/cn/indexer/solrhttp/HTTPService.java @@ -56,6 +56,7 @@ import org.apache.http.message.BasicNameValuePair; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrServerException; +import org.dataone.configuration.Settings; import org.dataone.service.exceptions.NotFound; import org.dataone.service.exceptions.UnsupportedType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; @@ -77,6 +78,8 @@ public class HTTPService { private static final String CHAR_ENCODING = "UTF-8"; private static final String XML_CONTENT_TYPE = "text/xml"; + private static final String ARCHIVED_FIELD = "archived"; + private static final String ARCHIVED_SHOWING_VALUE = "-archived:*fake"; final static String PARAM_START = "start"; final static String PARAM_ROWS = "rows"; @@ -86,18 +89,21 @@ public class HTTPService { final static String PARAM_QUERY = "q"; final static String PARAM_RETURN = "fl"; final static String VALUE_WILDCARD = "*"; + final static String WT = "wt"; private static final String MAX_ROWS = "5000"; + private List copyDestinationFields = null; private static Logger log = Logger.getLogger(HTTPService.class.getName()); private HttpComponentsClientHttpRequestFactory httpRequestFactory; - private String SOLR_SCHEMA_PATH; - private String solrIndexUri; + private String SOLR_SCHEMA_PATH = Settings.getConfiguration().getString("solr.schema.path"); private List validSolrFieldNames = new ArrayList(); - public HTTPService(HttpComponentsClientHttpRequestFactory requestFactory) { + public HTTPService(HttpComponentsClientHttpRequestFactory requestFactory) + throws IOException, ParserConfigurationException, SAXException { httpRequestFactory = requestFactory; + loadSolrSchemaFields(); } /** @@ -113,16 +119,16 @@ public HTTPService(HttpComponentsClientHttpRequestFactory requestFactory) { * @throws IOException */ - public void sendUpdate(String uri, SolrElementAdd data, String encoding) throws IOException { + public void sendUpdate(String uri, SolrElementAdd data, String encoding) throws IOException, SolrServerException { this.sendUpdate(uri, data, encoding, XML_CONTENT_TYPE); } - public void sendUpdate(String uri, SolrElementAdd data) throws IOException { + public void sendUpdate(String uri, SolrElementAdd data) throws IOException, SolrServerException { sendUpdate(uri, data, CHAR_ENCODING, XML_CONTENT_TYPE); } public void sendUpdate(String uri, SolrElementAdd data, String encoding, String contentType) - throws IOException { + throws IOException, SolrServerException { InputStream inputStreamResponse = null; HttpPost post = null; HttpResponse response = null; @@ -132,16 +138,17 @@ public void sendUpdate(String uri, SolrElementAdd data, String encoding, String post.setEntity(new OutputStreamHttpEntity(data, encoding)); response = getHttpClient().execute(post); HttpEntity responseEntity = response.getEntity(); + log.info("HTTPService.sendUpdate - after get the http response entity."); inputStreamResponse = responseEntity.getContent(); if (response.getStatusLine().getStatusCode() != 200) { - writeError(null, data, inputStreamResponse, uri); + ByteArrayOutputStream baosResponse = new ByteArrayOutputStream(); + org.apache.commons.io.IOUtils.copy(inputStreamResponse, baosResponse); + String error = new String(baosResponse.toByteArray()); + log.error(error); post.abort(); - throw new IOException("unable to update solr, non 200 response code."); + throw new SolrServerException("unable to update solr, non 200 response code." + error); } post.abort(); - } catch (Exception ex) { - writeError(ex, data, inputStreamResponse, uri); - throw new IOException(ex); } finally { IOUtils.closeQuietly(inputStreamResponse); } @@ -166,15 +173,22 @@ private void sendPost(String uri, String data, String encoding, String contentTy HttpEntity responseEntity = response.getEntity(); inputStreamResponse = responseEntity.getContent(); if (response.getStatusLine().getStatusCode() != 200) { - writeError(null, data, inputStreamResponse, uri); + ByteArrayOutputStream baosResponse = new ByteArrayOutputStream(); + org.apache.commons.io.IOUtils.copy(inputStreamResponse, baosResponse); + String error = new String(baosResponse.toByteArray()); + log.error(error); + post.abort(); + throw new IOException("unable to update solr, non 200 response code." + error); } post.abort(); } catch (Exception ex) { - writeError(ex, data, inputStreamResponse, uri); + throw new IOException(ex.getMessage()); + } finally { + IOUtils.closeQuietly(inputStreamResponse); } } - public void sendSolrDelete(String pid) { + public void sendSolrDelete(String pid, String solrUpdateUri) throws IOException { // generate request to solr server to remove index record for task.pid OutputStream outputStream = new ByteArrayOutputStream(); try { @@ -182,13 +196,14 @@ public void sendSolrDelete(String pid) { CHAR_ENCODING); String escapedId = StringEscapeUtils.escapeXml(pid); IOUtils.write("" + escapedId + "", outputStream, CHAR_ENCODING); - sendPost(getSolrIndexUri(), outputStream.toString()); + sendPost(solrUpdateUri, outputStream.toString()); } catch (IOException e) { - e.printStackTrace(); + //e.printStackTrace(); + throw e; } } - public void sendSolrDeletes(List pids) { + public void sendSolrDeletes(List pids, String solrUpdateUri) { // generate request to solr server to remove index record for task.pid OutputStream outputStream = new ByteArrayOutputStream(); try { @@ -200,7 +215,7 @@ public void sendSolrDeletes(List pids) { IOUtils.write("" + escapedId + "", outputStream, CHAR_ENCODING); } IOUtils.write("", outputStream, CHAR_ENCODING); - sendPost(getSolrIndexUri(), outputStream.toString()); + sendPost(solrUpdateUri, outputStream.toString()); } catch (IOException e) { e.printStackTrace(); } @@ -230,49 +245,8 @@ public static String escapeQueryChars(String s) { return sb.toString(); } - private void writeError(Exception ex, SolrElementAdd data, InputStream inputStreamResonse, - String uri) throws IOException { + - try { - if (ex != null) { - log.error("Unable to write to stream", ex); - } - - log.error("URL: " + uri); - log.error("Post: "); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - data.serialize(baos, "UTF-8"); - log.error(new String(baos.toByteArray(), "UTF-8")); - log.error("\n\n\nResponse: \n"); - ByteArrayOutputStream baosResponse = new ByteArrayOutputStream(); - org.apache.commons.io.IOUtils.copy(inputStreamResonse, baosResponse); - log.error(new String(baosResponse.toByteArray())); - inputStreamResonse.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void writeError(Exception ex, String data, InputStream inputStreamResonse, String uri) - throws IOException { - - try { - if (ex != null) { - log.error("Unable to write to stream", ex); - } - - log.error("URL: " + uri); - log.error("Post: "); - log.error(data); - log.error("\n\n\nResponse: \n"); - ByteArrayOutputStream baosResponse = new ByteArrayOutputStream(); - org.apache.commons.io.IOUtils.copy(inputStreamResonse, baosResponse); - log.error(new String(baosResponse.toByteArray())); - inputStreamResonse.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } // ?q=id%3Ac6a8c20f-3503-4ded-b395-98fcb0fdd78c+OR+f5aaac58-dee1-4254-8cc4-95c5626ab037+OR+f3229cfb-2c53-4aa0-8437-057c2a52f502&version=2.2 @@ -288,8 +262,8 @@ private void writeError(Exception ex, String data, InputStream inputStreamResons */ public List getDocumentsById(String uir, List ids) throws IOException, XPathExpressionException, EncoderException { - List docs = getDocumentsByField(uir, ids, SolrElementField.FIELD_SERIES_ID, false); - docs.addAll(getDocumentsByField(uir, ids, SolrElementField.FIELD_ID, false)); + List docs = getDocumentsByField(uir, ids, SolrElementField.FIELD_ID, false); + //docs.addAll(getDocumentsByField(uir, ids, SolrElementField.FIELD_SERIES_ID, false)); return docs; } @@ -312,8 +286,8 @@ public SolrDoc getDocumentBySeriesId(String seriesId, String uir) throws Malform StringBuilder query = new StringBuilder(); //query.append("q=" + SolrElementField.FIELD_SERIES_ID + ":\"" + escapeQueryChars(seriesId) + "\" AND -obsoletedBy:*"); query.append(SolrElementField.FIELD_SERIES_ID + ":" + escapeQueryChars(seriesId) + (" AND -obsoletedBy:*")); - log.info("HTTPService.getDocumentBeySeriesId - the uir is " + uir); - log.info("HTTPService.getDocumentBeySeriesId - the query is " + query.toString()); + log.debug("HTTPService.getDocumentBeySeriesId - the uir is " + uir); + log.debug("HTTPService.getDocumentBeySeriesId - the query is " + query.toString()); //Get the SolrDoc by querying for it List list = new ArrayList(); list.addAll(doRequest(uir, query, MAX_ROWS)); @@ -326,6 +300,26 @@ public SolrDoc getDocumentBySeriesId(String seriesId, String uir) throws Malform return doc; } + + /** + * Get a single solr doc for a given id + * @param uir the query url + * @param id the id to identify the solr doc + * @return the solr doc associated with the given id. Return null if nothing was found. + * @throws XPathExpressionException + * @throws IOException + * @throws EncoderException + */ + public SolrDoc getSolrDocumentById(String uir, String id) throws XPathExpressionException, + IOException, EncoderException { + int targetIndex = 0; + SolrDoc doc = null; + List list = getDocumentById(uir, id); + if(list != null && !list.isEmpty()) { + doc = list.get(targetIndex); + } + return doc; + } public List getDocumentById(String uir, String id) throws IOException, XPathExpressionException, EncoderException { @@ -347,7 +341,7 @@ public List getDocumentsByField(String uir, List fieldValues, return null; } - loadSolrSchemaFields(); + //loadSolrSchemaFields(); List docs = new ArrayList(); @@ -399,7 +393,7 @@ public List getDocumentsByResourceMapFieldAndIsDocumentedByField(String private List getDocumentsByTwoFields(String uir, String field1, String field1Value, String field2, String field2Value) throws IOException, XPathExpressionException, EncoderException { - loadSolrSchemaFields(); + //loadSolrSchemaFields(); List docs = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(field1 + ":").append(escapeQueryChars(field1Value)); @@ -417,10 +411,12 @@ private List doRequest(String uir, StringBuilder sb, String rows) throw params.add(new BasicNameValuePair(PARAM_ROWS, rows)); params.add(new BasicNameValuePair(PARAM_INDENT, VALUE_INDENT_ON)); params.add(new BasicNameValuePair(PARAM_RETURN, VALUE_WILDCARD)); + params.add(new BasicNameValuePair(WT, "xml")); + params.add(new BasicNameValuePair(ARCHIVED_FIELD, ARCHIVED_SHOWING_VALUE));//make sure archived objects being included String paramString = URLEncodedUtils.format(params, "UTF-8"); String requestURI = uir + "?" + paramString; - log.info("REQUEST URI= " + requestURI); + log.debug("HTTPService.doRequest - REQUEST URI: " + requestURI); HttpGet commandGet = new HttpGet(requestURI); HttpResponse response = getHttpClient().execute(commandGet); @@ -476,11 +472,11 @@ public void setSolrSchemaPath(String path) { SOLR_SCHEMA_PATH = path; } - private void loadSolrSchemaFields() { + private void loadSolrSchemaFields() throws IOException, ParserConfigurationException, SAXException { if (SOLR_SCHEMA_PATH != null && validSolrFieldNames.isEmpty()) { Document doc = loadSolrSchemaDocument(); NodeList nList = doc.getElementsByTagName("copyField"); - List copyDestinationFields = new ArrayList(); + copyDestinationFields = new ArrayList(); for (int i = 0; i < nList.getLength(); i++) { Node node = nList.item(i); String destinationField = node.getAttributes().getNamedItem("dest").getNodeValue(); @@ -495,55 +491,74 @@ private void loadSolrSchemaFields() { } fields.removeAll(copyDestinationFields); validSolrFieldNames = fields; - fields.remove("_version_"); + //fields.remove("_version_"); } } - private Document loadSolrSchemaDocument() { - + private Document loadSolrSchemaDocument() throws IOException, ParserConfigurationException, SAXException { Document doc = null; - File schemaFile = new File(SOLR_SCHEMA_PATH); - if (schemaFile != null) { - FileInputStream fis = null; + InputStream fis = null; + if (SOLR_SCHEMA_PATH.startsWith("http://") || SOLR_SCHEMA_PATH.startsWith("https://")) { + log.info("HTTPService.loadSolrSchemaDocument - will load the schema file from " + SOLR_SCHEMA_PATH + " by http client"); + HttpGet commandGet = new HttpGet(SOLR_SCHEMA_PATH); + HttpResponse response; try { - fis = new FileInputStream(schemaFile); - } catch (FileNotFoundException e) { - log.error(e.getMessage(), e); + response = getHttpClient().execute(commandGet); + HttpEntity entity = response.getEntity(); + fis = entity.getContent(); + } catch (IOException e) { + log.error("HTTPService.loadSolrSchemaDocument - can't get the schema doc from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); + throw e; + } + } else { + log.info("HTTPService.loadSolrSchemaDocument - will load the schema file from " + SOLR_SCHEMA_PATH + " by http client"); + File schemaFile = new File(SOLR_SCHEMA_PATH); + if (schemaFile != null) { + try { + fis = new FileInputStream(schemaFile); + } catch (FileNotFoundException e) { + log.error("HTTPService.loadSolrSchemaDocument - can't get the schema doc from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); + throw e; + } } + } + if (fis != null) { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = null; try { dBuilder = dbFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - log.error(e.getMessage(), e); - } - try { doc = dBuilder.parse(fis); + } catch (ParserConfigurationException e) { + log.error("HTTPService.loadSolrSchemaDocument - can't parse the schema doc from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); + throw e; } catch (SAXException e) { - log.error(e.getMessage(), e); + log.error("HTTPService.loadSolrSchemaDocument - can't parse the schema doc from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); + throw e; } catch (IOException e) { - log.error(e.getMessage(), e); - } - try { - if (fis != null) { - fis.close(); + log.error("HTTPService.loadSolrSchemaDocument - can't parse the schema doc from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); + throw e; + } finally { + try { + if (fis != null) { + fis.close(); + } + } catch (IOException e) { + log.warn("HTTPService.loadSolrSchemaDocument - can't close the input stream from " + SOLR_SCHEMA_PATH + " since " + e.getMessage()); } - } catch (IOException e) { - log.error(e.getMessage(), e); } } return doc; } - public void setSolrIndexUri(String uri) { - this.solrIndexUri = uri; - } - - public String getSolrIndexUri() { - return this.solrIndexUri; - } - public HttpClient getHttpClient() { return httpRequestFactory.getHttpClient(); } + + /** + * Get the copy fields after parsing the solr schema + * @return + */ + public List getSolrCopyFields() { + return copyDestinationFields; + } } diff --git a/src/main/java/org/dataone/cn/indexer/solrhttp/OutputStreamHttpEntity.java b/src/main/java/org/dataone/cn/indexer/solrhttp/OutputStreamHttpEntity.java index 6e1a1476..6ffeabab 100644 --- a/src/main/java/org/dataone/cn/indexer/solrhttp/OutputStreamHttpEntity.java +++ b/src/main/java/org/dataone/cn/indexer/solrhttp/OutputStreamHttpEntity.java @@ -94,6 +94,7 @@ public void writeTo(OutputStream outputStream) throws IOException { add.serialize(outputStream, encoding); outputStream.flush(); outputStream.close(); + log.info("OutputStreamHttpEntity.writeTo - after put the the solr doc into the http output stream."); } public boolean isStreaming() { diff --git a/src/main/java/org/dataone/indexer/performance/PerformanceLogger.java b/src/main/java/org/dataone/indexer/performance/PerformanceLogger.java new file mode 100644 index 00000000..bb0c5cc4 --- /dev/null +++ b/src/main/java/org/dataone/indexer/performance/PerformanceLogger.java @@ -0,0 +1,67 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright ${year} + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Id$ + */ +package org.dataone.indexer.performance; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.dataone.configuration.Settings; + +public class PerformanceLogger { + + static final Logger defaultLogger = Logger.getLogger(PerformanceLogger.class); + + private static PerformanceLogger self = new PerformanceLogger(); // non-lazy singleton + private static final Level LOGGING_LEVEL = Level.INFO; + private static Logger perfLogger; + private static boolean enabled; + + + private PerformanceLogger() { + enabled = Settings.getConfiguration().getBoolean("dataone.indexing.performance.logging.enabled", Boolean.FALSE); + defaultLogger.warn("Setting up PerformanceLogger: set to enabled? " + enabled); + + perfLogger = Logger.getLogger("performanceStats"); + + if (perfLogger == null) { + defaultLogger.error("Unable to create Logger for performanceStats appender!"); + enabled = false; + } + } + + public static PerformanceLogger getInstance() { + return self; + } + + public void log(String id, long milliseconds) { + if (enabled) + log("" + id + ", " + milliseconds); + } + + public void log(String message) { + if (enabled) + perfLogger.log(LOGGING_LEVEL, message); + } + + public boolean isLogEnabled() { + return enabled; + } +} \ No newline at end of file diff --git a/src/main/java/org/dataone/indexer/queue/IndexQueueMessageParser.java b/src/main/java/org/dataone/indexer/queue/IndexQueueMessageParser.java new file mode 100644 index 00000000..81a725da --- /dev/null +++ b/src/main/java/org/dataone/indexer/queue/IndexQueueMessageParser.java @@ -0,0 +1,134 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.indexer.queue; + +import java.util.Map; + +import org.apache.log4j.Logger; +import org.dataone.service.exceptions.InvalidRequest; +import org.dataone.service.types.v1.Identifier; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.LongString; + +/** + * This class parses the messages coming from the index queue and + * store the information in its fields + * @author tao + * + */ +public class IndexQueueMessageParser { + private final static String HEADER_ID = "id"; //The header name in the message to store the identifier + private final static String HEADER_PATH = "path"; //The header name in the message to store the path of the object + private final static String HEADER_INDEX_TYPE = "index_type"; //The header name in the message to store the index type + + private Identifier identifier = null; + private String objectPath = null; + private String indexType = null; + private int priority = 1; + + private static Logger logger = Logger.getLogger(IndexQueueMessageParser.class); + + /** + * Parse the message from the index queue and store the information + * @param properties + * @param body + * @throws InvalidRequest + */ + public void parse(AMQP.BasicProperties properties, byte[] body) throws InvalidRequest { + if(properties == null) { + throw new InvalidRequest("0000", "The properties, which contains the index task info, cannot be null in the index queue message."); + } + Map headers = properties.getHeaders(); + if(headers == null) { + throw new InvalidRequest("0000", "The header of the properties, which contains the index task info, cannot be null in the index queue message."); + } + Object pidObj = headers.get(HEADER_ID); + if (pidObj == null) { + throw new InvalidRequest("0000", "The identifier cannot be null in the index queue message."); + } + String pid = ((LongString)pidObj).toString(); + if (pid == null || pid.trim().equals("")) { + throw new InvalidRequest("0000", "The identifier cannot be null or blank in the index queue message."); + } + logger.debug("IndexQueueMessageParser.parse - the identifier in the message is " + pid); + identifier = new Identifier(); + identifier.setValue(pid); + + Object typeObj = headers.get(HEADER_INDEX_TYPE); + if (typeObj == null) { + throw new InvalidRequest("0000", "The index type cannot be null in the index queue message."); + } + indexType = ((LongString)typeObj).toString(); + if (indexType == null || indexType.trim().equals("")) { + throw new InvalidRequest("0000", "The index type cannot be null or blank in the index queue message."); + } + logger.debug("IndexQueueMessageParser.parse - the index type in the message is " + indexType); + + Object pathObject = headers.get(HEADER_PATH); + if (pathObject != null) { + objectPath = ((LongString)pathObject).toString(); + } + logger.debug("IndexQueueMessageParser.parse - the file path of the object which be indexed in the message is " + objectPath); + try { + priority = properties.getPriority(); + } catch (NullPointerException e) { + logger.info("IndexQueueMessageParser.parse - the priority is not set in the message and we will set it one."); + priority =1; + } + logger.debug("IndexQueueMessageParser.parse - the priority in the message is " + priority); + } + + /** + * Get the identifier after calling the parse method to parse the index queue message. + * @return the identifier. It shouldn't be null or blank + */ + public Identifier getIdentifier() { + return identifier; + } + + /** + * Get the file path of the object, which will be indexed, + * after calling the parse method to parse the index queue message. + * @return the file path of the object. It can be null or blank, which + * means we don't have the object in the system. + */ + public String getObjectPath() { + return objectPath; + } + + /** + * Get the type of the index task after calling the parse method to parse the index queue message. + * @return the type of the index task. It can be create, delete or sysmeta. + */ + public String getIndexType() { + return indexType; + } + + /** + * Get the priority of the index task after calling the parse method to parse the index queue message. + * @return the priority of the index task + */ + public int getPriority() { + return priority; + } + +} diff --git a/src/main/resources/application-context-annotator.xml b/src/main/resources/application-context-annotator.xml index 3c0153b0..6cde4cc3 100644 --- a/src/main/resources/application-context-annotator.xml +++ b/src/main/resources/application-context-annotator.xml @@ -4,7 +4,8 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - + + diff --git a/src/main/resources/application-context-datacite-3.xml b/src/main/resources/application-context-datacite-3.xml index 8f9a5b7b..1a106ae2 100644 --- a/src/main/resources/application-context-datacite-3.xml +++ b/src/main/resources/application-context-datacite-3.xml @@ -37,6 +37,9 @@ + + + diff --git a/src/main/resources/application-context-datacite-base.xml b/src/main/resources/application-context-datacite-base.xml index d3baa3d4..1062f948 100644 --- a/src/main/resources/application-context-datacite-base.xml +++ b/src/main/resources/application-context-datacite-base.xml @@ -146,4 +146,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/application-context-dc-oai.xml b/src/main/resources/application-context-dc-oai.xml index 0f99ebbf..ccc2bb60 100644 --- a/src/main/resources/application-context-dc-oai.xml +++ b/src/main/resources/application-context-dc-oai.xml @@ -26,6 +26,7 @@ + @@ -61,4 +62,11 @@ - \ No newline at end of file + + + + + + + + diff --git a/src/main/resources/application-context-delete-subprocessors.xml b/src/main/resources/application-context-delete-subprocessors.xml index b37569de..2cb99f58 100644 --- a/src/main/resources/application-context-delete-subprocessors.xml +++ b/src/main/resources/application-context-delete-subprocessors.xml @@ -9,7 +9,8 @@ http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - + + documents isDocumentedBy @@ -26,7 +27,8 @@ - + + sem_annotates sem_annotated_by diff --git a/src/main/resources/application-context-eml-annotation.xml b/src/main/resources/application-context-eml-annotation.xml index 9b3a59e4..0701438b 100644 --- a/src/main/resources/application-context-eml-annotation.xml +++ b/src/main/resources/application-context-eml-annotation.xml @@ -3,7 +3,8 @@ xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - + + https://eml.ecoinformatics.org/eml-2.2.0 diff --git a/src/main/resources/application-context-eml-base.xml b/src/main/resources/application-context-eml-base.xml index 3e935892..55e942f6 100644 --- a/src/main/resources/application-context-eml-base.xml +++ b/src/main/resources/application-context-eml-base.xml @@ -564,6 +564,29 @@ value="//software/implementation/distribution/online/url/text()"/> + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/application-context-eml200.xml b/src/main/resources/application-context-eml200.xml index e216d0a9..e15cf07a 100644 --- a/src/main/resources/application-context-eml200.xml +++ b/src/main/resources/application-context-eml200.xml @@ -61,6 +61,7 @@ + diff --git a/src/main/resources/application-context-eml201.xml b/src/main/resources/application-context-eml201.xml index 99d8f2f1..e3217bb1 100644 --- a/src/main/resources/application-context-eml201.xml +++ b/src/main/resources/application-context-eml201.xml @@ -61,6 +61,7 @@ + diff --git a/src/main/resources/application-context-eml210.xml b/src/main/resources/application-context-eml210.xml index ab5e4989..daabcff7 100644 --- a/src/main/resources/application-context-eml210.xml +++ b/src/main/resources/application-context-eml210.xml @@ -65,6 +65,7 @@ + diff --git a/src/main/resources/application-context-eml211.xml b/src/main/resources/application-context-eml211.xml index b88f776a..a67cd0c3 100644 --- a/src/main/resources/application-context-eml211.xml +++ b/src/main/resources/application-context-eml211.xml @@ -61,6 +61,7 @@ + diff --git a/src/main/resources/application-context-eml220.xml b/src/main/resources/application-context-eml220.xml index d6da1959..b73e01c8 100644 --- a/src/main/resources/application-context-eml220.xml +++ b/src/main/resources/application-context-eml220.xml @@ -66,6 +66,9 @@ + + + diff --git a/src/main/resources/application-context-isotc211-base.xml b/src/main/resources/application-context-isotc211-base.xml index b607cd48..88c9104b 100644 --- a/src/main/resources/application-context-isotc211-base.xml +++ b/src/main/resources/application-context-isotc211-base.xml @@ -329,5 +329,26 @@ value="//gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorFormat/gmd:MD_Format/gmd:version/gco:CharacterString/text()"/> + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/src/main/resources/application-context-isotc211-noaa.xml b/src/main/resources/application-context-isotc211-noaa.xml index d66f7b11..e4f51948 100644 --- a/src/main/resources/application-context-isotc211-noaa.xml +++ b/src/main/resources/application-context-isotc211-noaa.xml @@ -51,10 +51,12 @@ + + - \ No newline at end of file + diff --git a/src/main/resources/application-context-isotc211-pangaea.xml b/src/main/resources/application-context-isotc211-pangaea.xml index 54effe69..3f655867 100644 --- a/src/main/resources/application-context-isotc211-pangaea.xml +++ b/src/main/resources/application-context-isotc211-pangaea.xml @@ -51,10 +51,12 @@ + + - \ No newline at end of file + diff --git a/src/main/resources/application-context-isotc211.xml b/src/main/resources/application-context-isotc211.xml index 5b97d829..7990a64d 100644 --- a/src/main/resources/application-context-isotc211.xml +++ b/src/main/resources/application-context-isotc211.xml @@ -54,7 +54,9 @@ + + - \ No newline at end of file + diff --git a/src/main/resources/application-context-json-ld.xml b/src/main/resources/application-context-json-ld.xml index 252d5028..aa12d9ff 100644 --- a/src/main/resources/application-context-json-ld.xml +++ b/src/main/resources/application-context-json-ld.xml @@ -24,6 +24,8 @@ + + diff --git a/src/main/resources/application-context-ontology-model-service.xml b/src/main/resources/application-context-ontology-model-service.xml index ade6f45c..673182f8 100644 --- a/src/main/resources/application-context-ontology-model-service.xml +++ b/src/main/resources/application-context-ontology-model-service.xml @@ -1,7 +1,4 @@ - + @@ -11,7 +8,7 @@ - + http://purl.dataone.org/ontologies/observation/d1-ECSO.owl http://purl.dataone.org/ontologies/provenance/ProvONE/v1/owl/provone.owl @@ -29,6 +26,13 @@ http://ecoinformatics.org/oboe/oboe.1.2/oboe-chemistry.owl http://ecoinformatics.org/oboe/oboe.1.2/oboe-anatomy.owl http://ecoinformatics.org/oboe-ext/sbclter.1.0/oboe-sbclter.owl + https://purl.dataone.org/odo/MOSAIC_ + http://purl.dataone.org/odo/ARCRC + https://purl.dataone.org/odo/ADCAD_ + http://purl.dataone.org/odo/SENSO_ + http://purl.dataone.org/odo/SALMON_ + http://purl.dataone.org/odo/SALMON_alignment_ + http://purl.dataone.org/odo/SASAP_ @@ -37,24 +41,31 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -69,7 +80,7 @@ SELECT ?annotation_property_uri WHERE { - <$CONCEPT_URI> rdfs:subPropertyOf* ?annotation_property_uri . + <$CONCEPT_URI> (owl:equivalentProperty|^owl:equivalentProperty)*/rdfs:subPropertyOf* ?annotation_property_uri . } ]]> @@ -84,12 +95,14 @@ PREFIX rdf: PREFIX rdfs: PREFIX owl: + PREFIX skos: SELECT ?annotation_value_uri - WHERE { - <$CONCEPT_URI> rdfs:subClassOf* ?annotation_value_uri . - } - ]]> + WHERE + { + <$CONCEPT_URI> (rdf:type|(owl:equivalentClass|^owl:equivalentClass)*|(owl:sameAs|^owl:sameAs)*|(skos:exactMatch|^skos:exactMatch)*)/rdfs:subClassOf* ?annotation_value_uri . + } + ]]> diff --git a/src/main/resources/application-context-rdfxml.xml b/src/main/resources/application-context-rdfxml.xml index a7bc3301..e5375e89 100644 --- a/src/main/resources/application-context-rdfxml.xml +++ b/src/main/resources/application-context-rdfxml.xml @@ -4,6 +4,8 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + http://www.w3.org/TR/rdf-syntax-grammar diff --git a/src/main/resources/application-context-reprocess-subprocessors.xml b/src/main/resources/application-context-reprocess-subprocessors.xml deleted file mode 100644 index 470856b1..00000000 --- a/src/main/resources/application-context-reprocess-subprocessors.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - resourceMap - - - - - - \ No newline at end of file diff --git a/src/main/resources/application-context-resourcemap.xml b/src/main/resources/application-context-resourcemap.xml index 02e2e68e..2279dc96 100644 --- a/src/main/resources/application-context-resourcemap.xml +++ b/src/main/resources/application-context-resourcemap.xml @@ -3,6 +3,8 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + http://www.openarchives.org/ore/terms diff --git a/src/main/resources/application-context-schema-org.xml b/src/main/resources/application-context-schema-org.xml index a34ba769..448f306e 100644 --- a/src/main/resources/application-context-schema-org.xml +++ b/src/main/resources/application-context-schema-org.xml @@ -393,6 +393,68 @@ + + + + + + PREFIX rdfs: + PREFIX xsd: + PREFIX SO: + + SELECT ?licenseUrl + WHERE { + ?datasetId rdf:type SO:Dataset . + ?datasetId SO:license ?license . + # Don't include referenced sub-Datasets (i.e. a Dataset in a 'hasPart' property) + FILTER NOT EXISTS { ?id SO:hasPart ?datasetId . } + { + BIND(STR(?license) AS ?licenseUrl) . + } + UNION + { + ?license rdf:id ?licenseUrl . + } + UNION + { + ?license SO:license ?licenseUrl . + } + } + ]]> + + + + + + + + + + PREFIX rdfs: + PREFIX xsd: + PREFIX SO: + + SELECT ?licenseName + WHERE { + ?datasetId rdf:type SO:Dataset . + ?datasetId SO:license ?license . + # Don't include referenced sub-Datasets (i.e. a Dataset in a 'hasPart' property) + FILTER NOT EXISTS { ?id SO:hasPart ?datasetId . } + { + BIND(STR(?license) AS ?licenseName) . + } + UNION + { + ?license SO:name ?licenseName . + } + } + ]]> + + + + diff --git a/src/main/resources/application-context-systemmeta064.xml b/src/main/resources/application-context-systemmeta064.xml deleted file mode 100644 index 4c2837f1..00000000 --- a/src/main/resources/application-context-systemmeta064.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/application-context-systemmeta100.xml b/src/main/resources/application-context-systemmeta100.xml deleted file mode 100644 index 60e0bdec..00000000 --- a/src/main/resources/application-context-systemmeta100.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/application-context-systemmeta200.xml b/src/main/resources/application-context-systemmeta200.xml index 1d4ddeef..dbb6cf2a 100644 --- a/src/main/resources/application-context-systemmeta200.xml +++ b/src/main/resources/application-context-systemmeta200.xml @@ -103,14 +103,14 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/index-parser-context.xml b/src/main/resources/index-parser-context.xml index 2971af5b..e696860d 100644 --- a/src/main/resources/index-parser-context.xml +++ b/src/main/resources/index-parser-context.xml @@ -8,48 +8,51 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -58,7 +61,9 @@ - + + + @@ -215,14 +220,6 @@ - - - - - - - - @@ -238,12 +235,14 @@ - - - + + + - + + + diff --git a/src/main/resources/index-processor-context.xml b/src/main/resources/index-processor-context.xml deleted file mode 100644 index 4074d13a..00000000 --- a/src/main/resources/index-processor-context.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/main/resources/index-solr-schema.xml b/src/main/resources/index-solr-schema.xml deleted file mode 100644 index 485f193b..00000000 --- a/src/main/resources/index-solr-schema.xml +++ /dev/null @@ -1,899 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id - text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/index_processor.properties b/src/main/resources/index_processor.properties deleted file mode 100644 index 8dda33b1..00000000 --- a/src/main/resources/index_processor.properties +++ /dev/null @@ -1,4 +0,0 @@ -#Settings for overriding defaults in the d1_cn_index_processor - -objectBasePath= -taskListPath=/tmp/indexing/index_tasks.txt diff --git a/src/main/resources/log4j2.properties b/src/main/resources/log4j2.properties new file mode 100644 index 00000000..75a89bc2 --- /dev/null +++ b/src/main/resources/log4j2.properties @@ -0,0 +1,64 @@ +# /** +# * '$rcsfile: log4j2.properties,v $' +# * copyright: 2020 regents of the university of california and the +# * national center for ecological analysis and synthesis +# * +# * this program is free software; you can redistribute it and/or modify +# * it under the terms of the gnu general public license as published by +# * the free software foundation; either version 2 of the license, or +# * (at your option) any later version. +# * +# * this program is distributed in the hope that it will be useful, +# * but without any warranty; without even the implied warranty of +# * merchantability or fitness for a particular purpose. see the +# * gnu general public license for more details. +# * +# * you should have received a copy of the gnu general public license +# * along with this program; if not, write to the free software +# * foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa +# */ + +name=Log4j2PropertiesConfigForDataONEIndex + +#Reload the file every 120 seconds +monitorInterval=120 + +############################################################# +# the appendder named consoleAppender with the Console type # +############################################################# +appender.consoleAppender.type=Console +appender.consoleAppender.name=consoleAppender +appender.consoleAppender.layout.type=PatternLayout +appender.consoleAppender.layout.pattern=dataone-indexer %d{yyyyMMdd-HH:mm:ss}: [%p]: %m [%C:%M:%L]%n + +################################## +# the root logger configuration # +################################## +rootLogger.level=INFO +rootLogger.appenderRef.console.ref=consoleAppender + +################################################################################ +# a customized logger - dataone for the package org.dataone.client on console # +################################################################################ +logger.dataone.name=org.dataone.client +logger.dataone.level=ERROR +logger.dataone.appenderRef.console.ref=consoleAppender + +logger.spring.name=org.springframework +logger.spring.level=WARN +logger.spring.appenderRef.console.ref=consoleAppender + +################################################################################ +# a performance logger - go to console by default # +################################################################################ +logger.performance.name=performanceStats +logger.performance.level=INFO +logger.performance.appenderRef.console.ref=consoleAppender + + +################################################################################ +# custom for org.apache.http.impl.conn.PoolingHttpClientConnectionManager # +################################################################################ +logger.apacheWire.name=org.apache.http.impl.conn.PoolingHttpClientConnectionManager +logger.apacheWire.level=ERROR +logger.apacheWire.appenderRef.console.ref=consoleAppender diff --git a/src/main/resources/ontologies/ADCAD.owl b/src/main/resources/ontologies/ADCAD.owl new file mode 100644 index 00000000..bf11f6aa --- /dev/null +++ b/src/main/resources/ontologies/ADCAD.owl @@ -0,0 +1,481 @@ + + + + + Ethnology + + + + + + + Soil Science + + + + + + Logic + + + + + + Data science + + + + + + Formal Science + + + + + + + Electrical Engineering + + + + + + + Geochemistry + + + + + Academic Discipline + + + + + + + Linguistics + + + + Version 1.0.0 + + + Arctic Data Center Academic Disciplines Ontology (ADCAD) + + Ontology to support disciplinary annotation of datasets housed at the Arctic Data Center (https://arcticdata.io) + + 2021-12-09 + + + + + + Forestry + + + + + + + Neuroscience + + + + + + Structural Biology + + + + + + + Social Science + + + + + + + Astronomy + + + + + + + Political Science + + + + + + + Biodiversity + + + + + + + Theoretical Biology + + + + + + + Geophysics + + + + + + + Agricultural Research + + + + + + + Mechanical Engineering + + + + + + Cyberinfrastructure + + + + + + + Engineering + + + + + + + Physics + + + + + + + Glaciology + + + + + + + Ecology + + + + + + Natural Science + + + + + + + Systems Engineering + + + + + + + Geodesy + + + + + + + Atmospheric Science + + + + + + + Epidemiology + + + + + + + Cell Biology + + + + + + + Archaeology + + + + + + + Bioinformatics + + + + + + + International Relations + + + + + + + Materials Science + + + + + + + Geology + + + + + + + Civil Engineering + + + + + + + Human Geography + + + + + + + Chemistry + + + + + + + Zoology + + + + + + + Evolutionary Biology + + + + + + + Life Science + + + + + + + Psychology + + + + + + + Geoscience + + + + + + + Biophysics + + + + + + + Software Engineering + + + + + + + Developmental Biology + + + + + + Cryology + + + + + + + Statistics + + + + + + + Anatomy + + + + + + Materials Engineering + + + + + + + Oceanography + + + + + + + Chemical Engineering + + + + + + + Computer Science + + + + + + + Biochemistry + + + + + + + Physical Geography + + + + + + + Sociology + + + + + + + Physical Science + + + + + + + Anthropology + + + + + + + Plant Science + + + + + + + Genetics + + + + + + + Hydrology + + + + + + + Education + + + + + + + Mathematics + + + + + + + Palaeontology + + + + + + + Microbiology + + + + + + + Economics + + + diff --git a/src/main/resources/ontologies/ARCRC.owl b/src/main/resources/ontologies/ARCRC.owl new file mode 100644 index 00000000..034fc34a --- /dev/null +++ b/src/main/resources/ontologies/ARCRC.owl @@ -0,0 +1,1116 @@ + + + + + + + + + + + + + + + + + + + + 2020-11-04T19:46:54Z + definition + + + + + + + + + 2020-11-04T19:47:37Z + definition source + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2020-11-04T22:51:54Z + might want to delete before we import ECSO so that there are no conflict issues (usesProtocol already exists in ECSO) + usesProtocol + + + + + + + + + 2020-11-04T22:53:03Z + adding this object property, but can delete later if not appropriate + +e.g. of usage for NSIDC sea ice index (a target variable) that is calculated using both ice extent and ice concentration data: + +axiom = calculatedUsing only (Sea Ice Extent and Sea Ice Concentration) + calculatedUsing + + + + + + + + + + + + + + + + + + + + Vital Signs are indicators of the state of the Arctic environmental system. They are assessed using measurements of and/or proxies for target variables. + inferred from https://arctic.noaa.gov/Report-Card + + 2020-11-04T19:24:38Z + Issued annually since 2006, the Arctic Report Card (ARC) is a timely and peer-reviewed source for clear, reliable and concise environmental information on the current state of different components of the Arctic environmental system relative to historical records. The Report Card is intended for a wide audience, including scientists, teachers, students, decision-makers and the general public interested in the Arctic environment and science. + Arctic Essays 2020 + + + + + + + + + Snow covering the Arctic land surface, which is characterized by three variables: snow cover extent (how much area is covered by snow), snow cover duration (how long snow continuously remains on the land surface), and snow water equivalent (how much water is stored in solid form by the snowpack; a function of snow depth and density). + + 2020-11-04T19:42:36Z + Terrestrial Snow Cover Indicator + + + + + + Snow covering the Arctic land surface, which is characterized by three variables: snow cover extent (how much area is covered by snow), snow cover duration (how long snow continuously remains on the land surface), and snow water equivalent (how much water is stored in solid form by the snowpack; a function of snow depth and density). + adapted from https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/843/Terrestrial-Snow-Cover + + + + + + + + + The quantity of aboveground vegetation in the Arctic tundra. + + 2020-11-04T19:42:42Z + Tundra Greenness Indicator + + + + + The quantity of aboveground vegetation in the Arctic tundra. + Normalized Difference Vegetation Index, NDVI (http://www.purl.dataone.org/odo/ECSO_00010076) is highly correlated with Tundra Greeness. + + + + + + + + + An air temperature measured two-meters above the land or ocean surface. + + 2020-11-04T19:42:51Z + Surface Air Temperature Indicator + + + + + + + + + A vast body of ice covering 1.71 million km2, roughly 80% of the surface of Greenland. + + Greenland Ice Sheet Indicator + https://nsidc.org/cryosphere/glossary/ + + + + + + + + + The process of carbon fixation in the Arctic Ocean, primarily by autotrophic single-celled algae living in sea ice (ice algae) and water column (phytoplankton). + + 2020-11-04T19:43:13Z + Arctic Ocean Primary Productivity Indicator + Arctic Ocean Primary Productivity Carbon Flux + + + + + + + + + A water temperature which inheres in water close to the surface of an ocean or sea. The exact meaning of surface varies according to the measurement method used, but it is between 1 millimetre (0.04 in) and 20 metres (70 ft) below the sea surface. + + 2020-11-04T19:43:19Z + Sea Surface Temperature Indicator + http://purl.dataone.org/odo/ECSO_00001523 + SST +temperature of sea surface +ocean surface temperature +temperature of the ocean surface + + + + + + + + + Ice which has formed by the freezing of sea (saline) water. + + 2020-11-04T19:43:23Z + Sea Ice Indicator + http://purl.obolibrary.org/obo/ENVO_00002200 + + + + + + + + + + + + + + + + + + 2020-12-03T22:29:42Z + Arctic Report Card Supporting Dataset + + + + + + + + + Vital Signs are indicators of the state of the Arctic environmental system. They are assessed using measurements of and/or proxies for Key Variables. + inferred from https://arctic.noaa.gov/Report-Card + + 2020-11-05T00:43:25Z + Arctic Vital Signs + + + + + Vital Signs are indicators of the state of the Arctic environmental system. They are assessed using measurements of and/or proxies for Key Variables. + Issued annually since 2006, the Arctic Report Card is a timely and peer-reviewed source for clear, reliable and concise environmental information on the current state of different components of the Arctic environmental system relative to historical records. The Report Card is intended for a wide audience, including scientists, teachers, students, decision-makers and the general public interested in the Arctic environment and science. + +Find current and past assessments of the Arctic Report Card Vital Signs by visiting: https://arctic.noaa.gov/Report-Card + + + + + + + + + + 2020-12-03T22:30:07Z + Arctic Report Card Supporting Dataset for the 2020 Report + + + + + + + + + + 2020-11-05T23:04:20Z + Measurements and/or proxies used in the assessments of Arctic Report Card Essays. + Arctic Key Variable + Arctic Target Variables + + + + + + + + + Measurements and/or proxies for assessing the 2020 Arctic Vital Signs. + + 2020-11-05T23:04:37Z + Arctic Key Variables 2020 + + + + + + + + + + + + + + + + + The height of a given point in the atmosphere in units proportional to the potential energy of unit mass (geopotential) at this height relative to sea level. + + 2020-11-05T23:06:48Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + geopotential height + geopotential altitude + + + + + + + + + The sum of mean monthly Land Surface Temperatures (LST) for months with mean temperatures above freezing (>0°C). + + 2020-11-05T23:07:00Z + This Key Variable is used to inform Vital Sign 'Tundra Greenness.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/838/Tundra-Greenness + Summer Warmth Index + SWI + + + + + + + + + Air temperature measured two-meters above the land or ocean surface. + + 2020-11-05T23:07:17Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + surface air temperature + + + + + + + + + An air temperature measured in the lower troposphere (i.e. at 925 hPa). + + 2020-11-05T23:08:13Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + near-surface air temperature + + + + + + + + + + + + + + + + + + + + + + + + + + How much area is covered in snow. + + 2020-11-05T23:10:34Z + This Key Variable is used to inform Vital Sign 'Terrestrial Snow Cover.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/843/Terrestrial-Snow-Cover + snow cover extent + + SCE + + + + + + + + + How long snow continuously remains on land surfaces. + + 2020-11-05T23:10:49Z + This Key Variable is used to inform Vital Sign 'Terrestrial Snow Cover.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/843/Terrestrial-Snow-Cover + snow cover duration + SCD + + + + + + + + + + + + + + + + + The fractional area coverage of sea ice over a given region. + + 2020-11-05T23:11:30Z + This Key Variable is used to inform Vital Sign 'Sea Ice.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/841/Sea-Ice + sea ice concentration + + + + + + + + + + + + + + + + + The total volume of sea ice (sea ice thickness multiplied by sea ice concentration) integrated over a given area. + + 2020-11-05T23:12:03Z + This Key Variable is used to inform Vital Sign 'Sea Ice.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/841/Sea-Ice + sea ice volume + + + + + + + + + The distance between the bottom of the ice to the top surface of the ice. + + 2020-11-05T23:12:13Z + This Key Variable is used to inform Vital Sign 'Sea Ice.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/841/Sea-Ice + sea ice thickness + + + + + + + + + + The duration of time a particular area of sea ice has persisted in its solid state. + + 2020-11-05T23:12:34Z + This Target Variable is used to inform Vital Sign 'Sea Ice.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/841/Sea-Ice + age of sea ice + + + + + The duration of time a particular area of sea ice has persisted in its solid state. + Age of sea ice is calculated using data from the National Snow & Ice Data Center (NSIDC). + + + + + + + + + The loss of solid ice from a glacier into the ocean via calving. + + 2020-11-05T23:13:10Z + This Key Variable is used to inform Vital Sign 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + solid ice discharge + + + + + The loss of solid ice from a glacier into the ocean via calving. + The rate of solid ice discharge depends on the speed of glacier ice flow, the thickness of the ice, and the advance or retreat of the terminus of the glacier. + + + + + + + + + The fraction of solar radiation reflected by a surface. + + 2020-11-05T23:13:19Z + This Key Variable is used to inform Vital Sign, 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + surface albedo + + + + + + + + + + Difference in Arctic land air temperature form the 1981-2010 mean (a positive anomaly is a higher temperature; a negative anomaly is a lower temperature). + + 2020-11-05T23:13:32Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + Arctic land air temperature anomaly + + + + + + + + + Difference in global temperature from the 1981-2010 mean (a positive anomaly is a higher temperature; a negative anomaly is a lower temperature). + + 2020-11-05T23:13:49Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + global land air temperature anomaly + + + + + + + + + Difference in seasonal or annual air temperatures from the 1981-2010 mean (a positive anomaly is a higher temperature; a negative anomaly is a lower temperature). + + 2020-11-05T23:14:06Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + seasonal/annual anomaly patterns for air temperatures + + + + + + + + + Quasi-liquid film that can occur on the surface of a solid even below melting point; the thickness of the film is temperature dependent. + + 2020-11-05T23:14:24Z + This Key Variable is used to inform Vital Sign 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + surface melt + + + + + + + + + + The net balance between mass gain vs. mass loss. + + 2020-11-05T23:14:38Z + This Key Variable is used to inform Vital Sign 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + total mass balance + + + + + + The net balance between mass gain vs. mass loss. + Total mass balance is commonly applied for measuring land ice (glaciers and ice sheets). It is typically measured over one year, which includes one accumulation season plus one ablation season (often September - August for the Arctic) + + + + + + + + + Net balance between ice gained (via accumulation) vs. ice loss (via ablation) at the surface. + + 2020-11-05T23:14:51Z + This Key Variable is used to inform Vital Sign 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + surface mass balance + + + + + + Net balance between ice gained (via accumulation) vs. ice loss (via ablation) at the surface. + Surface mass balance is commonly applied for measuring land ice (glaciers and ice sheets). + + + + + + + + + Loss in ice mass due to melting, sublimation, evaporation, ice calving, aeolian processes like blowing snow, avalanche, and any other ablation. + + 2020-11-05T23:15:01Z + This Key Variable was used to inform the Vital Sign, 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + ice ablation + ice ablation zone: http://purl.obolibrary.org/obo/ENVO_01000914 +glacial ice ablation process: http://purl.obolibrary.org/obo/ENVO_01000919 + + + + + + + + + The annual change in total ice area of a marine-terminating glacier as a result of the advance or retreat of the terminal end of a glacier. + + 2020-11-05T23:15:16Z + This Key Variable is used to inform Vital Sign, 'Greenland Ice Sheet.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/842/Greenland-Ice-Sheet + marine terminating glacier front annual area change + + + + + + + + + The large-scale movement of air, and together with ocean circulation, is the means by which thermal energy is redistributed on the surface of the earth. + + 2020-11-06T00:49:30Z + This Key Variable is used to inform Vital Sign 'Surface Air Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/835/Surface-Air-Temperature + atmospheric wind circulation + https://glossary.ametsoc.org/wiki/Wind + + + + + + + + + 2020-11-06T04:35:46Z + Issued annually since 2006, the Arctic Report Card is a timely and peer-reviewed source for clear, reliable and concise environmental information on the current state of different components of the Arctic environmental system relative to historical records. The Report Card is intended for a wide audience, including scientists, teachers, students, decision-makers and the general public interested in the Arctic environment and science. + +The main website for the Arctic Report Card as of Nov 1, 2020 is: https://arctic.noaa.gov/Report-Card + Arctic Report Card Component + + + + + + + + + + 2020-11-06T04:47:36Z + sea ice key variable + + + + + + + + + + 2020-11-06T04:48:36Z + snow key variable + + + + + + + + + + 2020-11-06T04:51:42Z + surface-based key variable + + + + + + + + + + 2020-11-06T04:59:24Z + Arctic Report Card 2020 Component + + + + + + + + + + + + + + + + + + 2020-11-06T16:07:02Z + Place + + + + + + + + + + 2020-11-19T00:56:31Z + Essays are indicators of the state of the Arctic environmental system. They are assessed using measurements of and/or proxies for Key Variables. Essays are classified under one of three categories: Vital Signs, Other Indicators, and Frostbites. + Arctic Report Card Essay + + + + + + + + + + 2020-12-01T01:21:33Z + Other Indicators + + + + + + + + + + 2020-12-01T01:21:50Z + Frostbites + + + + + + + + + + 2020-12-01T01:25:18Z + MaxNDVI is the peak NDVI value for the year and is related to the annual maximum biomass of aboveground vegetation that is reached in midsummer (typically late July or early August). + MaxNDVI + + + + + + + + + + 2020-12-01T01:28:06Z + TI (time-integrated) NDVI is the sum of the biweekly NDVI values for the growing season and is correlated with the total aboveground vegetation productivity. + TI-NDVI + TI (time-integrated) NDVI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2020-11-06T16:08:24Z + Greenland + + + + + + + + + + + + 2020-11-06T16:16:13Z + Greenland Ice Sheet + + + + + + + + + + + + 2020-11-07T01:31:38Z + Arctic Ocean + Arctic Sea + + + + + + + + + + + + + + + + + ECSO_00000324 + Particulate Organic Carbon + POC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2020-12-02T18:39:21Z + The depth of water contained within a snowpack if the snowpack were melted instantly. + https://nsidc.org/cryosphere/glossary/ + + snow water equivalent + This Key Variable is used to inform Vital Sign 'Terrestrial Snow Cover.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/843/Terrestrial-Snow-Cover + + + + NDVI + Normalized Difference Vegetation Index + 2020-11-05T23:06:29Z + A remotely sensed indicator of the quantity of aboveground vegetation in an area of land (pixel size). Calculated from distinct wavelengths of visible and near-infrared sunlight reflected by a vegetated land surface. NDVI is calculated using the equation: the near-infrared reflectance minus the red reflectance, divided by near-infrared reflectance plus red reflectance. + This Key Variable is used to inform Vital Sign 'Tundra Greenness.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/838/Tundra-Greenness + + + 2020-11-05T23:08:29Z + This Key Variable is used to inform Vital Sign 'Sea Surface Temperature.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/840/Sea-Surface-Temperature + sea surface temperature + + SST +temperature of sea surface +ocean surface temperature +temperature of the ocean surface + A water temperature which inheres in water close to the surface of an ocean or sea. The exact meaning of surface varies according to the measurement method used, but it is between 1 millimetre (0.04 in) and 20 metres (70 ft) below the sea surface. + + + Chlorophyll-a is a specific form of chlorophyll used in oxygenic photosynthesis. + This Key Variable is used to inform Vital Sign 'Arctic Ocean Primary Productivity.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/839/Arctic-Ocean-Primary-Productivity-The-Response-of-Marine-Algae-to-Climate-Warming-and-Sea-Ice-Decline + chlorophyll-a concentration + + 2020-11-05T23:10:23Z + + + + Depth of snow, which is precipitation in the form of flakes of crystalline water ice that falls from clouds. + 2020-11-05T23:10:59Z + snow depth + This Key Variable is used to inform Vital Sign 'Terrestrial Snow Cover.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/843/Terrestrial-Snow-Cover + + + + + This Key Variable is used to inform Vital Sign 'Sea Ice.' See the 2019 Essay here: https://arctic.noaa.gov/Report-Card/Report-Card-2019/ArtMID/7916/ArticleID/841/Sea-Ice + Defines a region as "ice-covered' or "not ice-covered" based on a threshold percentage of sea ice concentration per data cell. + 2020-11-05T23:11:42Z + sea ice extent + + + + + Defines a region as "ice-covered' or "not ice-covered" based on a threshold percentage of sea ice concentration per data cell. + A threshold of 15% is used for the Arctic Report Card assessments and is the most commonly used threshold. + + + Geographic Named Place + 2020-11-06T16:06:54Z + + General class for containing places and locations referenced in the Arctic Report Card + + + + wasInfluencedBy + 2020-12-01T17:55:14Z + + + DOC + Dissolved Organic Carbon + + + List + + + + + + + diff --git a/src/main/resources/ontologies/MOSAiC.owl b/src/main/resources/ontologies/MOSAiC.owl new file mode 100644 index 00000000..f1b07d6a --- /dev/null +++ b/src/main/resources/ontologies/MOSAiC.owl @@ -0,0 +1,151097 @@ + + + + + + + + 2021-04-16 + + Ontology to support Semantic Annotation of MOSAiC datasets housed in the Arctic Data Center (https://arcticdata.io). + + MOSAiC Ontology + mosaic + https://purl.dataone.org/odo/MOSAIC_ + Developed with Protege 5.5.0 +Inferences using Pellet 2.2.0 + The MOSAiC ontology is created at NCEAS, UCSB by staff from the Arctic Data Center, and is licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) + The MOSAiC ontology is licensed under CC BY 4.0. You are free to share (copy and redistribute the material in any medium or format) and adapt (remix, transform, and build upon the material) for any purpose, even commercially. for anypurpose, even commercially. The licensor cannot revoke these freedoms as long as you follow the license terms. You must give appropriate credit (by using the original ontology IRI for the whole ontology and original term IRIs for individual terms), provide a link to the license, and indicate if any changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + Updated 2021-09-02: New term isBasisFor (inverse hasBasis). Added missing hasChiefScientist and hasBasis triples. +Updated 2021-07-02: Added "_MOSAiC Specific Term" class that includes a description of overall ontology structure + Version 1.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sello de tiempo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beginning of a temporal entity + Comienzo de una entidad temporal. + has beginning + tiene principio + Beginning of a temporal entity. + Comienzo de una entidad temporal. + + + + + + + + + + + End of a temporal entity. + Final de una entidad temporal. + has end + tiene fin + End of a temporal entity. + Final de una entidad temporal. + + + + + + + + + + + + + + + + + + El sistema de referencia temporal utilizado por una posición temporal o descripción de extensión. + The temporal reference system used by a temporal position or extent description. + Temporal reference system used + sistema de referencia temporal utilizado + El sistema de referencia temporal utilizado por una posición temporal o descripción de extensión. + The temporal reference system used by a temporal position or extent description. + + + + + + + + + Proporciona soporte a la asociación de una entidad temporal (instante o intervalo) a cualquier cosa. + Supports the association of a temporal entity (instant or interval) to any thing + has time + tiene tiempo + Proporciona soporte a la asociación de una entidad temporal (instante o intervalo) a cualquier cosa. + Supports the association of a temporal entity (instant or interval) to any thing + Característica arriesgada -añadida en la revisión del 2017 que no ha sido todavía utilizada de forma amplia. + Feature at risk - added in 2017 revision, and not yet widely used. + + + + + + + + + Need to add: + +Domain: prov:Entity (http://www.w3.org/ns/prov#Entity) +Range: prov:Activity (http://www.w3.org/ns/prov#Activity) + Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation. + + + + + + + + Need to add: + +Domain: prov:Activity (http://www.w3.org/ns/prov#Activity) +Range: prov:Entity (http://www.w3.org/ns/prov#Entity) + Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generatio + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:48:11Z + hasChiefScientist + + + + + + + + + + 2021-04-15T06:48:20Z + isChiefScientistOf + + + + + + + + + + + + + + + + + + + + + 2021-04-15T07:01:47Z + hasResearchLocation + + + + + + + + + 2021-04-15T07:34:06Z + isResearchLocationOf + + + + + + + + + + + + + + + + + + + 2021-04-16T01:30:42Z + hasProjectLabel + + + + + + + + + + + + + 2021-04-16T22:33:33Z + isPartOfCampaign + + + + + + + + + + 2021-04-16T22:34:41Z + hasDatasetPart + + + + + + + + + + + + 2021-04-16T22:39:01Z + hasBasis + + + + + + + + + + + + + 2021-05-19T06:19:25Z + hasEvent + + + + + + + + + + 2021-05-19T06:20:08Z + isEventFromCampaign + + + + + + + + + + + + 2021-05-19T06:22:51Z + has Device Long Name + + + + + + + + + + + 2021-05-19T07:07:50Z + madeBySystem + + + + + + + + + 2021-05-19T08:44:49Z + has Device Short Name + + + + + + + + + + 2021-09-01T23:17:48Z + isBasisFor + + + + + + + + + The subject matter of the content. + + about + + + + + + + + + + + + + + + + + + + + + + + + + The location depicted or described in the content. For example, the location in a photograph or painting. + + contentLocation + + + + + + + + + + + + + + + + + + + + A sub property of location. The original location of the object or the agent before the action. + + fromLocation + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates an item or CreativeWork that is part of this item, or CreativeWork (in some sense). + + hasPart + + + + + + + + + + + + + + + + + + + + + + + + + Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. + + isPartOf + + + + + + + + + + + + + + + + + + + The location of, for example, where an event is happening, where an organization is located, or where an action takes place. + + location + + + + + + + + + + + + + + + + + Indicates the primary entity described in some page or other CreativeWork. + + mainEntity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A sub property of location. The final location of the object or the agent after the action. + + toLocation + + + + + + + + + + + + + + + + + + + + + + + + + The variableMeasured property can indicate (repeated as necessary) the variables that are measured in some dataset, either described as text or as pairs of identifier and description using PropertyValue. + + variableMeasured + + + + + + + + + + + + + + + Extensión de una entidad temporal, expresada utilizando xsd:duration. + Extent of a temporal entity, expressed using xsd:duration + has XSD duration + tiene duración XSD + Extensión de una entidad temporal, expresada utilizando xsd:duration. + Extent of a temporal entity, expressed using xsd:duration + Característica arriesgada - añadida en la revisión de 2017, y todavía no ampliamente utilizada. + Feature at risk - added in 2017 revision, and not yet widely used. + + + + + + + + + + Posición de un instante, expresado utilizando xsd:dateTimeStamp. + Position of an instant, expressed using xsd:dateTimeStamp + en fecha-sello de tiempo XSD + in XSD Date-Time-Stamp + Posición de un instante, expresado utilizando xsd:dateTimeStamp. + Position of an instant, expressed using xsd:dateTimeStamp + + + + + + + + + + + 2021-05-19T06:15:51Z + has Sensor ID + + + + + + + + + + + + + + + + + + 2021-05-25T07:39:50Z + has AWI Sensor Information + + + + + + + + The end date and time of the item (in <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601 date format</a>). + + endDate + + + + + + + + The start date and time of the item (in <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601 date format</a>). + + startDate + + + + + + + + + + + + + + + NERC Research Vessel Concept + + + + + + + + + + + A type of current meter capable of simultaneous measurement of current velocity at a number of different depths based on determining Doppler shift of transmitted sound. + acoustic doppler current profiler (ADCP) + + + + + + + + + + + + + + + + A temporal entity with zero extent or duration + Una entidad temporal con una extensión o duración cero. + Time instant + instante de tiempo. + A temporal entity with zero extent or duration + Una entidad temporal con una extensión o duración cero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A temporal interval or instant. + Un intervalo temporal o un instante. + Temporal entity + entidad temporal + A temporal interval or instant. + Un intervalo temporal o un instante. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:46:15Z + The CAMPAIGN (synonyms: cruise, expedition, leg) is related to a certain project. Campaign as the second level in the data model may be used as an option, but is recommended to more easily list separate sampling locations. + Campaign + Cruise + Expedition + Leg + + + + + The CAMPAIGN (synonyms: cruise, expedition, leg) is related to a certain project. Campaign as the second level in the data model may be used as an option, but is recommended to more easily list separate sampling locations. + https://wiki.pangaea.de/wiki/Campaign accessed 28APR2021 + Although the Pangaea Wiki reference above specifies that the terms Campaign, Cruise, Expedition, and Leg are "synonyms", they are clearly used to indicate different phenomena in the MOSAiC website and metadata descriptors. As an example, the term "MOSAiC" appears to refer to an Expedition (cf. the main website http://mosaic-expedition.org). + +On the Pangaea website for "Expeditions" (https://www.pangaea.de/expeditions/byproject/MOSAiC), however, +MOSAiC is described as a "Project" including nine "Campaigns". + +From that webpage one further sees that an "Expedition Program" is shared among Campaigns that have the same Basis (e.g. Polarstern, abbreviated "PS") with, for example, PS122/4 considered a separate Campaign from PS122/5. These Campaigns however appear to be "Legs" of a single "Cruise", though on the Maps provided showing each "Leg", these each have their own unique "Cruise No." + +In addition, the term "Leg" is used to describe a "Campaign", as seen here for PS122/5-- +https://doi.pangaea.de/10.1594/PANGAEA.928833 +or in the Comments section here for PS122/4-- +https://www.pangaea.de/expeditions/events/PS122%2F4 + +Thus, considering the terms Campaign, Cruise, Expedition, and Leg as "synonyms" may be misleading since these can flexibly indicate quite different features. + +MOSAiC is clearly not a "Leg" nor a "Cruise" nor a "Campaign". MOSAiC is most clearly an "Expedition", and a "Project", that consists of "Campaigns" that sometimes are "Legs" if they are components of an individual "Cruise" (e.g. on some common "Basis" such as the Polarstern's 122'nd "Expedition" that would be labeled "PS122". + + + + + + + + + + 2021-04-15T06:46:26Z + Person + + + + + + + + + + + + 2021-04-15T06:46:39Z + Chief Scientist + + + + + + + + + + 2021-04-15T07:00:36Z + Location + + + + + + + + + 2021-04-15T23:20:36Z + The PROJECT table is the uppermost level in the data model, used to define research projects. Projects defined in this table and linked to a dataset will appear in its metaheader. + +MOSAiC, the "Multidisciplinary drifting Observatory for the Study of Arctic Climate", is listed on the Pangaea site as one of numerous "International Projects", with 273 datasets as of 28APR2021 (M. Schildhauer, personal communication) + Project + + + + + The PROJECT table is the uppermost level in the data model, used to define research projects. Projects defined in this table and linked to a dataset will appear in its metaheader. + +MOSAiC, the "Multidisciplinary drifting Observatory for the Study of Arctic Climate", is listed on the Pangaea site as one of numerous "International Projects", with 273 datasets as of 28APR2021 (M. Schildhauer, personal communication) + https://www.pangaea.de/projects/ accessed 28APR2021 + + + + + + + + + + 2021-04-16T07:11:53Z + The Basis represents platforms (e.g. a ship) or institutions (e.g. research stations) from which campaigns were carried out or which were used to take samples (e.g. raft, helicopter, ice floe). The entry of the Basis appears in the metaheader of a data set after the campaign label. + +Information about BASIS +Name: Name of ship, station, platform etc. +URL link to basis +Institute: if a basis is operated by a certain institute + Basis + + + + + The Basis represents platforms (e.g. a ship) or institutions (e.g. research stations) from which campaigns were carried out or which were used to take samples (e.g. raft, helicopter, ice floe). The entry of the Basis appears in the metaheader of a data set after the campaign label. + +Information about BASIS +Name: Name of ship, station, platform etc. +URL link to basis +Institute: if a basis is operated by a certain institute + https://wiki.pangaea.de/wiki/Basis (accessed 28APR2021) + + + + + + + + + + 2021-04-16T07:15:14Z + Research Vessel + + + + + + + + + + + 2021-04-16T07:17:54Z + Large Research Vessel + + + + + + + + + + 2021-04-29T02:33:16Z + The Method/device provides information about instruments (tools/gears/equipment) used to take samples or measure something during an Event. It also defines analytical equipment, tools, or publications describing a specific method used for measuring or calculation individual parameters. + +Information about Method/device +Name: full official name of tool/instrument/device/gear +Abbreviation: may be used for import in an event list to avoid misspellings +URL: should contain a web address, where an official description of the device can be found + Method/Device + + + + + The Method/device provides information about instruments (tools/gears/equipment) used to take samples or measure something during an Event. It also defines analytical equipment, tools, or publications describing a specific method used for measuring or calculation individual parameters. + +Information about Method/device +Name: full official name of tool/instrument/device/gear +Abbreviation: may be used for import in an event list to avoid misspellings +URL: should contain a web address, where an official description of the device can be found + https://wiki.pangaea.de/wiki/Method accessed 28APR2021 + + + + + + + + + + 2021-04-30T00:52:11Z + Device Long Name + + + + + + + + + + 2021-04-30T00:52:37Z + Device Short Name + + + + + + + + + Broadband electromagnetic sensor + + + + + + + + + CTD, handheld + + + + + + + + + Sea ice buoy + + + + + + + + + Dynamic chamber surface flux system + + + + + + + + + Thermistor buoy + + + + + + + + + Snow buoy + + + + + + + + + Drift Towing Ocean Profiler + + + + + + + + + Ocean CTD buoy + + + + + + + + + Surface velocity profiler + + + + + + + + + Buoy, ice tracker + + + + + + + + + Buoy, universal tracker + + + + + + + + + Autonomous Ocean Flux Buoy + + + + + + + + + Ice corer + + + + + + + + + Helicopter + + + + + + + + + Magnaprobe Device + + + + + + + + + Ice thickness gauge Device + + + + + + + + + Snow sampler glove Method + + + + + + + + + Ice-Tethered Profiler + + + + + + + + + Buoy, radiation station + + + + + + + + + Seasonal Ice Mass Balance buoy + + + + + + + + + Atmospheric Surface Flux Station Device + + + + + + + + + Mobile radiation suite Device + + + + + + + + + Fixed-Layer Ocean Buoy + + + + + + + + + Ice-Tethered Profiler Buoy + + + + + + + + + Aircraft + + + + + + + + + Ship Weather Station + + + + + + + + + pCO2 sensor + + + + + + + + + Multibeam echosounder + + + + + + + + + Gravimetry + + + + + + + + + Magnetometer Device + + + + + + + + + Thermosalinograph + + + + + + + + + Sound velocity probe + + + + + + + + + + Acoustic Doppler Current Profiler Device + + + + + + + + + FerryBox Device + + + + + + + + + Camera + + + + + + + + + L-Band Microwave Radiometer + + + + + + + + + Radar dual Ka- and Ku-band altimeter Device + + + + + + + + + Buoy, stressmeter + + + + + + + + + Digital thermistor chain + + + + + + + + + Bottom temperature recorder Device + + + + + + + + + Aerodynamic Particle Sizer Device + + + + + + + + + Hygrometer + + + + + + + + + Trap, sediment + + + + + + + + + GNSS Receiver + + + + + + + + + Flux tower + + + + + + + + + Snow fall sensor + + + + + + + + + Scatterometer + + + + + + + + + Autonomous Underwater Recorder for Acoustic Listening + + + + + + + + + Buoy, GNSS + + + + + + + + + Stress sensor + + + + + + + + + Radiation Station + + + + + + + + + Infrared camera + + + + + + + + + Underwater membrane inlet mass spectrometer + + + + + + + + + Mooring + + + + + + + + + Accoustical backscatter sensor (ABS) + + + + + + + + + Stress logger + + + + + + + + + Multiple investigations + + + + + + + + + Microwave Radiometer + + + + + + + + + Datalogger + + + + + + + + + GNSS multiband antenna + + + + + + + + + Aerosol Mass Spectrometer Device + + + + + + + + + Ablation stakes hot wire thickness gauge Device + + + + + + + + + Ice observation Method + + + + + + + + + Weather station/meteorological observation + + + + + + + + + Aerosol Observing System + + + + + + + + + Radar + + + + + + + + + Remote sensing (Light detection and ranging, LiDAR) + + + + + + + + + Automatic weather station + + + + + + + + + Fish finder echolot, EK60 / EK80 + + + + + + + + + Spectrometer, trace gas + + + + + + + + + Aerosol sampler + + + + + + + + + Atmospheric Observatory Device + + + + + + + + + Floe navigation system + + + + + + + + + Radon counter + + + + + + + + + Gas chromatograph + + + + + + + + + Doppler Wind-LiDAR + + + + + + + + + Ice radar digitizing system + + + + + + + + + Spectral radiometer + + + + + + + + + 2D ultrasonic anemometer Device + + + + + + + + + 3D ultrasonic anemometer + + + + + + + + + Open path CO2 / H2O analyzer + + + + + + + + + Gas chromatograph - Mass spectrometer + + + + + + + + + Chemiluminescent nitrogen oxides analyzer Device + + + + + + + + + Gaseous mercury analyzer + + + + + + + + + Ozone analyzer + + + + + + + + + Particle counter, snow + + + + + + + + + Sonic anemometer + + + + + + + + + Mass spectrometer + + + + + + + + + GNSS microwave radiometer + + + + + + + + + Mesopelagic fish and jellyfish camera system FishCam + + + + + + + + + Cavity ring-down spectrometer + + + + + + + + + Chemiluminescent fast ozone analyzer Device + + + + + + + + + Cavity ring-down greenhouse gas flux analyzer + + + + + + + + + Hygrometer and RTD temperature sensor + + + + + + + + + Trace gas monitor + + + + + + + + + Ozone monitor Device + + + + + + + + + Condensation particle counter Device + + + + + + + + + Aethalometer Device + + + + + + + + + Cloud Condensation Nuclei Counter Device + + + + + + + + + Valve Device + + + + + + + + + Wideband integrated bioaerosol sensor Device + + + + + + + + + Neutral cluster and air ion spectrometer Device + + + + + + + + + Particle size magnifier Device + + + + + + + + + Dynamic Ocean Topography Buoy + + + + + + + + + this Method/Device spelled as "Laser Strain Obsering System" in source data from MOSAiC site + Laser Strain Obsering System + Laser Strain Obsering System + + + + + + + + + Snow sampler metal + + + + + + + + + Portable seismic station + + + + + + + + + Radiosonde + + + + + + + + + In situ pump + + + + + + + + + Underway water sampling Method + + + + + + + + + Snow pit Method + + + + + + + + + Laser Particle Sizer (LPS) + + + + + + + + + Surface water sample + + + + + + + + + Remotely operated sensor platform BEAST + + + + + + + + + Hydro-complex pressure sensor + + + + + + + + + Microstructure Profiler + + + + + + + + + CTD/Rosette + + + + + + + + + Terrestrial laser scanner Device + + + + + + + + + Hand pump Device + + + + + + + + + Longline deployment + + + + + + + + + Ring net + + + + + + + + + Air-sea ice CO2/CH4 flux chamber system Device + + + + + + + + + Multiple opening/closing net + + + + + + + + + Light frame on-sight keyspecies investigation + + + + + + + + + Tethered balloon + + + + + + + + + Unmanned aerial vehicle + + + + + + + + + Floe GNSS reflectometry + + + + + + + + + Ruler stick + + + + + + + + + Bucket water sampling Method + + + + + + + + + Ocean bottom seismometer Device + + + + + + + + + Air sampler + + + + + + + + + Gillnet + + + + + + + + + Snow/ice sample + + + + + + + + + Fishing rod Device + + + + + + + + + Salinometer + + + + + + + + + Borehole Jack Device + + + + + + + + + High volume air sampler Device + + + + + + + + + Buoy, acoustic doppler current profiler + + + + + + + + + RBR concerto CTD Device + + + + + + + + + Temperature sensor T-chain + + + + + + + + + Scatterometer Ku- and X-band Device + + + + + + + + + MicroRider Device + + + + + + + + + Differential global positioning system (DGPS) + + + + + + + + + Buoy + + + + + + + + + Gamma spectrometer + + + + + + + + + Buoy, drifting + + + + + + + + + NA + + + + + + + + + Ground-penetrating radar + + + + + + + + + Water pump Device + + + + + + + + + Remote operated vehicle Seebiber + + + + + + + + + Ice drill + + + + + + + + + Trap, shorttime + + + + + + + + + Mobile Eddy Covariance System + + + + + + + + + Bottle, Niskin 5-L + + + + + + + + + Apstein net + + + + + + + + + Conductivity meter + + + + + + + + + Water sample + + + + + + + + + MicroCAT + + + + + + + + + Vertical microstructure profiler + + + + + + + + + Tap + + + + + + + + + Bathythermograph + + + + + + + + + Radiation-meter + + + + + + + + + Aerosol pump Device + + + + + + + + + Broadband radiometer + + + + + + + + + Autoanalyzer + + + + + + + + + Hyperspectral camera + + + + + + + + + Cloud and aerosol spectrometer + + + + + + + + + Cloud imaging probe + + + + + + + + + Nansen closing net + + + + + + + + + Albedometer + + + + + + + + + Chamber for gas sampling + + + + + + + + + Optical particle counter + + + + + + + + + Helicopter towed system + + + + + + + + + DESY Myon Detector Device + + + + + + + + + Neutron monitor Device + + + + + + + + + Wave Radar System Device + + + + + + + + + AutoFim + + + + + + + + + Cloud camera Device + + + + + + + + + Water Vapour Isotopes Analyser Device + + + + + + + + + Strain Monitoring System + + + + + + + + + Radiometer + + + + + + + + + Sun photometer + + + + + + + + + GPS receiver + + + + + + + + + Light/Optics + + + + + + + + + Distributed temperature sensor + + + + + + + + + Cubic Aerosol Measurement Platform 2 Device + + + + + + + + + Salinity sensor + + + + + + + + + Spectroradiometer + + + + + + + + + Fish sampling Method + + + + + + + + + Buoy, CTD + + + + + + + + + Acoustical Zoological Fish Profiler + + + + + + + + + Buoy, optics + + + + + + + + + Aerosol chamber + + + + + + + + + Phytoplankton sampler + + + + + + + + + Temperature recorder + + + + + + + + + Expendable CTD + + + + + + + + + CTD, RINKO Profiler + + + + + + + + + Net radiometer + + + + + + + + + Documentation + + + + + + + + + Ice station + + + + + + + + + Thermometer probe + + + + + + + + + Vis/NIR Spectrometer + + + + + + + + + 2021-04-30T06:42:13Z + Time MOSAiC + + + + + + + + + 2021-05-20T01:30:36Z + NERC Terms + + + + + + + + + + + 2021-05-25T00:04:15Z + ResearchLocation + + + + + + + + + 2021-07-02T06:57:47Z + The "_MOSAiC Specific Term" class is a container to organize and isolate the terms that are most frequently used to describe the various components of the MOSAiC Expedition. + +Since other established ontologies are imported into this one, a number of extraneous, non-MOSAiC relevant, and unused terms may be present and clutter the presentation. Hopefully, simply presenting this one Class for reference will enable users to enjoy the main advantages of using and exploring this Ontology. + +Definitions or descriptions of these term as described on the Pangaea website are provided in the Annotation fields associated with each MOSAIC term. + +The main patterns semantically modeled here are as such: + +There are 9 Campaigns, which correspond most closely to a "Cruise", or "Leg" although campaigns can involve stationary or aerial platforms. + +Each Campaign has a Basis, which is typically a Research Vessel (e.g. the Polarstern) or Aircraft (Polar 5 & 6). + +Each Campaign has one or more Chief Scientists, and a Research Location. + +The Basis of a Campaign, and its hosted Events, are indicated by the first two initials in the labels of the Campaigns and Events-- e.g. PS122/1 is the first (indicated by the '/1') Campaign (or "Leg") of the 122'nd voyage of the Polarstern (Basis). PS122/2 would be the second Campaign of the 122'nd voyage of the Polarstern, etc. Again-- these "Campaigns" are irregularly referred to elsewhere as "Legs" or "Cruises"-- with their own unique Cruise numbers. + +Campaigns "host" numerous Events, meaning those Events occurred during that Campaign. Events bear cryptic labels that map to distinct Sensor or Sampling efforts that result in the collection of data. Events extend on the naming scheme for Campaigns, with a numbering system that appears to be temporally sequenced. For example, Event PS122/1_5-10 probably commenced before PS122/1_5-100. (Note that this temporal information is not captured in the Ontology as of version 1.001.) + +Each Event results in the collection of data by some Sensor or Sampling Device. These "Methods and Devices" are organized under the "Method/Device" hierarchy in the MOSAiC Ontology, that includes the names of each type of Sensor/Sampling device as SubClasses. Each Method/Device SubClass can further have one to several more specifically named devices that perform that type of Measurement. For example, the "Acoustic Doppler Current Profiler Device" SubClass contains 6 specific types of ADCP sensor instruments, modeled as Instances with their "Device Long Name". + +The MOSAiC team associated each Sensor/Sampling device with a "Short Name" as well. Most "Long Name" Sensor/Samplers have a only single "Short Name" associated with them (sometimes identical to the "Long Name"), but this is not always the case. For example, Device with "Long Name" = "particle size magnifer" has two Device "Short Names" associated with it-- "PSM_UHEL1" and "PSM_UHEL2". + +Method/Devices are associated with Events via their "Device Long Name", through the predicate "has deployment". Details about inverse and equivalent properties that are represented in the Ontology, providing other potential ways to discover connections, are too detailed to discuss here. Consult the Ontology. + +Associated with each "Short Name" in the Ontology is a URI on the Alfred Wegener Institue website, pointing to further detailed information about that Sensor, e.g. this one for one of the ADCP devices: + https://hdl.handle.net/10013/sensor.3bf53c89-fbed-4486-b5f3-2856fcd76def + +A Dataset is the outcome/output of an Event. Every dataset contains measurements that can be linked to some Event that used some Device (with most detailed description provided by the URI assocated with its "Short Name"); and is from some Campaign, that was performed on some Basis with some Chief Scientist(s), and some Research Location. + +(For demonstration purposes, this Ontology contains a single reference to a test dataset instance, findable by searching for "urn" -- where these assocations can be seen. We could link such datasets to specific Events, but since the Events are manifested at level of measurement values in the dataset, these associations are made evident through the Arctic Data Center search portal: http://arcticdata.io, where the PROVO "wasGeneratedBy" predicate is used.) + + +Comments or questions to Mark Schildhauer (schild@nceas.ucsb.edu). + _MOSAiC Specific Term + + + + + + + + + + + + + + + + + + + + + A data set is a collection of data (from one or several events that is organized in a matrix and is mostly put together in a scientific context. Data in PANGAEA are organized in predefined data sets which are quite similar to the original files uploaded by the author (e.g. one table in one Excel sheet). + +The granularity of a data set depends on the type of data and the number of data points, and is primarily in the decision of the data author. In principle, a PANGAEA data set can have an unlimited number of columns and lines (excel 2003: 65,536 x 256; excel 2008: >1 Mio x 16,384) - Examples: + +17 columns doi:10.1594/PANGAEA.821166 + +2,000,000+ lines doi:10.1594/PANGAEA.701279 + +22,600,000+ lines (in ascii: 551 MB; in ASE +index: 2.2 GB; export from IQ +DOI: 1.44 GB) (Fig. 2) doi:10.1594/PANGAEA.758918 + +A data set may contain one to many data series = parameters. Two or many data sets may be grouped into one parent set. Access restrictions can be defined for a complete data set only. Each data set consists of the data and the metadata according to ISO standard fields (ISO 19115). A data set appears on the Internet with a metaheader which contains the information as described below. + Schema.org describes "Dataset" thusly: A body of structured information describing some topic(s) of interest. + + Dataset + + + + + A data set is a collection of data (from one or several events that is organized in a matrix and is mostly put together in a scientific context. Data in PANGAEA are organized in predefined data sets which are quite similar to the original files uploaded by the author (e.g. one table in one Excel sheet). + +The granularity of a data set depends on the type of data and the number of data points, and is primarily in the decision of the data author. In principle, a PANGAEA data set can have an unlimited number of columns and lines (excel 2003: 65,536 x 256; excel 2008: >1 Mio x 16,384) - Examples: + +17 columns doi:10.1594/PANGAEA.821166 + +2,000,000+ lines doi:10.1594/PANGAEA.701279 + +22,600,000+ lines (in ascii: 551 MB; in ASE +index: 2.2 GB; export from IQ +DOI: 1.44 GB) (Fig. 2) doi:10.1594/PANGAEA.758918 + +A data set may contain one to many data series = parameters. Two or many data sets may be grouped into one parent set. Access restrictions can be defined for a complete data set only. Each data set consists of the data and the metadata according to ISO standard fields (ISO 19115). A data set appears on the Internet with a metaheader which contains the information as described below. + https://wiki.pangaea.de/wiki/Data_set accessed 28APR2021 + + + + + + + + + Data sets published in PANGAEA are usually associated with an EVENT (synonyms site, station). An EVENT typically refers to the sampling event at which the data was obtained. Data submitters must provide sufficient information about these events, the EVENT label and latitude/longitude being mandatory information. + +EVENT is a rather generic term, depending on the type of data it can refer to (for example): + +Stations (during a cruise, expedition, field campaign) +Deployments of sampling devices / sensors (device operation ID) +Sampling events/ measurements along a transect / profile +Sampling / observation time series +Geographical origin of organisms (also of culture organisms) +Time and space limited surveys +Mappings +Moorings +Multiple investigations at a single site +Field experiments +Sample labels + "Event" is ambiguous in the context of the MOSAiC Expedition, potentially indicating many different types of activities, places, or products, as described in the extract above taken verbatim from the Pangaea website. + +In this Ontology, "Event" is being presented in the way it was most typically used on the MOSAiC data archive accessed through the Pangaea website-- as a "label" for a Sampling Event, involving the collection of one type of data collected by a specific type of "Method/Device", that is described by the "Device Long Name" and an associated "Device Short Name". In the PROVO ontology, a Method/Device is characterized as a System, that includes either Samplers or Sensors. This Ontology does not classify Systems as being either Samplers or Sensors, and this would be a useful enhancement for future versions. + +The Event is also characterized by some additional metadata about the Latitude, Longitude, Datetime, etc. describing where and when the data were collected. + + + + + Data sets published in PANGAEA are usually associated with an EVENT (synonyms site, station). An EVENT typically refers to the sampling event at which the data was obtained. Data submitters must provide sufficient information about these events, the EVENT label and latitude/longitude being mandatory information. + +EVENT is a rather generic term, depending on the type of data it can refer to (for example): + +Stations (during a cruise, expedition, field campaign) +Deployments of sampling devices / sensors (device operation ID) +Sampling events/ measurements along a transect / profile +Sampling / observation time series +Geographical origin of organisms (also of culture organisms) +Time and space limited surveys +Mappings +Moorings +Multiple investigations at a single site +Field experiments +Sample labels + https://wiki.pangaea.de/wiki/Event (accessed 28APR2021) + + + + + "Event" is ambiguous in the context of the MOSAiC Expedition, potentially indicating many different types of activities, places, or products, as described in the extract above taken verbatim from the Pangaea website. + +In this Ontology, "Event" is being presented in the way it was most typically used on the MOSAiC data archive accessed through the Pangaea website-- as a "label" for a Sampling Event, involving the collection of one type of data collected by a specific type of "Method/Device", that is described by the "Device Long Name" and an associated "Device Short Name". In the PROVO ontology, a Method/Device is characterized as a System, that includes either Samplers or Sensors. This Ontology does not classify Systems as being either Samplers or Sensors, and this would be a useful enhancement for future versions. + +The Event is also characterized by some additional metadata about the Latitude, Longitude, Datetime, etc. describing where and when the data were collected. + Mark Schildhauer 2021, personal communication + + + + + + + + + + + + + + A person (alive, dead, undead, or fictional). + + Person + + + + + + + + Entities that have a somewhat fixed, physical extension. + + Place + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:47:12Z + Rex, Markus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:47:36Z + PS122/5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:52:50Z + PS122/4 + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T06:56:52Z + P5_223_MOSAiC_ACA_2020 + + + + + + + + + + + + + + 2021-04-15T06:57:35Z + Herber, Andreas + + + + + + + + + + + + + + + + + 2021-04-15T07:03:03Z + Arctic Ocean + + + + + + + + + + + + + 2021-04-15T07:03:22Z + North Greenland Sea + + + + + + + + + + + + + + 2021-04-15T07:35:08Z + Svalbard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2019-12-13 + '2020-09-20' + + 2021-04-15T23:17:02Z + PS122/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T23:17:21Z + PS122/2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T23:17:44Z + PS122/3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T23:18:31Z + AF-MOSAiC-1 + + + + + + + + + + + + + + + + + + + + + + 2021-04-15T23:18:49Z + P6_222_IceBird_MOSAiC_2020 + + + + + + + + + + + 2021-04-15T23:23:43Z + MOSAiC20192020 + + + + + + + + + + + 2021-04-16T06:46:53Z + Tromsø + + + + + + + + + + + 2021-04-16T06:47:17Z + Bremerhaven + + + + + + + + + + + + + + + + + + + + + 2021-04-16T07:16:52Z + + Polarstern + + + + + + + + + + + + + + + + 2021-04-29T06:24:49Z + + + Akademik Fedorov + + + + + + + + + + + 2021-05-05T06:11:27Z + MOSAiC + + + + + + + + + + 2021-05-05T06:12:04Z + Multidisciplinary drifting Observatory for the Study of Arctic Climate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GEM-2 Broadband Electromagnetic Sensor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sontek CTD Castaway + + + + + + + + + + + + + + + + + Unmanned ice station_Polar Research Institute of China + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic chamber surface flux system (CO2, CH4 and H2O) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic chamber surface flux system (dimethylsulfide) + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T68 + + + + + + + + + + + + + + + + + Snow Buoy 2019S84 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DTOP Ocean Profiler OUC + + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O1 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T57 + + + + + + + + + + + + + + + + Snow Buoy 2019S79 + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O2 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T59 + + + + + + + + + + + + + + + + Snow Buoy 2019S81 + + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O3 + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T58 + + + + + + + + + + + + + + + Snow Buoy 2019S80 + + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O4 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T72 + + + + + + + + + + + + + + + + Snow Buoy 2019S87 + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O5 + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T64 + + + + + + + + + + + + + + + + + Snow Buoy 2019S86 + + + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O6 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T71 + + + + + + + + + + + + + + + Snow Buoy 2019S95 + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O7 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T69 + + + + + + + + + + + + + + + + Snow Buoy 2019S90 + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2019O8 + + + + + + + + + + + + + + + + SVP-B Pacific Gyre 2019P88 + + + + + + + + + + + + + + + + SVP-B Pacific Gyre 2019P90 + + + + + + + + + + + + + + + + SVP-B Pacific Gyre 2019P91 + + + + + + + + + + + + + + + + SVP-B Pacific Gyre 2019P92 + + + + + + + + + + + + + + + + SVP Pacific Gyre 2019P101 + + + + + + + + + + + + + + + + SVP Pacific Gyre 2019P103 + + + + + + + + + + + + + + + + Surface Velocity Profiler 2019P122 + + + + + + + + + + + + + + + + Surface Velocity Profiler 2019P124 + + + + + + + + + + + + + + + + Surface Velocity Profiler 2019P125 + + + + + + + + + + + + + + + + Surface Velocity Profiler 2019P126 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P188 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P191 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P193 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P192 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P190 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P189 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P194 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P195 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P196 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P200 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P198 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P199 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P197 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P201 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P202 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P203 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P204 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P205 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P206 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P207 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P208 + + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2019P209 + + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2019P182 + + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2019P184 + + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2019P187 + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P135 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P136 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P137 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P138 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P139 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P140 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P142 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P143 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P144 + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P145 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P146 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P148 + + + + + + + + + + + + + + + + TUT iSVP_PRIC 2019P149 + + + + + + + + + + + + + + + + Surface Velocity Profiler P22 + + + + + + + + + + + + + + + + Surface Velocity Profiler P123 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V1 2019T47 + + + + + + + + + + + + + + + + Autonomous Ocean Flux Buoy AOFB46 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ice Corer Kovacs Mark II + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Helicopter Polarstern + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPS snow depth probe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ice Thickness Gauge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Snow Sampler Glove + + + + + + + + + + + + + + + + + Ice-Tethered Profiler ITP111 2019W4 + + + + + + + + + + + + + + + + Radiation station 2019R9 + + + + + + + + + + + + + + + + Snow Buoy 2019S92 + + + + + + + + + + + + + + + + SIMB3 2019I1 + + + + + + + + + + + + + + + + Autonomous Ocean Flux Buoy AOFB43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Atmospheric Surface Flux Station + + + + + + + + + + + + + + + + Mobile radiation suite + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T67 + + + + + + + + + + + + + + + + FIO_Fixed-Layer Ocean buoy + + + + + + + + + + + + + + + + + Autonomous Ocean Flux Buoy AOFB44 + + + + + + + + + + + + + + + + + SIMB3 2019I2 + + + + + + + + + + + + + + + + Ice-Tethered Profiler ITP94 2019W2 + + + + + + + + + + + + + + + + + Snow Buoy 2019S93 + + + + + + + + + + + + + + + + + Radiation station 2019R8 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T65 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T63 + + + + + + + + + + + + + + + FIO_Ice-Tethered Profiler buoy + + + + + + + + + + + + + + + + + IMBflex 2019M30 + + + + + + + + + + + + + + + + + Ice-Tethered Profiler ITP102 2019W3 + + + + + + + + + + + + + + + + + Snow Buoy 2019S94 + + + + + + + + + + + + + + + + Autonomous Ocean Flux Buoy AOFB45 + + + + + + + + + + + + + + + + SIMB3 2019I3 + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T70 + + + + + + + + + + + + + + + + + + + + + + + Electromagnetic (EM) induction sounding for sea ice thickness measurements + + + + + + + + + + + + + + + + + + + Weather Station + + + + + + + + + + + + + + + + + + + pCO2 Monitoring System General Oceanics + + + + + + + + + + + + + + + + + + + pCO2 Monitoring System OceanPack SAE + + + + + + + + + + + + + + + Multibeam Echo Sounder + + + + + + + + + + + + + + + + + Marine Gravitymeter System + + + + + + + + + + + + + + + + + + + + Magnetometer System + + + + + + + + + + + + + + + + + + + Thermosalinograph Keel 1 + + + + + + + + + + + + + + + + + + + Thermosalinograph Keel 2 + + + + + + + + + + + + + + + + + + + Sound Velocity Transducer C-Keel + + + + + + + + + + + + + + + + + + + + + Acoustic Doppler Current Profiler + + + + + + + + + + + + + + + + + + + Ferrybox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Camera VIS_INFRALAN_01 + + + + + + + + + + + + + + + + + + + + + Microwave Radiometer ELBARA L-band + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Radar dual Ka- and Ku-band altimeter + + + + + + + + + + + + + + + + + FMI Stress buoy 1 + + + + + + + + + + + + + + + + + Digital thermistor chain 11 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 19 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 06 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 05 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 04 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 03 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 18 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 16 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 15 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 14 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 13 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 12 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T66 + + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T62 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bottom temperature recorder + + + + + + + + + + + + + + + + + + + + aerodynamic particle sizer + + + + + + + + + + + + + + + + + + + + + + + + + Hygrometer for RH and temperature (interstitial inlet) + + + + + + + + + + + + + + + + SIO McLane Sediment Trap + + + + + + + + + + + + + + + + SIO Ice Buoy + + + + + + + + + + + + + + + + + + + + + Microwave Radiometer L-band EMIRAD2 + + + + + + + + + + + + + + + + + + GNSS-receiver for multi-GNSS observations + + + + + + + + + + + + + + + + + + GNSS-receiver for Occultation Reflectometry and Scatterometry measurements + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) 2019P152 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) 2019P155 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) 2019P156 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) 2019P157 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P153 + + + + + + + + + + + + + + + + FMI Stress buoy 3 + + + + + + + + + + + + + + + + + + Digital thermistor chain 21 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 31 (5.12m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 32 (5.12m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 33 (5.12m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 20 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Digital thermistor chain 07 (2.56m) from central ice floe DTC network + + + + + + + + + + flux_tower_12m_ucb + + + + + + + + + + + + + + + + 4869 + https://hdl.handle.net/10013/sensor.367cb09b-9573-49fa-bf1a-4456f98a8ca4 + flux_tower_30m_leeds + + + + + + + + + + + + + + + + + + Visual in situ snowfall sensor + + + + + + + + + + + + + + + + + + + + + Scatterometer L-band + + + + + + + + + + + + + + + + Marlin-Yug IceTC2/30 + + + + + + + + + + + + + + + + + Snow Buoy 2019S96 + + + + + + + + + + + + + + + + + AURAL-M2 0231 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GNSS buoy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dartmouth College stress sensor and datalogger + + + + + + + + + + + + + + + + + + FMI radiation station + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Infrared VarioCAM HDx head 625 + + + + + + + + + + + + + + + + + + + Underway Membrane Inlet MassSpec + + + + + + + + + + + + + + + + ECO_UNDER_ICE_INSITU_SENSORS + + + + + + + + + + + + + + + + SIMB3 2019I4 + + + + + + + + + + + + + + + + + Ultra-Wideband Software-defined Microwave Radiometer (0.5-2GHZ) + + + + + + + + + + + + + + + + + IDEAL Ice Force Panel Aquisition + + + + + + + + + + + + + + + + + Digital thermistor chain 22 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + Digital thermistor chain 01 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + Digital thermistor chain 02 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + Digital thermistor chain 17 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2019T56 + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P161 + + + + + + + + + + + + + + + + + + + + + + UIB Longranger + + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2019P183 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P150 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P151 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P158 + + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P159 + + + + + + + + + + + + + + + + + + + + + + Scatterometer C-band + + + + + + + + + + + + + + + + Marlin Yug UpTempo 25m U1 + + + + + + + + + + + + + + + + Marlin Yug UpTempo 60m U2 + + + + + + + + + + + + + + + + + UIB Cluster + + + + + + + + + + GNSS_JAVADd3 + + + + + + + + + + + + + + + + + Digital thermistor chain 23 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microwave Radiometer 19, 37, 89 GHz (SSMI type) + + + + + + + + + + + + + + + + SVP Pacific Gyre P102 + + + + + + + + + + + + + + + + SVP Pacific Gyre P105 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dartmouth College Radio datalogger + + + + + + + + + + + + + + + + + + + 4184 + https://hdl.handle.net/10013/sensor.44f1ddb0-aa95-48cc-adc1-a5d80d401341 + GNSS_navX_MBANT + + + + + + + + + + + + + + + + + + + + 4186 + https://hdl.handle.net/10013/sensor.8860cea3-78ab-4b27-b4a7-1b43f4a2bdc4 + GNSS_NTlab_FE + + + + + + + + + + + + + + + + + GRIMM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ablation stakes hot wire thickness gauges + + + + + + + + + + + + + + + + + + + Ice Observation + + + + + + + + + + arm_cluster_ice + + + + + + + + + + arm_container_aos + + + + + + + + + + arm_container_kazr + + + + + + + + + + + + + + + + + + + 6302 + https://hdl.handle.net/10013/sensor.902cb699-9f85-4142-addc-2f2a27958f86 + arm_container_ops + + + + + + + + + + arm_cluster_25m + + + + + + + + + + + + + + + + Surface Velocity Profiler P127 + + + + + + + + + + + + + + + + Surface Velocity Profiler P128 + + + + + + + + + + + + + + + + Surface Velocity Profiler P16 + + + + + + + + + + + + + + + + + + + Fishing Echo Sounder + + + + + + + + + + MAX-DOAS + + + + + + + + + + + + + + + + + + HiVol - Filter Sampler + + + + + + + + + + + + + + + + + + + + Atmosphere Observatory + + + + + + + + + + + + + + + + + + Floe Navi System + + + + + + + + + + + + + + + + + + + + LoVol - Filter Sampler + + + + + + + + + + + + + + + + + + Radon_counter_AWI + + + + + + + + + + + + + + + + + Thermo Scientific TRACE 1310 2 + + + + + + + + + + + + + + + + + + Leeds HALO Lidar + + + + + + + + + + + + + + + + + + Halophotonics Streamline scanning wind lidar + + + + + + + + + + + + + + + + + + Finnish Meteorological Institutes ice radar digitizing system + + + + + + + + + + + + + + + Ramses TRiOs SAMIP_5063 + + + + + + + + + + + + + + + + + + + + 2D ultrasonic anemometer, RM Young 86004, heated + + + + + + + + + + + + + + + + + + + 3D ultrasonic anemometer, Metek uSonic3, heated + + + + + + + + + + + + + + + + + + + LI-COR 7500DS open path CO2 / H2O analyzer + + + + + + + + + + + + + + + + + + + Agilent gas chromatograph - mass spectrometer for volatile organic compound analysis + + + + + + + + + + + + + + + + + + + + Chemiluminescent nitrogen oxides analyzer + + + + + + + + + + + + + + + + + + + Tekran gaseous mercury analyzer + + + + + + + + + + + + + + + + + + + Thermo Scientific ozone analyzer + + + + + + + + + + + + + + + Particle counters spc_1104_bas + + + + + + + + + + + + + + + Particle counters spc_1206_bas + + + + + + + + + + + + + + + + + + METEK USA-1 + + + + + + + + + + + + + + + + + + + atmospheric pressure ionization mass spectrometer for dimethylsulfide + + + + + + + + + + + + + + + + Full_Pol_GNSS-R + + + + + + + + + + + + + + + + Davis Rotating Unit for Monitoring aerosol impactor + + + + + + + + + + + + + + + + DRUM impactor + + + + + + + + + + + + + + + + Colorado State University filter sampler for total aerosol + + + + + + + + + + + + + + + + FishCam + + + + + + + + + + + + + + + + + FMI Stress buoy 4 + + + + + + + + + + + + + + + + + FMI Stress buoy 2 + + + + + + + + + + + + + + + + + + + CO2 / CH4 cavity ring-down spectrometer + + + + + + + + + + + + + + + + + + + Chemiluminescent fast ozone analyzer + + + + + + + + + + + + + + + + + + + + + Picarro cavity ring-down greenhouse gas flux analyzer, model G2311-f + + + + + + + + + + + + + + + + + Michell S8000 chilled mirror hygrometer and RTD temperature sensor + + + + + + + + + + + + + + + + + + + + atmospheric pressure interface time of flight mass spectrometer + + + + + + + + + + + + + + + + + + + trace gas monitor (CH4, CO2, CO) + + + + + + + + + + + + + + + + + + + ozone monitor + + + + + + + + + + + + + + + + + + + + + + + + SO2 monitor + + + + + + + + + + + + + + + + + + + condensation particle counter interstitial inlet + + + + + + + + + + + + + + + + + + + condensation particle counter total inlet + + + + + + + + + + + + + + + + + + + aerosol mass spectrometer + + + + + + + + + + + + + + + + + + + aethalometer + + + + + + + + + + + + + + + + + + cloud condensation nuclei counter + + + + + + + + + + + + + + + + + + + scanning mobility particle sizer + + + + + + + + + + + + + + + + + + + valve + + + + + + + + + + + + + + + + + + + Wideband Integrated Bioaerosol Sensor + + + + + + + + + + + + + + + + + + + Neutral cluster and Air Ion Spectrometer + + + + + + + + + + + + + + + + + + + + + + + + + particle size magnifier + + + + + + + + + + + + + + + + Dynamic Ocean Topography (DOT) Buoy + + + + + + + + + + + + + + + + + + + Dartmouth College Laser Strain Obsering System + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Metal Snow Sampler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Portable seismic station beta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Portable seismic station gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Radiosonde Sounding System + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MP_insitu_pump + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Underway Water Sampling + + + + + + + + + + Snowpit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PRIC LISST-Deep particel size analyser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Water probe + + + + + + + + + + + + + + + FMI Stress buoy 5 + + + + + + + + + + BEAST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ice Corer Kovacs Mark III + + + + + + + + + + + + + + + + + + + + + + Dynamic chamber surface flux system (ozone) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hydro-complex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSS 90L sno 046 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ocean City CTD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Laser scanner terrestrial + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hand pump + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Longline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CTD AWI-OZE (Winnie Pooh) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ring net 150 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ringnet 53 mu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Air-sea ice CO2/CH4 flux chamber system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multinet Midi 5 Nets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lightframe On-sight Key species Investigation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ringnet 1000 mu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tethered Balloon MOSAiC-AWI + + + + + + + + + + + + + + + + + + + + + + + + + + + + Portable seismic station alpha + + + + + + + + + + + + + + + DJI Mavic 2 Pro + + + + + + + + + + + + + + + + + + + + + + + GNSS Reflectometry equipment on MOSAiC Sea Ice Floe + + + + + + + + + + + + + + + + + + + + + + + + Snow Thickness Ruler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bucket Water Sampling + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Colorado State University portable aerosol sampler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BALAMIS_Radiometer + + + + + + + + + + + + + + + + + + Ocean Bottom Seismograph + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ice Corer Kovacs Mark V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NOAA GMD flask sampling system + + + + + + + + + + + + + + + + + + + + MSS90L + + + + + + + + + + + + + + + + + + + + + + + + Gill net + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SI ice sampler + + + + + + + + + + + + + + + + + + + + + + + Fishing rod + + + + + + + + + + + + + + + + Salinometer, hand held, Voltkraft LWT-100 + + + + + + + + + + + + + + + + + + + + + + + Borehole Jack + + + + + + + + + + + + + + + + + + CTD RBR + + + + + + + + + + + + + + + + + + High Volume Air Sampler + + + + + + + + + + + + + + + Nortek Signature 1000 s/n 101048 + + + + + + + + + + + + + + + Nortek Signature 1000 s/n 100098 + + + + + + + + + + + + + + + RBR Concerto CTD s/n 60610 + + + + + + + + + + + + + + + + + RBR Concerto CTD s/n 60611 + + + + + + + + + + + + + + + + T-chain (RBR) + + + + + + + + + + + + + + + + + + CU Boulder/CIRES NOy inlet + + + + + + + + + + + + + + + Harp light + + + + + + + + + + + + + + + Harp salinity + + + + + + + + + + + + + + + Scatterometer Ku- and X-band + + + + + + + + + + + + + + + + MicroRider + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T60 + + + + + + + + + + + + + + + + Digital thermistor chain 25 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + Digital thermistor chain 24 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + + + Dartmouth College DGPS unit + + + + + + + + + + + + + + + Camera VIS_INFRALAN_02 + + + + + + + + + + + + + + + Marlin-Yug IceBTC60/40H + + + + + + + + + + + + + + + + Digital thermistor chain 09 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T61 + + + + + + + + + + + + + + + + Snow Buoy S99 + + + + + + + + + + + + + + + Canberra AWI-Det_2 + + + + + + + + + + + + + + + envipope2 2020E2 + + + + + + + + + + + + + + + light ice tethered observatory 2020E1 + + + + + + + + + + + + + + + + + + + + + + Zenilite Iridium SBD + + + + + + + + + + + + + + + envipope3 2020E3 + + + + + + + + + + + + + + + + + + + atmospheric pressure interface time of flight mass spectrometer + + + + + + + + + + + + + + + Digital thermistor chain 08 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + GPR 1.6 GHz + + + + + + + + + + + + + + + + + + + ADCP_14733_IOW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + water pump + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tisch 5170V-BL + + + + + + + + + + + + + + + DT101 imaging and bathymetric multibeam sonar + + + + + + + + + + + + + + + + + + + Remotely Operated Vehicle Seebiber + + + + + + + + + + + + + + + + MagnaProbe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kovacs 2 inch thickness drill + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sentinel Workhorse ADCP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CTD SST 48M_1495 fishing-rod + + + + + + + + + + + + + + + + + + + + + + + + + + Short-term sediment trap mooring ridge + + + + + + + + + + + + + + + + + + Short-term sediment trap mooring ridge (2) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + short-term sediment trap mooring level ice + + + + + + + + + + + + + + + + + + + + short-term sediment trap mooring level ice (2) + + + + + + + + + + + + + + + + + + + + short-term sediment trap mooring level ice (3) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mobile Eddy Covariance System 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5L Niskin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Apstein Handnet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSS_55_IOW + + + + + + + + + + + + + + + + Conductometer COM-100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seacat (SBE19) mobile CTD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + falcon tube + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UEA flask sampling system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CTD SST 48M_1459 fishing-rod + + + + + + + + + + + + + + + + + + + SBE 37 SM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VMP250 upriser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + seawater tap + + + + + + + + + + + + + + + + RBR Duet TD 85201 + + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P210 + + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P211 + + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P213 + + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P214 + + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P215 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T75 + + + + + + + + + + + + + + + + Radiation station R12 + + + + + + + + + + + + + + + Snow Buoy S97 + + + + + + + + + + + + + + + Radiation station R13 + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P225 + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P226 + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P227 + + + + + + + + + + Tekran_2537B_USTC + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P228 + + + + + + + + + + + + + + + + Digital thermistor chain 40 (5.12m) from central ice floe DTC network + + + + + + + + + + + + + + + + + + + + + RBR Concerto CTD + + + + + + + + + + + + + + + + PAR Surface + + + + + + + + + + + + + + + + + + + Condensation Particle Counter + + + + + + + + + + + + + + + + + + + aerosol pump + + + + + + + + + + + + + + + cu_ship_underway_radiation + + + + + + + + + + + + + + + + Digital thermistor chain 10 (2.56m) from central ice floe DTC network + + + + + + + + + + + + + + + + Leeds Galion Lidar + + + + + + + + + + + + + + + + + Scintec Sodar + + + + + + + + + + + + + + + Radiation station R10 + + + + + + + + + + + + + + + + + N2O/CO-30-EP + + + + + + + + + + + + + + + + + + + Microwave Radiometer HUTRAD C-, X-, K-band + + + + + + + + + + + + + + + + Radiation station R11 + + + + + + + + + + + + + + + MetOcean SVP-I-XXGS-LP (FID4035) P160 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P185 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P186 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P217 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P218 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P219 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P220 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P (FID4031) P212 + + + + + + + + + + + + + + + Pacific Gyre Universal Tracker 2020P216 + + + + + + + + + + + + + + + Radiation station R14 + + + + + + + + + + + + + + + + Radiation Station R20 (profile) + + + + + + + + + + + + + + + Digital thermistor chain 44 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + Digital thermistor chain 45 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + Hyperspectral camera Specim IQ + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T73 + + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T79 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T77 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T76 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T74 + + + + + + + + + + + + + + + + CAPS-CAS (Cloud & Aerosol Spectrometer) + + + + + + + + + + + + + + + + CAPS-CIP (Cloud Imaging Probe) + + + + + + + + + + + + + + + + SPIN + + + + + + + + + + + + + + + + + + + + + Typhoon pump + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHawk2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Nansen net + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kipp and Zonen albedometer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Metal chamber for gas + + + + + + + + + + + + + + + + Optical Particle Counter + + + + + + + + + + + + + + + + + + + + HELIPOD + + + + + + + + + + + + + + + DESY Myon Detector + + + + + + + + + + Neutron Monitor + + + + + + + + + + + + + + + + Wave Radar System + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Automated Filtration for Marine Microbes + + + + + + + + + + + + + + + + + 1424 + https://hdl.handle.net/10013/sensor.9b645511-94bd-4a1c-933b-84eeb7fd4d82 + Cloud Camera + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + G2132-i cavity ringdown spectrometer + + + + + + + + + + + + + + + + neutral air ion spectrometer stern + + + + + + + + + + + + + + + Radiation station R15 + + + + + + + + + + + + + + + + + Water Vapour Isotopes Analyser + + + + + + + + + + + + + + + + Logger for DMS + + + + + + + + + + + + + + + IMBflex M27 + + + + + + + + + + + + + + + Ablation stakes hot wire thickness gauges 11 + + + + + + + + + + + + + + + Ablation stakes hot wire thickness gauges 12 + + + + + + + + + + + + + + + IMBflex M26 + + + + + + + + + + + + + + + Variocam HD handheld IR camera (UW) + + + + + + + + + + + + + + + Ablation stakes hot wire thickness gauges 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ASD or similar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSS091 + + + + + + + + + + + + + + + + + + + + + + + + + + SonTek Castaway CTD + + + + + + + + + + + + + + + + + + + + Mobile Eddy Covariance System 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Solar Light MICROTOPS II Sunphotometer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CAU_STICKLE_1 + + + + + + + + + + + + + + + + + + + + Terrestrial Laser Scanner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X6 + + + + + + + + + + + + + + + + + + + + + RAAVEN + + + + + + + + + + + + + + + + + + + + + + + + + Optical Light Larm + + + + + + + + + + + + + + + + Silixa XT-DTS SN19076 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tethered Balloon MOSAiC TROPOS (BELUGA) + + + + + + + + + + + + + + + + + + + + + Cubic Aerosol Measurement Platform 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GoPro Hero7 Black Underwater Camera (UW) + + + + + + + + + + + + + + + + + + + + + CAU_BOEOETLE_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + YSI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + General Water Sampler + + + + + + + + + + + + + + + + Spectral Evolution spectroradiometer + + + + + + + + + + + + + + + + + + + RAMSES + + + + + + + + + + + + + + + + Garmin etrex vista HCx + + + + + + + + + + + + + + + + + + + + IOP Probe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Airsampler for C14CH4air + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Peristaltic pump + + + + + + + + + + + + + + + Ring Net 60 cm + + + + + + + + + + + + + + + + + CAU_NOTECAM_1 + + + + + + + + + + + + + + + Digital thermistor chain 26 (4.16m) from central ice floe DTC network + + + + + + + + + + + + + + + + + + + + Fish sampling device + + + + + + + + + + + + + + + Panomax 360 Camera + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P172 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T84 + + + + + + + + + + + + + + + Autonomous Ocean Flux Buoy AOFB44 2020F5 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P233 + + + + + + + + + + + + + + + Snow Buoy S98 + + + + + + + + + + + + + + + IMBflex M23 + + + + + + + + + + + + + + + Snow Buoy S109 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P236 + + + + + + + + + + + + + + + + + Nortek 400kHz AquaDopp pro + + + + + + + + + + + + + + + + + Nortek Vector + + + + + + + + + + + + + + + Satellite tracker without Barometric Sensor P115 + + + + + + + + + + + + + + + Satellite tracker without Barometric Sensor P118 + + + + + + + + + + + + + + + Lead CTD chain MOSAiC Leg5 ice camp + + + + + + + + + + + + + + + Bruncin salinity chain prototype BOS077 + + + + + + + + + + + + + + + Digital thermistor chain RS051 MOSAiC Leg5 + + + + + + + + + + + + + + + Digital thermistor chain RS055 MOSAiC Leg5 + + + + + + + + + + + + + + + Digital thermistor chain RS052 MOSAiC Leg5 + + + + + + + + + + + + + + + Digital thermistor chain RS053 MOSAiC Leg5 + + + + + + + + + + + + + + + Digital thermistor chain RS054 MOSAiC Leg5 + + + + + + + + + + + + + + + Digital thermistor chain RS056 MOSAiC Leg5 + + + + + + + + + + + + + + + AZFP Buoy (s/n 076) + + + + + + + + + + + + + + + + + 7406 + https://hdl.handle.net/10013/sensor.4ea6be7b-b7f3-44c4-9257-4a0b10c0fdb8 + ibob_078 + + + + + + + + + + + + + + + Snow Buoy 2020S105 + + + + + + + + + + + + + + + aerosol_chamber_mosaic + + + + + + + + + + + + + + + TSI_SMPS_Spain + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T85 + + + + + + + + + + + + + + + SIO McLane phytoplankton sampler + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P234 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thermo recorder TR52i and test 110 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P229 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P230 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P231 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P237 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T78 + + + + + + + + + + + + + + + Ablation stakes hot wire thickness gauges 14 + + + + + + + + + + + + + + + Snow Buoy 2020S107 + + + + + + + + + + + + + + + Snow Buoy 2020S106 + + + + + + + + + + + + + + + Thermistor buoy SIMBA V7 2020T81 + + + + + + + + + + + + + + + + + + + Marlin-Yug IceST/30 + + + + + + + + + + + + + + + Snow Buoy 2020S108 + + + + + + + + + + + + + + + Radiation station R22 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P166 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P168 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P175 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P165 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P170 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P178 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P169 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P164 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P163 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P162 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P181 + + + + + + + + + + + + + + + Radiation station R21 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P176 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P179 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P167 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P171 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P180 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P177 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P174 + + + + + + + + + + + + + + + PacificGyre AWI-SVP5S 2020O10 + + + + + + + + + + + + + + + IMBflex M28 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P235 + + + + + + + + + + + + + + + Pacific Gyre Ice Tracker 2020P173 + + + + + + + + + + + + + + + MetOcean SVP-I-BXGS-P P232 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XCTD-Deck-Unit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FMI drone Mavic 2 Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JFE Rinko profiler ASTD102 + + + + + + + + + + + + + + + + CO2 equilibrator for brines and meltponds pCO2 measurement + + + + + + + + + + + + + + + Kipp and Zonen CNR4 SN090078 + + + + + + + + + + + + + + + + + + + + + + FMI quadrocopter SPECTRA + + + + + + + + + + + + + + + + + + + + Eco Mindpalace + + + + + + + + + + + + + + + + + + Ice_rail (generic) + + + + + + + + + + + + + + + + + + + + + + AARI thermometer + + + + + + + + + + + + + + + ASD LabSpec 5000 + + + + + + + + + + + 3715 + https://hdl.handle.net/10013/sensor.7377349c-bad5-444d-b4cf-768c2cb6b3a8 + gem2-512 + + + + + + + + + + + 5409 + https://hdl.handle.net/10013/sensor.cfb7f54d-f03e-40dd-b119-a33062a12374 + Orange-Crush-CTD + + + + + + + + + + + 4412 + https://hdl.handle.net/10013/sensor.a378910a-1495-45f3-8e9f-993643d8313f + UnIS_PRIC + + + + + + + + + + + 4926 + https://hdl.handle.net/10013/sensor.c1c31659-dc1a-40e4-9219-7fed92a01114 + co2_ch4_chamber_portable + + + + + + + + + + + 4927 + https://hdl.handle.net/10013/sensor.bd8458e3-bdfc-4d78-a240-4c68975a064e + dms_chamber_portable + + + + + + + + + + + 5972 + https://hdl.handle.net/10013/sensor.c8cd8bdb-8a6f-4e2b-be2e-63261fc016e7 + 2019T68 + + + + + + + + + + + 2968 + https://hdl.handle.net/10013/sensor.3c41eb78-2d28-44fa-82a9-8e6ae2c2759f + 2019S84 + + + + + + + + + + + 5085 + https://hdl.handle.net/10013/sensor.76a46b9f-6a63-4c14-8256-0773c7971238 + 2019V1 + + + + + + + + + + + 6031 + https://hdl.handle.net/10013/sensor.13f42797-3c33-4bd4-a399-a82b71dc057d + 2019O1 + + + + + + + + + + + 5976 + https://hdl.handle.net/10013/sensor.5b3cc0d7-bb95-4246-9bae-36453aaee8c5 + 2019T57 + + + + + + + + + + + 2532 + https://hdl.handle.net/10013/sensor.44a117dc-8d9a-4b23-8680-4dbc3a2ea769 + 2019S79 + + + + + + + + + + + 6236 + https://hdl.handle.net/10013/sensor.43bbf212-6e9f-4993-a6df-433ca51de179 + 2019V2 + + + + + + + + + + + 6032 + https://hdl.handle.net/10013/sensor.a9419906-752c-4c35-ad1f-1e08931650b1 + 2019O2 + + + + + + + + + + + 5980 + https://hdl.handle.net/10013/sensor.66943a2d-d5cf-4254-b6f1-c68fac77309a + 2019T59 + + + + + + + + + + + 2534 + https://hdl.handle.net/10013/sensor.ec51a8ef-5ed0-43a6-86d1-a302b2589459 + 2019S81 + + + + + + + + + + + 6237 + https://hdl.handle.net/10013/sensor.293adb77-27e0-4479-8bb1-e5942e96a8e8 + 2019V3 + + + + + + + + + + + 6033 + https://hdl.handle.net/10013/sensor.916632f8-fe6d-4a88-8722-04ad9c446316 + 2019O3 + + + + + + + + + + + 5978 + https://hdl.handle.net/10013/sensor.e36932e3-b2bf-4710-aec2-6eb8b1c3116d + 2019T58 + + + + + + + + + + + 2533 + https://hdl.handle.net/10013/sensor.c1e7e766-d55e-4065-a3ba-6ef3b9d64730 + 2019S80 + + + + + + + + + + + 6034 + https://hdl.handle.net/10013/sensor.416b4010-c02c-4540-981c-a4a26e0ceef0 + 2019O4 + + + + + + + + + + + 5970 + https://hdl.handle.net/10013/sensor.98145362-9fb3-4ebe-9fda-acd27dece968 + 2019T72 + + + + + + + + + + + 3069 + https://hdl.handle.net/10013/sensor.7be0060b-4eb8-48a8-a0dc-e22856e14955 + 2019S87 + + + + + + + + + + + 6238 + https://hdl.handle.net/10013/sensor.a50c294c-a27b-4a87-9b5c-f2d414aad7ad + 2019V4 + + + + + + + + + + + 6035 + https://hdl.handle.net/10013/sensor.d81ad01a-e520-4461-b94f-7c3f02061a22 + 2019O5 + + + + + + + + + + + 5990 + https://hdl.handle.net/10013/sensor.6a855ad3-498f-481b-9ac9-fe403f888697 + 2019T64 + + + + + + + + + + + 3068 + https://hdl.handle.net/10013/sensor.a24ac269-9cd4-4c46-bcca-7291cb700edb + 2019S86 + + + + + + + + + + + 6036 + https://hdl.handle.net/10013/sensor.5ff938e3-d2e5-4b00-ae41-c13b0ee7f325 + 2019O6 + + + + + + + + + + + 5968 + https://hdl.handle.net/10013/sensor.b227482c-dc44-4154-adbf-3904c9e03982 + 2019T71 + + + + + + + + + + + 3978 + https://hdl.handle.net/10013/sensor.77fcbe3e-8948-4c31-b7d0-49f95e4d4f1d + 2019S95 + + + + + + + + + + + 6037 + https://hdl.handle.net/10013/sensor.4c16e9ab-f7b0-45e7-b571-c64bf37d214a + 2019O7 + + + + + + + + + + + 5964 + https://hdl.handle.net/10013/sensor.74cb445a-fe43-43f4-901d-2655872bfe30 + 2019T69 + + + + + + + + + + + 3393 + https://hdl.handle.net/10013/sensor.f7a5ef68-238b-4f4a-a82d-10a72e05508a + 2019S90 + + + + + + + + + + + 6239 + https://hdl.handle.net/10013/sensor.a6bca9a2-fe33-4f8c-871e-62f6a71b4bcd + 2019V5 + + + + + + + + + + + 6038 + https://hdl.handle.net/10013/sensor.a6f40dc4-dea5-4ea6-b0d0-510f443f5815 + 2019O8 + + + + + + + + + + + 2929 + https://hdl.handle.net/10013/sensor.dc29431b-f849-4a6c-b4ee-76c3674b4a54 + 2019P88 + + + + + + + + + + + 2931 + https://hdl.handle.net/10013/sensor.76044e74-6c95-4765-b0cc-89239fa70be4 + 2019P90 + + + + + + + + + + + 2932 + https://hdl.handle.net/10013/sensor.21a67110-9ad1-451a-95c9-643e9557dd20 + 2019P91 + + + + + + + + + + + 2933 + https://hdl.handle.net/10013/sensor.8b8a32c6-1f81-4e43-a5b5-cfa95c569e8f + 2019P92 + + + + + + + + + + + 2943 + https://hdl.handle.net/10013/sensor.7144db61-0fdc-40c4-af04-218b2473ad75 + 2019P101 + + + + + + + + + + + 2945 + https://hdl.handle.net/10013/sensor.2a6676e1-c168-497e-b8c3-369b6214d62e + 2019P103 + + + + + + + + + + + 3515 + https://hdl.handle.net/10013/sensor.1adf116f-934a-45f4-b22b-6f188f30b866 + 2019P122 + + + + + + + + + + + 3517 + https://hdl.handle.net/10013/sensor.63370229-a4f5-47a4-b07c-a38d5c52b676 + 2019P124 + + + + + + + + + + + 3518 + https://hdl.handle.net/10013/sensor.a790cea7-b629-4ccc-a1fc-ecd81b977c03 + 2019P125 + + + + + + + + + + + 3530 + https://hdl.handle.net/10013/sensor.12a198db-bbd4-4ee1-b81c-2ae974a2d053 + 2019P126 + + + + + + + + + + + 5722 + https://hdl.handle.net/10013/sensor.38ee7932-0542-4025-85dc-d6db52b6539a + 2019P188 + + + + + + + + + + + 5724 + https://hdl.handle.net/10013/sensor.7445d49e-77e2-48a1-9bed-cae8a5b714f2 + 2019P191 + + + + + + + + + + + 5726 + https://hdl.handle.net/10013/sensor.3cfc2320-25fd-4568-9d06-53f22245b408 + 2019P193 + + + + + + + + + + + 5725 + https://hdl.handle.net/10013/sensor.1bd03c43-383f-419f-8e21-c1b2247e7eef + 2019P192 + + + + + + + + + + + 5432 + https://hdl.handle.net/10013/sensor.1b6723bd-1399-4e7c-8fb1-12a0d70c7c88 + 2019P190 + + + + + + + + + + + 5723 + https://hdl.handle.net/10013/sensor.6316ebc2-130b-4cd8-969c-0c86abd34516 + 2019P189 + + + + + + + + + + + 5727 + https://hdl.handle.net/10013/sensor.90055781-1d61-4312-82d9-d0a6208326e1 + 2019P194 + + + + + + + + + + + 5728 + https://hdl.handle.net/10013/sensor.1f3c31d0-cac2-4245-95ab-e34487e42cf7 + 2019P195 + + + + + + + + + + + 5729 + https://hdl.handle.net/10013/sensor.041c41da-016c-4251-a128-fc792192eed5 + 2019P196 + + + + + + + + + + + 5733 + https://hdl.handle.net/10013/sensor.b2f7dfb5-2252-4d0e-95a8-9c4da6dc59c2 + 2019P200 + + + + + + + + + + + 5731 + https://hdl.handle.net/10013/sensor.b39bfb44-11e8-4a3f-b6e7-24b10e438734 + 2019P198 + + + + + + + + + + + 5732 + https://hdl.handle.net/10013/sensor.3165e653-34dd-451f-9633-6130acbb8e85 + 2019P199 + + + + + + + + + + + 5730 + https://hdl.handle.net/10013/sensor.97cd5423-24d3-4dad-9462-ab291d355612 + 2019P197 + + + + + + + + + + + 5734 + https://hdl.handle.net/10013/sensor.417e2edd-3d88-4544-99f9-7fa31c57fb20 + 2019P201 + + + + + + + + + + + 5735 + https://hdl.handle.net/10013/sensor.251c2620-c3c2-4581-a517-d72078e069cd + 2019P202 + + + + + + + + + + + 5736 + https://hdl.handle.net/10013/sensor.d78cf31c-c0f7-4435-a7b9-19b262375a01 + 2019P203 + + + + + + + + + + + 5737 + https://hdl.handle.net/10013/sensor.0432ff64-7b38-4ab5-9585-513099168572 + 2019P204 + + + + + + + + + + + 5738 + https://hdl.handle.net/10013/sensor.64bb040b-2d5a-408c-84d7-ed440678f717 + 2019P205 + + + + + + + + + + + 5739 + https://hdl.handle.net/10013/sensor.d9ef43c1-c3b3-45b6-9024-ccc29e5725e6 + 2019P206 + + + + + + + + + + + 5740 + https://hdl.handle.net/10013/sensor.9feb4b9b-f347-44b9-9865-21dc82287f47 + 2019P207 + + + + + + + + + + + 5741 + https://hdl.handle.net/10013/sensor.5656995c-3aef-4069-a6aa-68f31377213b + 2019P208 + + + + + + + + + + + 5742 + https://hdl.handle.net/10013/sensor.784fa8d9-24ed-44f7-a345-f040d9af3410 + 2019P209 + + + + + + + + + + + 5716 + https://hdl.handle.net/10013/sensor.4205ac6c-2ed4-4339-85fa-4e59b3f91600 + 2019P182 + + + + + + + + + + + 5718 + https://hdl.handle.net/10013/sensor.3c32a34e-5a9d-4352-b0d9-4980610f9c62 + 2019P184 + + + + + + + + + + + 5721 + https://hdl.handle.net/10013/sensor.46c599dc-44f7-447d-9eb8-74eb843f9d2b + 2019P187 + + + + + + + + + + + 5765 + https://hdl.handle.net/10013/sensor.cbfef7d6-517c-403a-8a85-da8b47ca651e + 2019P135 + + + + + + + + + + + 5766 + https://hdl.handle.net/10013/sensor.3fbf3854-6a98-4630-a15b-5aba97c59ca9 + 2019P136 + + + + + + + + + + + 5767 + https://hdl.handle.net/10013/sensor.bc5b4e88-1748-4b15-9a36-29b3e959a3f9 + 2019P137 + + + + + + + + + + + 5768 + https://hdl.handle.net/10013/sensor.e8f96275-bb70-4c7a-9b9c-a37e117b035f + 2019P138 + + + + + + + + + + + 5769 + https://hdl.handle.net/10013/sensor.b62a5ad7-91a9-4572-8d19-8349d91d52a3 + 2019P139 + + + + + + + + + + + 5770 + https://hdl.handle.net/10013/sensor.52eef5a3-a20e-4d1f-a50d-f2561d8b5dff + 2019P140 + + + + + + + + + + + 5772 + https://hdl.handle.net/10013/sensor.a53a7adc-1118-41fe-acc1-6d0105f67b75 + 2019P142 + + + + + + + + + + + 5773 + https://hdl.handle.net/10013/sensor.7c04510a-a9a3-46c5-b07c-5cf36c3ee528 + 2019P143 + + + + + + + + + + + 5774 + https://hdl.handle.net/10013/sensor.aa5b7283-a316-4f7f-a287-67a3a6876050 + 2019P144 + + + + + + + + + + + 5775 + https://hdl.handle.net/10013/sensor.9164c699-ae04-4d7c-afe6-7e2b4ccd3bef + 2019P145 + + + + + + + + + + + 5776 + https://hdl.handle.net/10013/sensor.fdd17aca-9a6d-491b-bfb5-4bda21210830 + 2019P146 + + + + + + + + + + + 5778 + https://hdl.handle.net/10013/sensor.ebddd715-aa0f-41df-8f03-bb38ec8ea583 + 2019P148 + + + + + + + + + + + 5779 + https://hdl.handle.net/10013/sensor.7eb5969a-e279-48e6-bcb7-78827a45acb4 + 2019P149 + + + + + + + + + + + 2483 + https://hdl.handle.net/10013/sensor.0d67c779-7b1a-4ad9-b181-aa0e7d91d3a7 + 2019P22 + + + + + + + + + + + 3516 + https://hdl.handle.net/10013/sensor.29fceb29-6d4f-4d82-9366-f73b2f55a2fb + 2019P123 + + + + + + + + + + + 5982 + https://hdl.handle.net/10013/sensor.68d54397-dede-4c22-92de-bb369d63f237 + 2019T47 + + + + + + + + + + + 6215 + https://hdl.handle.net/10013/sensor.ddb388a9-f87e-412d-acd3-b338f903c1f7 + 2019F4 + + + + + + + + + + + 5065 + https://hdl.handle.net/10013/sensor.92d7a12d-46c7-4e10-933c-61b62e86b518 + SI_corer_9cm + + + + + + + + + + + 4332 + https://hdl.handle.net/10013/sensor.50176d2b-6378-4b9f-98f3-2a09e940f572 + Heli-PS + + + + + + + + + + + 3716 + https://hdl.handle.net/10013/sensor.068656f3-e9bb-49e6-90ee-1b01d772d7f6 + gem2-556 + + + + + + + + + + + 4889 + https://hdl.handle.net/10013/sensor.e4f0b19e-71bc-432e-a074-93fab32d6b12 + magnaprobe-anja + + + + + + + + + + + 6179 + https://hdl.handle.net/10013/sensor.5e7078ef-75f5-41c3-adbf-71fefec65402 + ice_gauge + + + + + + + + + + + 6140 + https://hdl.handle.net/10013/sensor.5441dc27-8ca5-49cf-9452-0608fa889ad7 + snow_sampler_glove + + + + + + + + + + + 5092 + https://hdl.handle.net/10013/sensor.3fa86ce9-3b79-4c52-b2d3-7cb315ff00ff + 2019W4 + + + + + + + + + + + 3359 + https://hdl.handle.net/10013/sensor.64c205d9-e5b9-4802-98a6-2396b19d94fa + 2019R9 + + + + + + + + + + + 3892 + https://hdl.handle.net/10013/sensor.98d6019f-49d6-47be-bd29-de86531bccce + 2019S92 + + + + + + + + + + + 5999 + https://hdl.handle.net/10013/sensor.beded052-74b2-4801-9030-0d346d3dbce3 + 2019I1 + + + + + + + + + + + 5076 + https://hdl.handle.net/10013/sensor.bd34849f-0abf-49ad-87d2-d9fd5787f0e9 + 2019F1 + + + + + + + + + + + 5192 + https://hdl.handle.net/10013/sensor.b0db0af2-2c8f-49f5-98ea-f5ce823ea59f + ASFS_40_UCB + + + + + + + + + + + 5062 + https://hdl.handle.net/10013/sensor.3d62d64d-8992-4404-82f8-522efbc91198 + MRS_1_UCB + + + + + + + + + + + 5996 + https://hdl.handle.net/10013/sensor.10e97fbb-82c6-453a-ac10-2052560cb75c + 2019T67 + + + + + + + + + + + 4592 + https://hdl.handle.net/10013/sensor.f84135fa-58f0-4d4e-861d-cf0fb164b886 + FIO_FIO + + + + + + + + + + + 5039 + https://hdl.handle.net/10013/sensor.2526bc73-b350-414e-900b-f0bfa7bae37e + ASFS_30_UCB + + + + + + + + + + + 6213 + https://hdl.handle.net/10013/sensor.8f388295-c0d7-4a44-8b4c-3ce5f304d8e5 + 2019F2 + + + + + + + + + + + 6001 + https://hdl.handle.net/10013/sensor.f1f732c7-7f08-4042-b285-b5740189eaed + 2019I2 + + + + + + + + + + + 5090 + https://hdl.handle.net/10013/sensor.b771e4be-031e-4341-879a-745e596442ab + 2019W2 + + + + + + + + + + + 3976 + https://hdl.handle.net/10013/sensor.86355238-f9d1-435e-8c72-38c95d371332 + 2019S93 + + + + + + + + + + + 3352 + https://hdl.handle.net/10013/sensor.359674a5-9fe3-469a-ae3f-fcbf740bd9a3 + 2019R8 + + + + + + + + + + + 5992 + https://hdl.handle.net/10013/sensor.2795c29b-0e1f-4cb1-a3f7-0e4df69e33c2 + 2019T65 + + + + + + + + + + + 5988 + https://hdl.handle.net/10013/sensor.e5e64153-23d9-4eb1-a078-8fa6c4459290 + 2019T63 + + + + + + + + + + + 4606 + https://hdl.handle.net/10013/sensor.c08726bd-2fd6-4e95-9a7f-c7d271456a89 + FIO_ITP + + + + + + + + + + + 5109 + https://hdl.handle.net/10013/sensor.8f23e784-724b-41cf-b95c-47bac9f68231 + 2019M30 + + + + + + + + + + + 5091 + https://hdl.handle.net/10013/sensor.61890a1e-15b5-4bb9-a7b1-bb8cbcd0aea7 + 2019W3 + + + + + + + + + + + 3977 + https://hdl.handle.net/10013/sensor.a91db810-4e17-405c-b11c-bb1ea6b4fa04 + 2019S94 + + + + + + + + + + + 6214 + https://hdl.handle.net/10013/sensor.ae8b5369-1b5f-4ce4-8c18-bb038824ce5a + 2019F3 + + + + + + + + + + + 5197 + https://hdl.handle.net/10013/sensor.93402aba-f69e-4bc0-8121-355687e63bfb + ASFS_50_UCB + + + + + + + + + + + 6003 + https://hdl.handle.net/10013/sensor.07da25fe-b080-488b-9088-69e045088aaa + 2019I3 + + + + + + + + + + + 5966 + https://hdl.handle.net/10013/sensor.91cbfba5-8459-4964-bd02-270095635d0e + 2019T70 + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + EM_Bird + + + + + + + + + + + 22 + https://hdl.handle.net/10013/sensor.14ff286a-af24-4be9-b751-6624db07ddd0 + Weather + + + + + + + + + + + 1398 + https://hdl.handle.net/10013/sensor.c1d22fe9-9fd7-47c3-a618-bd88af336258 + pCO2_GO_PS + + + + + + + + + + + 74 + https://hdl.handle.net/10013/sensor.cc39a224-58b6-47c9-b1e0-4f4e85f307ac + pCO2_Sub_PS + + + + + + + + + + + 1393 + https://hdl.handle.net/10013/sensor.449436da-cfd7-4d18-8577-fa238491dcfa + Hydrosweep DS3 + + + + + + + + + + + 1406 + https://hdl.handle.net/10013/sensor.d519dcbb-77bf-4542-9a6b-60792ce3bd26 + Gravimeter + + + + + + + + + + + 1407 + https://hdl.handle.net/10013/sensor.78be97fc-f13c-4667-9592-150f115c2929 + Magnetometer + + + + + + + + + + + 87 + https://hdl.handle.net/10013/sensor.1dfe92c9-d3fa-4b74-996d-1fdf9603f2e9 + TSK1 + + + + + + + + + + + 1337 + https://hdl.handle.net/10013/sensor.3d9cfaa1-be4b-46bb-8f26-70f6799c1c22 + TSK2 + + + + + + + + + + + 1396 + https://hdl.handle.net/10013/sensor.b2b4df14-a175-4305-b40b-744877b23770 + SVT + + + + + + + + + + + 625 + https://hdl.handle.net/10013/sensor.34be1bec-a599-464c-9c1e-f91107330423 + ADCP + + + + + + + + + + + 61 + https://hdl.handle.net/10013/sensor.8590c648-6e2a-4c82-92a6-334ca6533ab0 + FB_PS + + + + + + + + + + + 4189 + https://hdl.handle.net/10013/sensor.d19ffa2b-b86e-4f40-b4c6-d50aead7cdba + VIS_INFRALAN_01 + + + + + + + + + + + 3594 + https://hdl.handle.net/10013/sensor.a6725904-fde8-44cd-ac1e-231b390cba5d + ELBARA + + + + + + + + + + + 3537 + https://hdl.handle.net/10013/sensor.dbcf387f-958a-4562-80ba-9003d395dbde + KuKa_Radar + + + + + + + + + + + 4914 + https://hdl.handle.net/10013/sensor.77674eb2-30e4-4071-84b9-4910b99df332 + fmistressbuoy_1 + + + + + + + + + + + 4738 + https://hdl.handle.net/10013/sensor.0b0f2935-be7e-4fcd-8383-775245870324 + DTC11_416 + + + + + + + + + + + 4746 + https://hdl.handle.net/10013/sensor.dfdceaf6-ab5e-4311-8953-b77ab6709175 + DTC19_416 + + + + + + + + + + + 4733 + https://hdl.handle.net/10013/sensor.5a01159c-ce62-4fec-a3bc-c2f98f7a3fca + DTC06_256 + + + + + + + + + + + 4732 + https://hdl.handle.net/10013/sensor.5b034dbf-fe29-490e-b93f-8200af0cd982 + DTC05_256 + + + + + + + + + + + 4731 + https://hdl.handle.net/10013/sensor.3eaefadb-1baa-4b7d-a627-5cee8e684886 + DTC04_256 + + + + + + + + + + + 4730 + https://hdl.handle.net/10013/sensor.4e32c80a-c31c-466f-9a8b-218a1f2a4407 + DTC03_256 + + + + + + + + + + + 4745 + https://hdl.handle.net/10013/sensor.cf136e8c-e7e2-497c-96fb-cb58555bed5e + DTC18_416 + + + + + + + + + + + 4743 + https://hdl.handle.net/10013/sensor.825abd3d-4ee4-41be-8809-7c13d4db5e33 + DTC16_416 + + + + + + + + + + + 4742 + https://hdl.handle.net/10013/sensor.c36494e6-6115-498e-b140-25194238367b + DTC15_416 + + + + + + + + + + + 4741 + https://hdl.handle.net/10013/sensor.616c2360-5588-46b2-aec5-9c5ff01cf9ef + DTC14_416 + + + + + + + + + + + 4740 + https://hdl.handle.net/10013/sensor.cde9279d-ea4b-4aa9-9011-257dd0b06ccb + DTC13_416 + + + + + + + + + + + 4739 + https://hdl.handle.net/10013/sensor.c8806429-65f0-466e-8c2b-b9c20c82929b + DTC12_416 + + + + + + + + + + + 5994 + https://hdl.handle.net/10013/sensor.55dbaa02-5264-4b50-ba47-32b9080edc30 + 2019T66 + + + + + + + + + + + 5986 + https://hdl.handle.net/10013/sensor.e6cabfe6-5db2-4050-bc45-ba0d97371ad7 + 2019T62 + + + + + + + + + + + 5413 + https://hdl.handle.net/10013/sensor.6dc6f4e9-5aae-434e-b19c-2172b1ef21e8 + Tpop_61 + + + + + + + + + + + 4292 + https://hdl.handle.net/10013/sensor.773d1ccc-59b0-4450-8b8a-226a8b9abe12 + APS_PSI + + + + + + + + + + + 6152 + https://hdl.handle.net/10013/sensor.e80c0273-822d-411b-ac22-68f13b1bf74f + RH_inter_PSI + + + + + + + + + + + 6153 + https://hdl.handle.net/10013/sensor.e644bf1b-98f6-4b34-9eac-191aaa0fe17d + RH_total_PSI + + + + + + + + + + + 6011 + https://hdl.handle.net/10013/sensor.aac5f28b-0f46-4c9e-a02a-813511bdf80c + SIO_SedTrap_McLaneM78H-21 + + + + + + + + + + + 6012 + https://hdl.handle.net/10013/sensor.cc782e9f-a387-4d1a-b2d7-6371cbaff590 + SIO_IceBuoy_custom + + + + + + + + + + + 4179 + https://hdl.handle.net/10013/sensor.88504c1f-dfd3-415a-9e49-49f169f70629 + EMIRAD2 + + + + + + + + + + + 4076 + https://hdl.handle.net/10013/sensor.c3d3edb1-48e1-45ac-8546-a811628947ce + GNSS-receiver-TINY + + + + + + + + + + + 4075 + https://hdl.handle.net/10013/sensor.3e7f2b20-12ae-4ce6-aded-c4687b72a103 + GNSS-receiver-GORS + + + + + + + + + + + 6059 + https://hdl.handle.net/10013/sensor.63804599-e096-421a-94bc-c37af1200bf5 + 2019P152 + + + + + + + + + + + 6060 + https://hdl.handle.net/10013/sensor.77c4b65d-6ec4-4613-bf31-23a92de79230 + 2019P155 + + + + + + + + + + + 6061 + https://hdl.handle.net/10013/sensor.1091d948-b05f-4e94-b631-cf8df50a378e + 2019P156 + + + + + + + + + + + 6062 + https://hdl.handle.net/10013/sensor.c6f19374-4eef-4a97-b845-15db9490592b + 2019P157 + + + + + + + + + + + 6049 + https://hdl.handle.net/10013/sensor.ab17a42d-6339-478e-b99c-722b1d775d20 + 2019P153 + + + + + + + + + + + 4916 + https://hdl.handle.net/10013/sensor.94434efe-c9ff-43f6-8699-2fddd5ee8ab3 + fmistressbuoy_3 + + + + + + + + + + + 4748 + https://hdl.handle.net/10013/sensor.9dc78131-4558-4d36-82c3-3ffdcd217766 + DTC21_416 + + + + + + + + + + + 4758 + https://hdl.handle.net/10013/sensor.bd8d956e-e852-4711-a79d-d856d50283da + DTC31_512 + + + + + + + + + + + 4759 + https://hdl.handle.net/10013/sensor.fea09684-fabd-43a2-9d8a-f00fa18af39b + DTC32_512 + + + + + + + + + + + 4760 + https://hdl.handle.net/10013/sensor.c66b0315-fe43-4fe9-9917-829db4c64143 + DTC33_512 + + + + + + + + + + + 4747 + https://hdl.handle.net/10013/sensor.52607645-8442-4890-87dc-929228b7f370 + DTC20_416 + + + + + + + + + + + 4734 + https://hdl.handle.net/10013/sensor.97b69488-8293-40ad-a7b0-f5e4e13710d2 + DTC07_256 + + + + + + + + + + + + + + + + + + + + + + 5026 + https://hdl.handle.net/10013/sensor.c67a37b8-f020-460b-b864-1a60cc89b5f1 + flux_tower_12m_ucb + + + + + + + + + + + + + + + flux_tower_30m_leeds + + + + + + + + + + + 4282 + https://hdl.handle.net/10013/sensor.220e85e2-518c-4770-a9e0-511994831de6 + VISSS_CUB + + + + + + + + + + + 5417 + https://hdl.handle.net/10013/sensor.3c82049d-25b1-4bf6-be3c-5a94bf0e0f89 + Tpop_65 + + + + + + + + + + + 4182 + https://hdl.handle.net/10013/sensor.afba3127-cc79-4f57-8814-0c1f953c7a77 + Scat-L + + + + + + + + + + + 5179 + https://hdl.handle.net/10013/sensor.5cd00b3e-a333-46c3-91bb-5903ec7dba4b + TC2_178606 + + + + + + + + + + + 3979 + https://hdl.handle.net/10013/sensor.6fe87b24-9953-46c6-afce-073da28c89b7 + 2019S96 + + + + + + + + + + + 6088 + https://hdl.handle.net/10013/sensor.312389d2-114c-4f14-ad6e-8157e693f1b4 + AU0231 + + + + + + + + + + + 5527 + https://hdl.handle.net/10013/sensor.c8d63635-73f1-43f6-8d14-7803088c8c01 + GNSS_UoH_SP_S2 + + + + + + + + + + + 5524 + https://hdl.handle.net/10013/sensor.eb9e2a6e-bde4-4738-a675-0bc77d5b1a8e + GNSS_UoH_SP_S1 + + + + + + + + + + + 5435 + https://hdl.handle.net/10013/sensor.5e571926-02eb-4512-91fb-cbf327f62d3e + DC_stress_sensor_1 + + + + + + + + + + + 5436 + https://hdl.handle.net/10013/sensor.d4725456-4349-4886-84a0-91d3b42e32d4 + DC_stress_sensor_2 + + + + + + + + + + + 5437 + https://hdl.handle.net/10013/sensor.7dbe605f-be38-4d1d-ac8b-fe0bd885d035 + DC_stress_sensor_3 + + + + + + + + + + + 5438 + https://hdl.handle.net/10013/sensor.37dba97e-b7aa-43b9-8980-f0399711b18b + DC_stress_sensor_4 + + + + + + + + + + + 4522 + https://hdl.handle.net/10013/sensor.fe4313db-d48d-4cba-80c3-a4f8b45cdf9a + FMI_rad + + + + + + + + + + + 4191 + https://hdl.handle.net/10013/sensor.640f23d7-1785-4b87-91a8-70d088f5ee21 + IR_VarioCAM_01 + + + + + + + + + + + 3204 + https://hdl.handle.net/10013/sensor.410e7ee6-7303-4896-9cc7-8259a5e11166 + UW-MIMS_PS + + + + + + + + + + + 6206 + https://hdl.handle.net/10013/sensor.9c092cba-3092-45fe-95ca-b6a7ee8e4ad8 + ECO_UIS + + + + + + + + + + + 6005 + https://hdl.handle.net/10013/sensor.e37d1d3a-dd1a-46d1-b5f9-0a580cba2a2a + 2019I4 + + + + + + + + + + + 3591 + https://hdl.handle.net/10013/sensor.e2a5130d-958b-4f15-976a-9d32ee8a45c9 + UWBRAD + + + + + + + + + + + 5528 + https://hdl.handle.net/10013/sensor.db860cec-f915-4fef-a7a1-28deebc6b8b9 + GNSS_UoH_SP_S3 + + + + + + + + + + + 4663 + https://hdl.handle.net/10013/sensor.9e8bce1a-68a4-4515-8fda-5c352113175b + Stress_Logger_HSVA + + + + + + + + + + + 4749 + https://hdl.handle.net/10013/sensor.5b8ab4f7-f5ec-489a-9391-c8ccd8984cf0 + DTC22_416 + + + + + + + + + + + 4728 + https://hdl.handle.net/10013/sensor.69021974-cbc7-41f1-ac52-994bac37e763 + DTC01_256 + + + + + + + + + + + 4729 + https://hdl.handle.net/10013/sensor.516eeae0-cbe3-47d5-a3fa-7829e53c672d + DTC02_256 + + + + + + + + + + + 4744 + https://hdl.handle.net/10013/sensor.7ce1c5d7-94d1-42cd-99d6-593c7a0bff61 + DTC17_416 + + + + + + + + + + + 5974 + https://hdl.handle.net/10013/sensor.8580c1e1-3b7b-4d9e-8d5e-9cf9211a69f8 + 2019T56 + + + + + + + + + + + 6054 + https://hdl.handle.net/10013/sensor.7de4a11c-0138-466d-a511-c1d2dd700fd7 + 2019P161 + + + + + + + + + + + 6299 + https://hdl.handle.net/10013/sensor.b40266a8-e4a2-4e1c-844a-690a60c87a02 + uib_longranger + + + + + + + + + + + 5717 + https://hdl.handle.net/10013/sensor.ca7d1d7e-45d3-4e17-8173-81119d8713ae + 2019P183 + + + + + + + + + + + 6047 + https://hdl.handle.net/10013/sensor.4700be5c-c9c1-4aad-b2bb-108ef6b8072c + 2019P150 + + + + + + + + + + + 6048 + https://hdl.handle.net/10013/sensor.e9027bc6-d9a9-47bd-94e3-2afdb4b749a7 + 2019P151 + + + + + + + + + + + 6051 + https://hdl.handle.net/10013/sensor.a213fa26-d811-4b35-ba4d-5bc0c57680e8 + 2019P158 + + + + + + + + + + + 6052 + https://hdl.handle.net/10013/sensor.1c23fdb3-f0fc-4322-a8b0-c14b145a21ea + 2019P159 + + + + + + + + + + + 4181 + https://hdl.handle.net/10013/sensor.c2e31b34-cbac-4883-a007-d9a706c62910 + Scat-C + + + + + + + + + + + 6149 + https://hdl.handle.net/10013/sensor.a4a3c478-bfb1-4a8c-8b8b-272df7a55144 + 2019U1 + + + + + + + + + + + 6150 + https://hdl.handle.net/10013/sensor.7f2c4298-64f0-465f-a49d-e74e62c3dccf + 2019U2 + + + + + + + + + + + 6295 + https://hdl.handle.net/10013/sensor.c09a2156-e48f-4fc8-b98b-aac39f9ac320 + uib_cluster + + + + + + + + + + + 5439 + https://hdl.handle.net/10013/sensor.78dbccfa-a0d7-4268-bb5f-c94373d10d69 + DC_stress_sensor_5 + + + + + + + + + + + 5440 + https://hdl.handle.net/10013/sensor.543d9e41-fe80-41f8-b064-1c32600270c8 + DC_stress_sensor_6 + + + + + + + + + + + 5441 + https://hdl.handle.net/10013/sensor.cce3fced-3380-4e8d-9042-bc707eb99809 + DC_stress_sensor_7 + + + + + + + + + + + + + + + + + + + + 4185 + https://hdl.handle.net/10013/sensor.8a18f753-52a2-419f-98c9-1c98d545e649 + GNSS_JAVADd3 + + + + + + + + + + + 4750 + https://hdl.handle.net/10013/sensor.bf8e56bb-56b9-4510-8fa8-52fa0f3d3b9a + DTC23_416 + + + + + + + + + + + 3535 + https://hdl.handle.net/10013/sensor.09625055-dcbf-4079-addd-e81a4649ab6b + SSMI_radiometer_SN002 + + + + + + + + + + + 2944 + https://hdl.handle.net/10013/sensor.85d54f38-328e-4b0c-bb90-561e44a39a6a + 2019P102 + + + + + + + + + + + 2947 + https://hdl.handle.net/10013/sensor.e22b3148-115d-4be0-a514-b8aeab883b46 + 2019P105 + + + + + + + + + + + 5267 + https://hdl.handle.net/10013/sensor.ea1e7e49-c6ab-48cd-844f-95baa47b8201 + DC_rd_2 + + + + + + + + + + + 5268 + https://hdl.handle.net/10013/sensor.783ac676-f29b-4cf4-9e8b-6059c1434059 + DC_rd_3 + + + + + + + + + + GNSS_navX_MBANT + + + + + + + + + + + 5269 + https://hdl.handle.net/10013/sensor.76e77e5f-a92a-41c5-bc2d-a32fdc2c4d23 + DC_rd_4 + + + + + + + + + + + 5270 + https://hdl.handle.net/10013/sensor.ada9e285-12a4-4aaa-ba31-e783434715c2 + DC_rd_5 + + + + + + + + + + + 5271 + https://hdl.handle.net/10013/sensor.8ee2911c-7cc4-4f9e-8c31-f51a2cd08b2d + DC_rd_6 + + + + + + + + + + + 5272 + https://hdl.handle.net/10013/sensor.53f07f58-b777-4ee3-a5cf-5bf3dd26cea6 + DC_rd_7 + + + + + + + + + + + 5442 + https://hdl.handle.net/10013/sensor.1a42f635-43c3-4661-9c4e-56ce0df04f47 + DC_stress_sensor_8 + + + + + + + + + + + 5273 + https://hdl.handle.net/10013/sensor.9b896eee-6196-42be-ae68-a85494adbfab + DC_rd_8 + + + + + + + + + + + 5274 + https://hdl.handle.net/10013/sensor.0c23b75a-f1d3-4745-8961-f58d882518f9 + DC_rd_9 + + + + + + + + + + + 5275 + https://hdl.handle.net/10013/sensor.29f32f7f-7951-48a7-a1b1-b1b534cc3045 + DC_rd_10 + + + + + + + + + + GNSS_NTlab_FE + + + + + + + + + + + 5276 + https://hdl.handle.net/10013/sensor.ab2d4d8b-cd63-493e-9985-15c7e484281e + DC_rd_11 + + + + + + + + + + + 5277 + https://hdl.handle.net/10013/sensor.9fc5dd4e-208e-4ad2-8d19-de956a9c6f5c + DC_rd_12 + + + + + + + + + + + 5278 + https://hdl.handle.net/10013/sensor.8833ca54-4e97-4dbf-a3ab-d4aa5c88de63 + DC_rd_13 + + + + + + + + + + + 5279 + https://hdl.handle.net/10013/sensor.95e8e5b0-a349-440c-8b29-f4a89e272dc1 + DC_rd_14 + + + + + + + + + + + 5280 + https://hdl.handle.net/10013/sensor.59a66d2b-bbc8-4067-a2cf-a46debb2c003 + DC_rd_15 + + + + + + + + + + + 5281 + https://hdl.handle.net/10013/sensor.daf58c9d-2df8-47ec-af09-1525cf9646ba + DC_rd_16 + + + + + + + + + + + 5282 + https://hdl.handle.net/10013/sensor.431ebda8-1c8c-4d1a-8d35-94f434f3198d + DC_rd_17 + + + + + + + + + + + 5283 + https://hdl.handle.net/10013/sensor.19adf4f0-1ef2-4db6-849a-ec73bc9b81f0 + DC_rd_18 + + + + + + + + + + + 5284 + https://hdl.handle.net/10013/sensor.28c433fc-1b8b-425e-a5b7-db8731154162 + DC_rd_19 + + + + + + + + + + + 5285 + https://hdl.handle.net/10013/sensor.9449964f-ebf3-4890-b5f6-3dd2f2217258 + DC_rd_20 + + + + + + + + + + + 4877 + https://hdl.handle.net/10013/sensor.805944d0-106c-4be8-b5ba-db324be8b2ff + GRIMM_BAS + + + + + + + + + + + 5286 + https://hdl.handle.net/10013/sensor.a061c6f8-53be-4ea0-9d52-c16e30028358 + DC_rd_21 + + + + + + + + + + + 5287 + https://hdl.handle.net/10013/sensor.469f0052-c7c3-4ef5-994b-30489cecc8fd + DC_rd_22 + + + + + + + + + + + 5288 + https://hdl.handle.net/10013/sensor.b43941ef-6b4e-44ac-9a17-5a90f752001b + DC_rd_23 + + + + + + + + + + + 5289 + https://hdl.handle.net/10013/sensor.ce1489a4-59bb-4051-a083-04d8056289f2 + DC_rd_24 + + + + + + + + + + + 5290 + https://hdl.handle.net/10013/sensor.7b7a4195-dec3-4f46-8ead-84794ff60542 + DC_rd_25 + + + + + + + + + + + 5291 + https://hdl.handle.net/10013/sensor.97c95955-adea-4f27-8693-2b8e42502c1d + DC_rd_26 + + + + + + + + + + + 5292 + https://hdl.handle.net/10013/sensor.e5f8a2bc-c0ca-493a-8673-a9e1e6032625 + DC_rd_27 + + + + + + + + + + + 5293 + https://hdl.handle.net/10013/sensor.a6b29b0d-341d-421b-92a0-f2996e96ea07 + DC_rd_28 + + + + + + + + + + + 4692 + https://hdl.handle.net/10013/sensor.9854be75-c71d-47a7-9117-3d9d60fc13f2 + Dart_Stakes_Clu_3 + + + + + + + + + + + 4693 + https://hdl.handle.net/10013/sensor.d3ca5805-5dc2-4170-85e2-5a1a48e65f2b + Dart_Stakes_Clu_4 + + + + + + + + + + + 3171 + https://hdl.handle.net/10013/sensor.1ffd5084-7ad0-4c81-8d01-26287ebdf35d + ICEOBS_PS + + + + + + + + + + + 4694 + https://hdl.handle.net/10013/sensor.d4a5e2f4-1b28-4980-bf9c-fab9270d83a3 + Dart_Stakes_Clu_5 + + + + + + + + + + + + + + + + + + + 6304 + https://hdl.handle.net/10013/sensor.7d6ddd14-b0b9-4b0b-bbd9-dbb6d9e31cdf + arm_cluster_ice + + + + + + + + + + + + + + + + + + + 6300 + https://hdl.handle.net/10013/sensor.c905af47-d54a-40df-9136-463ee9c598b2 + arm_container_aos + + + + + + + + + + + + + + + + + + + 6301 + https://hdl.handle.net/10013/sensor.b1d61fd0-e34e-4965-ba9a-a97ff4557a18 + arm_container_kazr + + + + + + + + + + arm_container_ops + + + + + + + + + + + + + + + + + + + 6303 + https://hdl.handle.net/10013/sensor.ed74adba-e141-4e35-bf4a-98eeda535df4 + arm_cluster_25m + + + + + + + + + + + 3531 + https://hdl.handle.net/10013/sensor.722a4ba4-598d-4f07-8762-038b6f37f5b5 + 2019P127 + + + + + + + + + + + 3532 + https://hdl.handle.net/10013/sensor.f87666ac-7c31-4a37-a62d-6516b4b0e5ef + 2019P128 + + + + + + + + + + + 2482 + https://hdl.handle.net/10013/sensor.22f5db32-9a9d-45c0-9c8a-f361324a3e6d + 2019P16 + + + + + + + + + + + 1394 + https://hdl.handle.net/10013/sensor.7bbc4c13-92a5-477c-9984-baa59ce047ae + Simrad EK 60 / EK 80 + + + + + + + + + + + + + + + + + + 4061 + https://hdl.handle.net/10013/sensor.2d5594e6-284a-42ff-8573-487e9b68973a + MAX-DOAS + + + + + + + + + + + 4873 + https://hdl.handle.net/10013/sensor.4d7434bb-fc02-466e-b175-b6ee1db6410b + HiVol_SEM_BAS + + + + + + + + + + + 3210 + https://hdl.handle.net/10013/sensor.63acb097-8a90-4562-8475-63b2f7d7ab62 + OCEANET_PS + + + + + + + + + + + 5985 + https://hdl.handle.net/10013/sensor.a2677fc9-6360-468d-a737-b684593f6843 + FloeNavi + + + + + + + + + + + 4872 + https://hdl.handle.net/10013/sensor.e9aaa5cc-5564-4e51-af18-adab0a87ad73 + LoVol_INPC_BAS + + + + + + + + + + + 4130 + https://hdl.handle.net/10013/sensor.364c998f-c143-4b0d-b6d0-4095640ed44c + AWI-Radon-counter + + + + + + + + + + + 4060 + https://hdl.handle.net/10013/sensor.7709c7fb-e0c8-4785-a3bc-207074b1326f + GC-Halo2 + + + + + + + + + + + 4243 + https://hdl.handle.net/10013/sensor.1631cb76-0c90-4d6d-b7a8-db9b13669763 + Leeds_HALO_Lidar + + + + + + + + + + + 4231 + https://hdl.handle.net/10013/sensor.a1442c82-65e9-4608-aea0-083004660af8 + Wind_lidar_UT + + + + + + + + + + + 3736 + https://hdl.handle.net/10013/sensor.1266fa71-fd6f-45de-bf23-32df06e92399 + FMI_Ice_Radar + + + + + + + + + + + 5049 + https://hdl.handle.net/10013/sensor.ef78555e-0238-442b-a026-93031931dfae + SAMIP_5063 + + + + + + + + + + + 3880 + https://hdl.handle.net/10013/sensor.6af3c07c-5d8e-4d9a-9f17-023e6c3c8d3e + sonic_anemometer_2D_ship_bow + + + + + + + + + + + 3879 + https://hdl.handle.net/10013/sensor.08b24166-7dc8-4332-a143-73414ab7540b + sonic_anemometer_3D_ship_bow + + + + + + + + + + + 3881 + https://hdl.handle.net/10013/sensor.5159205d-5002-43f1-81ef-5c8ee08e7804 + licor_7500ds_ship_bow + + + + + + + + + + + 4930 + https://hdl.handle.net/10013/sensor.92d5606d-c452-4f23-a19f-8f836ed9e214 + gcms_ship_bow + + + + + + + + + + + 4931 + https://hdl.handle.net/10013/sensor.c1767e87-9125-4d81-be6a-51df63e62413 + nox_ship_bow + + + + + + + + + + + 4932 + https://hdl.handle.net/10013/sensor.b69c6313-04f5-45e4-b01f-88af6433084f + hg_ship_bow + + + + + + + + + + + 4929 + https://hdl.handle.net/10013/sensor.1b31980d-94b8-4b2e-a4ce-a06cf46b94b4 + ozone_slow_ship_bow + + + + + + + + + + + 4867 + https://hdl.handle.net/10013/sensor.63753e52-819f-40c9-8081-aa7ba998cee9 + SPC_1104_BAS + + + + + + + + + + + 4866 + https://hdl.handle.net/10013/sensor.5f551661-ae73-4710-978f-908741464998 + SPC_1206_BAS + + + + + + + + + + + 4871 + https://hdl.handle.net/10013/sensor.4a0196e0-fde3-4caf-8126-66e634884b5b + METEK_USA_1_BAS + + + + + + + + + + + 3878 + https://hdl.handle.net/10013/sensor.8741690a-6c9f-4586-a999-012a3357c730 + dms_apims_ship_bow + + + + + + + + + + + 4854 + https://hdl.handle.net/10013/sensor.169a75a7-33de-40c7-a038-e6215fe11eaa + GNSSR_FPOL + + + + + + + + + + + 4199 + https://hdl.handle.net/10013/sensor.a7b7a49f-0e17-4ba0-9439-5bb693440188 + DRUM + + + + + + + + + + + 5335 + https://hdl.handle.net/10013/sensor.348d00bb-b8e6-4e14-96fd-9eb5b9e47d8d + DRUM_IMP_UMICH + + + + + + + + + + + 4198 + https://hdl.handle.net/10013/sensor.f5efa87a-38f2-4200-9147-e887793a238c + CSUfilter + + + + + + + + + + + 5644 + https://hdl.handle.net/10013/sensor.aa82a407-6b77-41fb-b653-d4cff8805fd4 + Fcam + + + + + + + + + + + 4917 + https://hdl.handle.net/10013/sensor.a12a8b3c-6bd6-4a0d-844d-0f0f22420749 + fmistressbuoy_4 + + + + + + + + + + + 4915 + https://hdl.handle.net/10013/sensor.4133cb57-80ab-45bc-b7b9-c71714b7e236 + fmistressbuoy_2 + + + + + + + + + + + 4502 + https://hdl.handle.net/10013/sensor.3bcde8b8-f7a0-4280-b0cc-5340498090be + BNU-CRDS + + + + + + + + + + + 4924 + https://hdl.handle.net/10013/sensor.91517aa5-c81c-4535-98f8-b5d0c8625bf9 + ozone_fast_ship_bow + + + + + + + + + + + 3882 + https://hdl.handle.net/10013/sensor.f0ffc1b1-81d9-48e7-9bfd-b1b458844092 + crds_ghg_ship_bow + + + + + + + + + + + 4933 + https://hdl.handle.net/10013/sensor.998e9a25-3ff3-47f7-b854-ca2336a86b3d + t_rh_ship_bow + + + + + + + + + + + 4285 + https://hdl.handle.net/10013/sensor.1bd319f1-9387-4770-a5bf-6f5ca06bd7b5 + API_UHel + + + + + + + + + + + 4299 + https://hdl.handle.net/10013/sensor.21cca6e3-e5a9-4d54-8b1a-6bb57caf31b7 + Picarro_PSI + + + + + + + + + + + 4298 + https://hdl.handle.net/10013/sensor.83896367-31fe-4cbf-a72d-2234fb60c702 + O3_PSI + + + + + + + + + + + 4297 + https://hdl.handle.net/10013/sensor.ed0f7edf-f89b-4b54-8050-2b727bfb2b25 + SO2_PSI + + + + + + + + + + + 4287 + https://hdl.handle.net/10013/sensor.943204a4-f460-4245-90e1-57faad8208bf + CPCint_PSI + + + + + + + + + + + 4286 + https://hdl.handle.net/10013/sensor.7d636e93-b175-4356-a915-7a426b6bfad9 + CPCtot_PSI + + + + + + + + + + + 4290 + https://hdl.handle.net/10013/sensor.b1b2833a-15e5-4606-a7e5-9618c6387317 + AMS_PSI + + + + + + + + + + + 4291 + https://hdl.handle.net/10013/sensor.08f63d72-5f5e-4cf3-9c5e-7415b9455590 + Aeth_PSI + + + + + + + + + + + 4289 + https://hdl.handle.net/10013/sensor.8c04fcc1-47aa-4562-b1a5-30be4bbf3148 + CCNC_PSI + + + + + + + + + + + 4288 + https://hdl.handle.net/10013/sensor.7281fcb4-64ef-4968-b29a-19893d37402d + SMPS_PSI + + + + + + + + + + + 4296 + https://hdl.handle.net/10013/sensor.16e0cebc-0ef7-4855-b5d5-8fd152a17ceb + valve_PSI + + + + + + + + + + + 4293 + https://hdl.handle.net/10013/sensor.83b5f543-2e7e-4127-935c-b7cacbf7bcb1 + WIBS_PSI + + + + + + + + + + + 4283 + https://hdl.handle.net/10013/sensor.b406f1ac-d168-4042-9b2e-42fc4946b271 + NAIS_UHel + + + + + + + + + + + 4284 + https://hdl.handle.net/10013/sensor.ea60c191-adf2-4485-aadf-71884225d40f + PSM1_UHel + + + + + + + + + + + 4294 + https://hdl.handle.net/10013/sensor.e47dff79-5a67-4391-bb41-5f0a65b2b434 + PSM2_UHel + + + + + + + + + + + 5837 + https://hdl.handle.net/10013/sensor.6854a4ee-f553-466d-af00-28941c27132f + DOT + + + + + + + + + + + 4690 + https://hdl.handle.net/10013/sensor.cc102fed-0465-4e57-93a4-065a7445292e + Dart_Stakes_Clu_1 + + + + + + + + + + + 4691 + https://hdl.handle.net/10013/sensor.26b3cfe2-4639-457f-a02d-bb6035e05e73 + Dart_Stakes_Clu_2 + + + + + + + + + + + 5433 + https://hdl.handle.net/10013/sensor.fd2f72f3-8212-41fa-a2b0-1e9ca426f56b + DC_lso + + + + + + + + + + + 6069 + https://hdl.handle.net/10013/sensor.56908106-86c7-43ed-ad9b-0eebabf70f18 + crds_ghg_ice_station_tower + + + + + + + + + + + 6144 + https://hdl.handle.net/10013/sensor.028f4eff-044c-4b5d-94c8-4f2556608a55 + snow_sampler_metal + + + + + + + + + + + 5538 + https://hdl.handle.net/10013/sensor.cd6ede0c-99cf-4c99-842e-f52d593384d6 + PSS_beta + + + + + + + + + + + 5539 + https://hdl.handle.net/10013/sensor.e95c6344-87f9-4d03-87d5-5c25378e326e + PSS_gamma + + + + + + + + + + + 4200 + https://hdl.handle.net/10013/sensor.e9633e74-2e96-453c-b71a-9c802cb075ac + sondes + + + + + + + + + + + 4333 + https://hdl.handle.net/10013/sensor.09cc6e92-e1de-468c-a220-6f07354cb1dd + MP_pump + + + + + + + + + + + 3220 + https://hdl.handle.net/10013/sensor.cf5fcea7-42ec-4ce2-bbe1-22c60213882d + UWS_PS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5347 + https://hdl.handle.net/10013/sensor.b5c555cd-d125-4ef5-a8e4-4aca3cbeb937 + Snowpit + + + + + + + + + + + 6023 + https://hdl.handle.net/10013/sensor.72973058-0275-4c0f-a4a5-6c4e76136dc7 + LISSTDeep_4047 + + + + + + + + + + + 6141 + https://hdl.handle.net/10013/sensor.fe6c6b07-f54e-4038-98d4-9cf0ac3d1c17 + water_probe + + + + + + + + + + + 5174 + https://hdl.handle.net/10013/sensor.3def5c1e-c276-49e4-bba7-e646a023de0c + fmistressbuoy_5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 650 + https://hdl.handle.net/10013/sensor.9642f86f-7173-4362-b00a-e25d76cd2556 + BEAST + + + + + + + + + + + 5067 + https://hdl.handle.net/10013/sensor.4c4b8d1f-deab-42d1-895b-ce6b9c36aa76 + SI_corer_7cm + + + + + + + + + + + 4928 + https://hdl.handle.net/10013/sensor.09931005-4840-435c-8e0a-743a40cbeea1 + ozone_chamber_portable + + + + + + + + + + + 5546 + https://hdl.handle.net/10013/sensor.966e9507-b24d-45f6-ae61-70bdc423969b + Hydro_com + + + + + + + + + + + 4512 + https://hdl.handle.net/10013/sensor.4699acce-3374-473e-9c0d-ba7e304af39b + mss_046 + + + + + + + + + + + 5475 + https://hdl.handle.net/10013/sensor.009e4e08-0ebb-4c57-93ab-d27e3583f8ba + CTD_SBE9plus_935 + + + + + + + + + + + 4678 + https://hdl.handle.net/10013/sensor.abcb66c0-cc22-4427-84cd-701c02deaf28 + TLS-VZ1000 + + + + + + + + + + + 6181 + https://hdl.handle.net/10013/sensor.bc637b97-5eca-44c5-ae9e-aac8cc971134 + hand_pump + + + + + + + + + + + 5649 + https://hdl.handle.net/10013/sensor.c551635d-afba-4f21-a18d-b7b3d7121bab + LLine_1 + + + + + + + + + + + 3214 + https://hdl.handle.net/10013/sensor.4cc3ae98-6e3e-40de-95ff-4919b8cc3849 + CTD_SBE9plus_321 + + + + + + + + + + + 5682 + https://hdl.handle.net/10013/sensor.4a133a02-72a6-4226-9ba0-a74258e174f4 + RN150_1 + + + + + + + + + + + 5693 + https://hdl.handle.net/10013/sensor.53a2a808-107c-4196-8db4-9ff77992ede5 + RN53 + + + + + + + + + + + 5808 + https://hdl.handle.net/10013/sensor.dfdda18a-5393-4ea2-b048-3f6562a337eb + gasflux-ice-chamber + + + + + + + + + + + 3187 + https://hdl.handle.net/10013/sensor.e9f213b7-2214-40e0-b017-3e04339fc50b + MN_S5_PS + + + + + + + + + + + 700 + https://hdl.handle.net/10013/sensor.ac9ea029-ccbc-4fe5-8a6e-afbc64087966 + LOKI_10001.02 + + + + + + + + + + + 5694 + https://hdl.handle.net/10013/sensor.c1188604-0066-4a37-8dbd-6377e50bf062 + RN1000 + + + + + + + + + + + 3342 + https://hdl.handle.net/10013/sensor.2c98ef6b-dd3b-4530-b112-e44c9bbc2708 + TB_MOSAiC_AWI + + + + + + + + + + + 5537 + https://hdl.handle.net/10013/sensor.a3af0789-3b7a-45f6-bc2a-bae78333b1ff + PSS_alpha + + + + + + + + + + + 4811 + https://hdl.handle.net/10013/sensor.3ae0bd0e-c576-434a-9d88-e8c91e3a21ca + Anafi_UoH_Parrot_1 + + + + + + + + + + + 3876 + https://hdl.handle.net/10013/sensor.4bdfb0b8-5f12-4e24-806f-50964241632d + GNSS-R_IceFloe + + + + + + + + + + + 6131 + https://hdl.handle.net/10013/sensor.c9652345-dd7a-4552-8f59-bdc04bbb3899 + snow-stick + + + + + + + + + + + 3150 + https://hdl.handle.net/10013/sensor.ce12fb29-7be1-4266-b078-a4723d4cd5ae + BUCKET_PS + + + + + + + + + + + 5161 + https://hdl.handle.net/10013/sensor.88266673-1256-4ec0-9f75-207d2c38ee05 + CSUportablesampler + + + + + + + + + + + 5004 + https://hdl.handle.net/10013/sensor.d25f9f2d-18f1-4bf1-b953-2960d14632aa + BALAMIS_Rad + + + + + + + + + + + 3190 + https://hdl.handle.net/10013/sensor.ea9fb492-9eb1-45ea-ae5a-0cc95ef5a30c + OBS_PS + + + + + + + + + + + 5066 + https://hdl.handle.net/10013/sensor.9c0d7de3-8833-43c4-a919-ecb45a12ca58 + SI_corer_14cm + + + + + + + + + + + 4892 + https://hdl.handle.net/10013/sensor.843b0600-a6ee-43aa-8c69-00a91a217ab2 + magnaprobe-kathrin + + + + + + + + + + + 4936 + https://hdl.handle.net/10013/sensor.88911923-3a9f-4f9a-bf08-463bd59cf844 + gmd_flask_sampler + + + + + + + + + + + 4511 + https://hdl.handle.net/10013/sensor.7e43d978-aef8-4fdf-9b0d-d965e3b51d73 + MSS_90D_075 + + + + + + + + + + + 5679 + https://hdl.handle.net/10013/sensor.a9849224-8108-456e-a92c-4c0cab588df9 + gillnet_1 + + + + + + + + + + + 6246 + https://hdl.handle.net/10013/sensor.8685d6b1-788d-430a-be71-65e552f59b2d + SI_ice_sampler + + + + + + + + + + + 5652 + https://hdl.handle.net/10013/sensor.fb6a6e94-801f-4be0-8cb4-5a4889788cbb + FRod_1 + + + + + + + + + + + 6184 + https://hdl.handle.net/10013/sensor.becd0625-ac40-4de0-93dc-6d6f79698c8d + sali_ubremen_1 + + + + + + + + + + + 5650 + https://hdl.handle.net/10013/sensor.26a3ee9d-87d4-4b6e-bf5d-2c6e9c98f67a + LLine_2 + + + + + + + + + + + 4196 + https://hdl.handle.net/10013/sensor.adf794a0-9aee-424a-bb23-7656d05f6fb4 + BHJ + + + + + + + + + + + 6252 + https://hdl.handle.net/10013/sensor.03b9978a-9c88-4343-83e9-2596094afdd3 + ctd_rbr_60547 + + + + + + + + + + + 3169 + https://hdl.handle.net/10013/sensor.24d65e85-57b5-4d7f-9b1c-be96d0885aa7 + HVAIR_PS + + + + + + + + + + + 4149 + https://hdl.handle.net/10013/sensor.044dbbea-14be-4bb1-9c56-9e7550947062 + nortek_101408 + + + + + + + + + + + 4148 + https://hdl.handle.net/10013/sensor.30eb1118-4b32-47e8-8ac1-0edcdb8e485c + nortek_100098 + + + + + + + + + + + 4150 + https://hdl.handle.net/10013/sensor.18952063-f885-431e-9b95-9c4346258a37 + rbr_60610 + + + + + + + + + + + 4151 + https://hdl.handle.net/10013/sensor.b6137fce-ecf5-4de9-bd14-c4f8bb5c8306 + rbr_60611 + + + + + + + + + + + 4552 + https://hdl.handle.net/10013/sensor.04b37298-e202-4a96-84d5-32ca97007013 + UIB_Tchain + + + + + + + + + + + 6349 + https://hdl.handle.net/10013/sensor.2df1053d-d7bf-4726-8e77-fd761f37073e + noy_inlet_bow_tower + + + + + + + + + + + 4643 + https://hdl.handle.net/10013/sensor.f5d39e02-b667-40d7-91c4-4d0fa1000e03 + lightharp_1 + + + + + + + + + + + 4644 + https://hdl.handle.net/10013/sensor.ee6b5821-78c5-4c26-9216-7149aa031f99 + saltharp_1 + + + + + + + + + + + 4183 + https://hdl.handle.net/10013/sensor.c81ce279-7499-467b-9514-8df435fad84e + Scat-Ku_X + + + + + + + + + + + 4540 + https://hdl.handle.net/10013/sensor.e72e6f05-a915-4d7b-a6d1-d0223c2214d4 + UIB_Microrider + + + + + + + + + + + 6009 + https://hdl.handle.net/10013/sensor.8c2897ad-b032-4b8c-8f4d-14b80518dc41 + 2020T60 + + + + + + + + + + + 4752 + https://hdl.handle.net/10013/sensor.d65a2143-5516-41a5-b5b4-974469b22204 + DTC25_416 + + + + + + + + + + + 4751 + https://hdl.handle.net/10013/sensor.c3f625e0-367c-47e6-8926-17734b61405c + DTC24_416 + + + + + + + + + + + 5443 + https://hdl.handle.net/10013/sensor.8d68650d-3234-4519-8d2b-8fbae9f20112 + DC_stress_sensor_9 + + + + + + + + + + + 5449 + https://hdl.handle.net/10013/sensor.9f888706-d93f-4590-833f-082293f923f2 + DC_dgps_1 + + + + + + + + + + + 5520 + https://hdl.handle.net/10013/sensor.3fb44281-5fc1-4f51-9f9e-c165ed60b525 + DC_dgps_2 + + + + + + + + + + + 4190 + https://hdl.handle.net/10013/sensor.d60af310-8e37-4543-8076-555f10757390 + VIS_INFRALAN_02 + + + + + + + + + + + 5180 + https://hdl.handle.net/10013/sensor.9c5a6393-7004-4739-a144-629676453cd7 + BTC60_181890 + + + + + + + + + + + 4736 + https://hdl.handle.net/10013/sensor.427085d5-47f6-44af-a638-91529ab11092 + DTC09_256 + + + + + + + + + + + 6007 + https://hdl.handle.net/10013/sensor.63c0b5a3-7fc8-41ab-a5f5-34de66c2c628 + 2020T61 + + + + + + + + + + + 3908 + https://hdl.handle.net/10013/sensor.de1699b7-aeec-49fa-b65e-23a24747bce4 + 2020S99 + + + + + + + + + + + 5444 + https://hdl.handle.net/10013/sensor.c8ab9da5-fd28-4ca7-815e-4a6eeb93bd66 + DC_stress_sensor_10 + + + + + + + + + + + 5445 + https://hdl.handle.net/10013/sensor.bd8b3e64-a9be-460d-9633-b2dbe577f057 + DC_stress_sensor_11 + + + + + + + + + + + 4131 + https://hdl.handle.net/10013/sensor.17d9a75e-9473-4439-b141-84ede94b9d49 + AWI-canberra + + + + + + + + + + + 7152 + https://hdl.handle.net/10013/sensor.c22048fb-2dae-4c3c-a95e-8b6d1312b112 + 2020E2 + + + + + + + + + + + 7151 + https://hdl.handle.net/10013/sensor.d89b3041-25a2-4e5b-8153-494dd779d438 + 2020E1 + + + + + + + + + + + 5182 + https://hdl.handle.net/10013/sensor.e62de770-760b-4611-89d8-48619b913f20 + GPS_zeni_7350 + + + + + + + + + + + 5184 + https://hdl.handle.net/10013/sensor.56632617-1a79-4709-9340-c91d8ba70b66 + GPS_zeni_9300 + + + + + + + + + + + 5183 + https://hdl.handle.net/10013/sensor.4a5e05bf-b769-47b4-b3af-665038f6f839 + GPS_zeni_8380 + + + + + + + + + + + 5185 + https://hdl.handle.net/10013/sensor.2b45b165-ee5c-4b64-bb1c-1523e1b2a639 + GPS_zeni_9350 + + + + + + + + + + + 7153 + https://hdl.handle.net/10013/sensor.5e37f086-ff86-41c2-9300-3bfda0a2cde5 + 2020E3 + + + + + + + + + + + 6151 + https://hdl.handle.net/10013/sensor.3df9e817-95a4-48f7-a92f-ee2a4a11dd07 + APi-PSI + + + + + + + + + + + 4695 + https://hdl.handle.net/10013/sensor.a854f179-fcef-4a8f-b26e-1918485d3db9 + Dart_Stakes_Clu_6 + + + + + + + + + + + 4696 + https://hdl.handle.net/10013/sensor.c7ff0cec-8e84-4988-aebd-633affdc14d3 + Dart_Stakes_Clu_7 + + + + + + + + + + + 4735 + https://hdl.handle.net/10013/sensor.516344d1-575e-4800-ae4e-4cda67c34edf + DTC08_256 + + + + + + + + + + + 4723 + https://hdl.handle.net/10013/sensor.a16c8b13-9af4-4fb4-b0ca-96d6b4c32a41 + LOKI_10001-01 + + + + + + + + + + + 4527 + https://hdl.handle.net/10013/sensor.30b175be-967e-40eb-a3b3-b0090ab1beda + SN_GPR + + + + + + + + + + + 5653 + https://hdl.handle.net/10013/sensor.8bc3a8cc-0938-4bfd-9d7f-e99771c3549f + FRod_2 + + + + + + + + + + + 6165 + https://hdl.handle.net/10013/sensor.3bf53c89-fbed-4486-b5f3-2856fcd76def + ADCP_14733 + + + + + + + + + + + 5416 + https://hdl.handle.net/10013/sensor.7d695797-5fb0-4cb9-b726-e8527892d4a8 + Tpop_64 + + + + + + + + + + + 4066 + https://hdl.handle.net/10013/sensor.ab3694c0-58c7-46fc-8537-b630816b896c + radionuc-pump + + + + + + + + + + + 4241 + https://hdl.handle.net/10013/sensor.76743b8b-5499-46f9-b64f-cadc07f55bf9 + Buck_HIVOL1 + + + + + + + + + + + 5683 + https://hdl.handle.net/10013/sensor.9cd9a11f-8d44-4f5b-af7a-af5edfb95712 + RN150_2 + + + + + + + + + + + 909 + https://hdl.handle.net/10013/sensor.58c0c57f-b792-4e49-9626-959f46346062 + DT101_multibeam(BEAST) + + + + + + + + + + + 3234 + https://hdl.handle.net/10013/sensor.39082f20-596f-4be3-a979-48aea355ff91 + Seebiber + + + + + + + + + + + 4701 + https://hdl.handle.net/10013/sensor.b6ecc3ef-62c0-4be2-8007-70888b2a3d80 + Magnaprobe-Bruce + + + + + + + + + + + 6467 + https://hdl.handle.net/10013/sensor.76fd1e4a-3eee-434b-b5da-d5c1aa629d09 + SI_2iauger + + + + + + + + + + + 4434 + https://hdl.handle.net/10013/sensor.c31dd73a-d72f-4b4d-85d1-6db7a2146c6f + 600kHzADCP + + + + + + + + + + + 6470 + https://hdl.handle.net/10013/sensor.5c9e69a4-90f5-4676-a495-302ab73c272a + CTD_48M_1495 + + + + + + + + + + + 6092 + https://hdl.handle.net/10013/sensor.b6e76c5c-edda-4477-abf9-540d868bdfc8 + shortterm_sedtrap_ridge + + + + + + + + + + + 6782 + https://hdl.handle.net/10013/sensor.2262db86-68bd-4190-ab59-5b4485f8bbfd + shortterm_sedtrap_ridge_2 + + + + + + + + + + + 6091 + https://hdl.handle.net/10013/sensor.2c001e03-5bb7-45ab-bbb7-56fdd34a7ba2 + shortterm_sedtrap_lice + + + + + + + + + + + 6783 + https://hdl.handle.net/10013/sensor.e446a9c7-6074-41d5-8142-3586f67a8df9 + shortterm_sedtrap_lice_2 + + + + + + + + + + + 6784 + https://hdl.handle.net/10013/sensor.903e7dfe-1afa-4421-b3b2-73552a136efc + shortterm_sedtrap_lice_3 + + + + + + + + + + + 3538 + https://hdl.handle.net/10013/sensor.aa05510e-4b8c-4908-b389-160a69d2c312 + MEC1 + + + + + + + + + + + 6616 + https://hdl.handle.net/10013/sensor.25463b9a-eabc-4f35-9884-f7ac8deaea77 + NISK5L_5 + + + + + + + + + + + 6615 + https://hdl.handle.net/10013/sensor.625ccd34-178b-48c7-a0ee-135b475fb812 + NISK5L_3 + + + + + + + + + + + 6617 + https://hdl.handle.net/10013/sensor.c11df984-6101-4f82-b67d-68a8454b4271 + NISK5L_6 + + + + + + + + + + + 6610 + https://hdl.handle.net/10013/sensor.32613dbe-36ee-482b-b0cb-724a69612b68 + NISK5L_2 + + + + + + + + + + + 4254 + https://hdl.handle.net/10013/sensor.accee596-3f73-4fe4-a494-37346ff937fd + handnet20microm_1 + + + + + + + + + + + 6164 + https://hdl.handle.net/10013/sensor.4b8e10cc-0e8c-4e88-a29a-162caaaf349f + MSS_55 + + + + + + + + + + + 5559 + https://hdl.handle.net/10013/sensor.d0353fd7-4f97-408a-b438-b355d0dc4c49 + Cond_com-100 + + + + + + + + + + + 6639 + https://hdl.handle.net/10013/sensor.1ddcbf65-c814-4d58-bbb4-4d56e549a932 + 300kHzADCP + + + + + + + + + + + 5833 + https://hdl.handle.net/10013/sensor.2e9be664-037a-42c6-9f75-e93f77185d47 + CTD_SBE19_7057 + + + + + + + + + + + 6629 + https://hdl.handle.net/10013/sensor.1e5c821e-45b5-4f41-bfb0-e11566356638 + falcon_tube + + + + + + + + + + + 5787 + https://hdl.handle.net/10013/sensor.19a85518-89d6-447e-af31-ca56a7f65449 + uea_flask_sampler + + + + + + + + + + + 6469 + https://hdl.handle.net/10013/sensor.7351c1d2-dff4-4da7-bdce-c54516dac319 + CTD_48M_1459 + + + + + + + + + + + 1713 + https://hdl.handle.net/10013/sensor.5e1a5ff9-1790-4e93-b7f2-2f8d2b11e270 + SBE-37_225 + + + + + + + + + + + 1754 + https://hdl.handle.net/10013/sensor.98d46201-1432-4f4e-91fc-2297f5d2a835 + SBE-37_230 + + + + + + + + + + + 4541 + https://hdl.handle.net/10013/sensor.28797aef-0cfa-4a74-adec-180d02d26657 + UIB_VMP250 + + + + + + + + + + + 6180 + https://hdl.handle.net/10013/sensor.8650f175-2782-4762-854e-768d9be3cbf9 + seawatertap_ps + + + + + + + + + + + 6785 + https://hdl.handle.net/10013/sensor.552dda67-06c2-42c1-8bb1-79e53203f956 + rbr_duet_td_85201 + + + + + + + + + + + 6041 + https://hdl.handle.net/10013/sensor.7df2f7c2-8137-40fb-affc-2ca73503bdb0 + 2020P210 + + + + + + + + + + + 6042 + https://hdl.handle.net/10013/sensor.6a286000-c311-455a-b53b-351ebfc31495 + 2020P211 + + + + + + + + + + + 6044 + https://hdl.handle.net/10013/sensor.7c3399f9-51ad-4244-ad7d-087069ad085b + 2020P213 + + + + + + + + + + + 6045 + https://hdl.handle.net/10013/sensor.3c495fb0-b931-40e4-8711-e3ce4c94c8f4 + 2020P214 + + + + + + + + + + + 6046 + https://hdl.handle.net/10013/sensor.672ed9ba-5c3f-475f-8cf5-406daca40cce + 2020P215 + + + + + + + + + + + 6475 + https://hdl.handle.net/10013/sensor.5f38b778-d73c-4f3b-ab69-a42296cb6b94 + 2020T75 + + + + + + + + + + + 4336 + https://hdl.handle.net/10013/sensor.158e673f-e114-411c-b5e6-82da571e3844 + 2020R12 + + + + + + + + + + + 3980 + https://hdl.handle.net/10013/sensor.b5d7b1fe-1d03-408e-9ef8-668f880ee477 + 2020S97 + + + + + + + + + + + 6982 + https://hdl.handle.net/10013/sensor.8c574152-d5fd-4b4e-a722-6c199b511dda + GNSS_UoH_SP_S5 + + + + + + + + + + + 6983 + https://hdl.handle.net/10013/sensor.191aec73-976e-4011-93b2-8bf038d2e5a3 + GNSS_UoH_SP_S6 + + + + + + + + + + + 4337 + https://hdl.handle.net/10013/sensor.09814e21-0e79-4f71-93c3-ee3cf330bb19 + 2020R13 + + + + + + + + + + + 7007 + https://hdl.handle.net/10013/sensor.9cd93761-816e-4b33-b006-5bfdfb33ebb5 + 2020P225 + + + + + + + + + + + 7009 + https://hdl.handle.net/10013/sensor.c6994821-626d-44ea-944b-41dc50bb4dbd + 2020P226 + + + + + + + + + + + 7008 + https://hdl.handle.net/10013/sensor.4054fbb0-8203-4253-ba5d-87eca396ec38 + 2020P227 + + + + + + + + + + + + + + + + + + 4817 + https://hdl.handle.net/10013/sensor.0d095be6-cc14-4fc6-aef4-01ac95d8f4df + Tekran_2537B_USTC + + + + + + + + + + + 7012 + https://hdl.handle.net/10013/sensor.bdfee50b-a721-45e8-b135-a99986b55f18 + 2020P228 + + + + + + + + + + + 7027 + https://hdl.handle.net/10013/sensor.1ae68d3d-8357-41dd-bc57-ad96a08ad060 + DTC40_512 + + + + + + + + + + + 4565 + https://hdl.handle.net/10013/sensor.22611a15-cd0f-4111-9b42-7789d0eec275 + UIB_RBR_CTD_1 + + + + + + + + + + + 4566 + https://hdl.handle.net/10013/sensor.38da9ded-ce6c-4b62-967a-88f2d9451142 + UIB_RBR_CTD_2 + + + + + + + + + + + 4567 + https://hdl.handle.net/10013/sensor.932fe77d-0218-46a2-bddd-b449a5678c3b + UIB_RBR_CTD_3 + + + + + + + + + + + 4568 + https://hdl.handle.net/10013/sensor.8fdce567-c895-48ca-b1f1-875146945f86 + UIB_RBR_CTD_4 + + + + + + + + + + + 5922 + https://hdl.handle.net/10013/sensor.7ece614f-28a5-447a-8213-63f85df8861f + PAR_surface_20460 + + + + + + + + + + + 7056 + https://hdl.handle.net/10013/sensor.bf844b7b-4ac1-4642-ad20-69fe8c0f0ea7 + cpc_rov + + + + + + + + + + + 7055 + https://hdl.handle.net/10013/sensor.847c51bf-c707-4022-a657-ffbca492a2f0 + cpc_empa + + + + + + + + + + + 4919 + https://hdl.handle.net/10013/sensor.01cf1ad4-713a-4a4a-8d46-65bd3d830208 + pump_00119 + + + + + + + + + + + 4918 + https://hdl.handle.net/10013/sensor.4c10ecf1-5795-458c-96f4-8ad0ba9def2c + pump_00219 + + + + + + + + + + + 7107 + https://hdl.handle.net/10013/sensor.d7f5f3f8-9a83-49e5-b0e8-1620a1faf197 + cu_rad + + + + + + + + + + + 4737 + https://hdl.handle.net/10013/sensor.e97de92d-3ca5-4843-8866-1bdbc847b015 + DTC10_256 + + + + + + + + + + + 4244 + https://hdl.handle.net/10013/sensor.a45bc0f4-eba7-4a29-a623-97423570c483 + Leeds_Galion_Lidar + + + + + + + + + + + 4242 + https://hdl.handle.net/10013/sensor.38a113ec-e135-4856-9c77-2c3bb54c8f73 + Scintec_Sodar + + + + + + + + + + + 4334 + https://hdl.handle.net/10013/sensor.fcaa445a-ba64-4c03-98bb-49961b28905b + 2020R10 + + + + + + + + + + + 4068 + https://hdl.handle.net/10013/sensor.0422ce26-879d-45f3-a38d-e5701c76c12d + OA-ICOS_N2O + + + + + + + + + + + 6900 + https://hdl.handle.net/10013/sensor.73385e94-c82c-446a-a5c3-1a7361004ebe + SO2-UHel + + + + + + + + + + + 5086 + https://hdl.handle.net/10013/sensor.284e2ecf-72d3-4fa4-b71b-d334f08bf90d + HUTRAD + + + + + + + + + + + 4335 + https://hdl.handle.net/10013/sensor.83695213-115c-4607-a6d3-eaa126137294 + 2020R11 + + + + + + + + + + + 6053 + https://hdl.handle.net/10013/sensor.2c46aea3-c867-4e4f-b97a-ae79a9e296f5 + 2020P160 + + + + + + + + + + + 5719 + https://hdl.handle.net/10013/sensor.fe414122-ba20-4ef1-b6e9-aca46b2e185a + 2020P185 + + + + + + + + + + + 5720 + https://hdl.handle.net/10013/sensor.09b3ea06-884e-4982-a81c-d8db36d59aac + 2020P186 + + + + + + + + + + + 6463 + https://hdl.handle.net/10013/sensor.cc8bcc0f-7459-406b-bd81-8b84db4d16da + 2020P217 + + + + + + + + + + + 6464 + https://hdl.handle.net/10013/sensor.89b08465-1737-4654-a83f-b90d803f4664 + 2020P218 + + + + + + + + + + + 6465 + https://hdl.handle.net/10013/sensor.48125686-3be6-44b9-b16c-0a2233086fe1 + 2020P219 + + + + + + + + + + + 6466 + https://hdl.handle.net/10013/sensor.ee5269ac-c5e2-418a-814b-c8f4d48a58bc + 2020P220 + + + + + + + + + + + 6043 + https://hdl.handle.net/10013/sensor.2fcd5e5c-567a-4ac0-a9ec-4a9b2c6c0e68 + 2020P212 + + + + + + + + + + + 6462 + https://hdl.handle.net/10013/sensor.2920acac-b04c-4b16-b26c-a0d07fe5e964 + 2020P216 + + + + + + + + + + + 4338 + https://hdl.handle.net/10013/sensor.8ae596b8-3096-4eef-bf98-ac17538357bc + 2020R14 + + + + + + + + + + + 5747 + https://hdl.handle.net/10013/sensor.9a55cd5c-f7e8-4df6-afcc-d318d1134dc4 + 2020R20 + + + + + + + + + + + 6991 + https://hdl.handle.net/10013/sensor.d3e637b9-16dd-44d8-ab40-3ab5d0b71ff4 + DTC44_416 + + + + + + + + + + + 6990 + https://hdl.handle.net/10013/sensor.f19d8477-db7e-4d05-bba9-a2edf950a4d3 + DTC45_416 + + + + + + + + + + + 3536 + https://hdl.handle.net/10013/sensor.4d1500ae-7539-4572-bb7e-abf6cd548e0a + SPECIM_IQ_01 + + + + + + + + + + + 6980 + https://hdl.handle.net/10013/sensor.fb054d26-82ce-4663-a1f8-b94d6a6276d1 + GNSS_UoH_SP_S4 + + + + + + + + + + + 6471 + https://hdl.handle.net/10013/sensor.227839f6-b94c-44ad-bddf-47b20d73ff8b + 2020T73 + + + + + + + + + + + 6483 + https://hdl.handle.net/10013/sensor.07e67c9e-e67c-4b3c-8dc1-f693cc41a149 + 2020T79 + + + + + + + + + + + 6479 + https://hdl.handle.net/10013/sensor.e32926b9-fdcf-4eba-992f-38f3b7a47542 + 2020T77 + + + + + + + + + + + 6477 + https://hdl.handle.net/10013/sensor.8f96ae18-7e6c-4824-92d3-10667359ca54 + 2020T76 + + + + + + + + + + + 6473 + https://hdl.handle.net/10013/sensor.5cfd8d74-3fac-49c2-bdd3-bc7637fbe422 + 2020T74 + + + + + + + + + + + 4875 + https://hdl.handle.net/10013/sensor.eaf25707-62b8-4966-abbf-d568e2c83047 + CAPS_CAS_BAS + + + + + + + + + + + 4874 + https://hdl.handle.net/10013/sensor.e0b281b4-2401-4c24-b3b4-bb6020e6b388 + CAPS_CIP_BAS + + + + + + + + + + + 4876 + https://hdl.handle.net/10013/sensor.92b5d15e-a7eb-40e0-b6ee-10620fe5593e + SPIN_BAS + + + + + + + + + + + 4253 + https://hdl.handle.net/10013/sensor.2b4bae1b-27b9-4ae4-acf7-8418a91cd65d + typhoon_sn1479 + + + + + + + + + + + 6578 + https://hdl.handle.net/10013/sensor.11163d9c-f93f-480e-8775-4781d6e98be6 + 114CU + + + + + + + + + + + 6570 + https://hdl.handle.net/10013/sensor.aff30698-6533-4193-809a-ce529bf701f2 + 81CU + + + + + + + + + + + 5673 + https://hdl.handle.net/10013/sensor.1c7ca54c-e19a-4c83-82bd-a13fa1a41bd7 + NaNet150_1 + + + + + + + + + + + 6586 + https://hdl.handle.net/10013/sensor.89efe762-af0c-4cf6-9734-156e8e475428 + 122CU + + + + + + + + + + + 6546 + https://hdl.handle.net/10013/sensor.8255c094-d03b-4f17-937b-c61a2907de7c + 117CU + + + + + + + + + + + 4683 + https://hdl.handle.net/10013/sensor.e7fa02b8-fcde-44d8-8edf-9509a1076646 + Dart_Kipps + + + + + + + + + + + 4134 + https://hdl.handle.net/10013/sensor.e5c29511-bc41-454a-807d-43b6411e6c41 + DN-metal-chamber + + + + + + + + + + + 4127 + https://hdl.handle.net/10013/sensor.8e6e7a14-9251-458c-99a6-0fbf8305abc0 + Buck_HIVOL2 + + + + + + + + + + + 7057 + https://hdl.handle.net/10013/sensor.7301029e-7ae2-4fcc-86ba-6437e34016e4 + loac + + + + + + + + + + + 6538 + https://hdl.handle.net/10013/sensor.220bf5d6-c54a-4245-bfde-1ff147bb8426 + 116CU + + + + + + + + + + + 4697 + https://hdl.handle.net/10013/sensor.c7b81f0c-2449-4138-ac88-1f6dffe80783 + Dart_Stakes_Clu_8 + + + + + + + + + + + 6530 + https://hdl.handle.net/10013/sensor.87a1fb11-caaa-4371-80f0-b41de19dacbd + 115CU + + + + + + + + + + + 4698 + https://hdl.handle.net/10013/sensor.47deedeb-9f22-482f-9bb9-62247f0ec6d6 + Dart_Stakes_Clu_9 + + + + + + + + + + + 5680 + https://hdl.handle.net/10013/sensor.fefcde0a-0bcf-4f46-bf04-b0f0fc92adff + gillnet_2 + + + + + + + + + + + 4187 + https://hdl.handle.net/10013/sensor.f499f37d-a51f-4611-abd3-cee4997f6c50 + FP-HELIPOD + + + + + + + + + + + 4699 + https://hdl.handle.net/10013/sensor.9d0cfbf2-bc09-4f87-a46c-96adbefc9dd3 + Dart_Stakes_Clu_10 + + + + + + + + + + + 1421 + https://hdl.handle.net/10013/sensor.469453ed-2c7b-4feb-ba33-6d27d4b05a7c + Myon Detector + + + + + + + + + + + + + + + + + 1433 + https://hdl.handle.net/10013/sensor.57ac22d2-eb70-4510-8aa2-8b4244d97c8f + Neutron Monitor + + + + + + + + + + + 1419 + https://hdl.handle.net/10013/sensor.4b4ab375-4d67-4ac3-8ef0-eac6d7d5b76b + WaMoSII + + + + + + + + + + + 1232 + https://hdl.handle.net/10013/sensor.79f77747-ec7d-45e1-bdbd-4edd3e19570a + AUTOFIM_10001.125 + + + + + + + + + + + 4057 + https://hdl.handle.net/10013/sensor.8a86e201-2d68-4827-a2b8-b598973d6b23 + Pic2132ed + + + + + + + + + + + 5428 + https://hdl.handle.net/10013/sensor.b5d3cb1f-5c31-4e06-9c61-227f748bb4e2 + Tpop_76 + + + + + + + + + + + 7348 + https://hdl.handle.net/10013/sensor.71ebf254-4811-4102-a7e2-49082892c2be + NAIS_STERN + + + + + + + + + + + 5427 + https://hdl.handle.net/10013/sensor.f08fd3ca-f2e9-4e1a-b9b8-2189cefb68ef + Tpop_75 + + + + + + + + + + + 4339 + https://hdl.handle.net/10013/sensor.c7b7173d-9f1a-48ce-b33a-7da99daf3999 + 2020R15 + + + + + + + + + + + 571 + https://hdl.handle.net/10013/sensor.6067d528-3967-42a0-a070-0d56ea913144 + isoarc_9999a + + + + + + + + + + + 5424 + https://hdl.handle.net/10013/sensor.590e6e9b-6785-495a-9d3c-d3222e77fecc + Tpop_72 + + + + + + + + + + + 4664 + https://hdl.handle.net/10013/sensor.cf708123-5e4c-4e7f-8774-b57695656ae3 + DMS_Logger_HSVA + + + + + + + + + + + 5414 + https://hdl.handle.net/10013/sensor.faf56336-38f2-43c7-891e-4935144f730e + Tpop_62 + + + + + + + + + + + 3723 + https://hdl.handle.net/10013/sensor.c53fb847-4331-499a-812a-38bae9bcd614 + 2020M27 + + + + + + + + + + + 5422 + https://hdl.handle.net/10013/sensor.8b0eb3c7-e8d1-4ae9-ac46-d6ccddf53848 + Tpop_70 + + + + + + + + + + + 7146 + https://hdl.handle.net/10013/sensor.f82dd226-eb57-4bcb-952c-84570de95f8d + Dart_Stakes_Clu_11 + + + + + + + + + + + 7147 + https://hdl.handle.net/10013/sensor.252f0243-dfa9-42bf-aee8-92101e9311f6 + Dart_Stakes_Clu_12 + + + + + + + + + + + 3722 + https://hdl.handle.net/10013/sensor.7f633727-816b-4c10-8a4f-da26f7c91cba + 2020M26 + + + + + + + + + + + 6975 + https://hdl.handle.net/10013/sensor.fffb3049-f115-4506-ab47-c23f28bcee74 + UW_IRcam + + + + + + + + + + + 7148 + https://hdl.handle.net/10013/sensor.dde12312-6486-4150-aa0f-1790d559ebde + Dart_Stakes_Clu_13 + + + + + + + + + + + 6506 + https://hdl.handle.net/10013/sensor.7f682884-3e8b-4cac-a2db-768d99646739 + 121CU + + + + + + + + + + + 4682 + https://hdl.handle.net/10013/sensor.f3691fbc-a1fd-444b-bef9-06296ee771bf + Dart_ASD + + + + + + + + + + + 7130 + https://hdl.handle.net/10013/sensor.2826eddf-0502-43ae-934d-f2c9d4bd3a8a + mss_90L_091 + + + + + + + + + + + 7045 + https://hdl.handle.net/10013/sensor.060cc5c8-1972-457b-a1e4-698427070f59 + UW_castaway_CC1415003 + + + + + + + + + + + 4807 + https://hdl.handle.net/10013/sensor.7c87a1ed-26a3-4fb9-9cf6-e828fef5d80d + MEC2 + + + + + + + + + + + 7115 + https://hdl.handle.net/10013/sensor.69bdfca8-b1d8-491e-a9f3-86e611219471 + microtops_24209 + + + + + + + + + + + 7378 + https://hdl.handle.net/10013/sensor.406bc096-e0d2-40f2-ab38-418a0d84662b + cau_stickle_1 + + + + + + + + + + + 4521 + https://hdl.handle.net/10013/sensor.0d290109-ac6e-4750-833f-a11259f75711 + SN_TLS600 + + + + + + + + + + + 6366 + https://hdl.handle.net/10013/sensor.17a2de25-0042-4b29-9355-18965a18237e + 73CU + + + + + + + + + + + 6444 + https://hdl.handle.net/10013/sensor.cdd9c97f-ce43-4a0d-868f-0d01676863b3 + 6CU + + + + + + + + + + + 7356 + https://hdl.handle.net/10013/sensor.070eff56-da4a-4551-80d5-f1b84a753bb0 + Larm + + + + + + + + + + + 4814 + https://hdl.handle.net/10013/sensor.3f796e2f-f4af-4bea-b263-0c741388ad3a + S_XT_SN19076 + + + + + + + + + + + 3343 + https://hdl.handle.net/10013/sensor.991e7822-b888-43db-a966-03eb5037f2a3 + TB_MOSAiC_TROPOS + + + + + + + + + + + 4883 + https://hdl.handle.net/10013/sensor.2da74fe1-ffe0-428e-967d-8c6f781e9198 + CAMP_2_TROPOS + + + + + + + + + + + 6976 + https://hdl.handle.net/10013/sensor.c0b39158-247d-4588-a263-c40f8949a3b9 + UW_GoPro + + + + + + + + + + + 7377 + https://hdl.handle.net/10013/sensor.9ac7eaa2-f11e-4916-ae0e-768ea6d7019f + cau_boeoetle_1 + + + + + + + + + + + 4685 + https://hdl.handle.net/10013/sensor.7818464f-3dff-4ff9-a661-84de422995d0 + Dart_YSI + + + + + + + + + + + 7143 + https://hdl.handle.net/10013/sensor.be6abfa9-f22b-435e-8969-0c4f98ed92ed + water_sampler + + + + + + + + + + + 4680 + https://hdl.handle.net/10013/sensor.fbed9fd3-12c9-4c51-ab46-ca08d82d3569 + UW_SPECEVOL + + + + + + + + + + + 4455 + https://hdl.handle.net/10013/sensor.7e200222-e356-4620-934a-5a45d1c0c30a + CAU_RAMSES_1 + + + + + + + + + + + 4456 + https://hdl.handle.net/10013/sensor.69edcae1-c375-4489-959b-3f42ba021520 + CAU_RAMSES_2 + + + + + + + + + + + 4457 + https://hdl.handle.net/10013/sensor.2c3d453d-15a3-4649-9f5a-1b70c7bdc987 + CAU_RAMSES_3 + + + + + + + + + + + 7371 + https://hdl.handle.net/10013/sensor.74d57208-0523-481b-8bec-256959b435ae + CAU_GARMINGPS_1 + + + + + + + + + + + 6989 + https://hdl.handle.net/10013/sensor.31a7fc07-e143-4026-881d-2b26a560e6b9 + IOP_Probe + + + + + + + + + + + 4510 + https://hdl.handle.net/10013/sensor.7c12f923-f510-4771-a6b1-b3e7e41e788c + FP-C14CH4air + + + + + + + + + + + 7339 + https://hdl.handle.net/10013/sensor.cb02fdd6-bafe-4cb3-8c59-5e00912ead70 + peristaltic_pump + + + + + + + + + + + 7347 + https://hdl.handle.net/10013/sensor.240c13aa-f30e-4abc-b595-dd2b7bb2adcf + RN150_60cm + + + + + + + + + + + 7388 + https://hdl.handle.net/10013/sensor.1c7f4bec-49b1-467b-9234-6353c6203f15 + cau_notecam_1 + + + + + + + + + + + 4753 + https://hdl.handle.net/10013/sensor.8867f0d2-1a5d-4ad4-a161-f6622e350145 + DTC26_416 + + + + + + + + + + + 7357 + https://hdl.handle.net/10013/sensor.a9e5a770-df21-4638-842b-6793a073879f + general_fish_sampler + + + + + + + + + + + 5081 + https://hdl.handle.net/10013/sensor.b2459dc5-a19e-419c-b371-3923d5b1574e + Panomax + + + + + + + + + + + 7097 + https://hdl.handle.net/10013/sensor.6468cedc-b888-4eb0-80e9-9c29107d9033 + 2020P172 + + + + + + + + + + + 7595 + https://hdl.handle.net/10013/sensor.ef9ed127-17d2-48f1-a190-15b09e2bd011 + 2020T84 + + + + + + + + + + + 7600 + https://hdl.handle.net/10013/sensor.5409d0b2-2069-4159-b0c3-6d496c05570d + 2020F5 + + + + + + + + + + + 7334 + https://hdl.handle.net/10013/sensor.0a1b2aa5-3dbb-4eae-b6f1-98c6a6816c8d + 2020P233 + + + + + + + + + + + 3981 + https://hdl.handle.net/10013/sensor.4463da9b-9d88-4f26-860c-78a01d3f5f28 + 2020S98 + + + + + + + + + + + 3351 + https://hdl.handle.net/10013/sensor.736a5d1a-7ee2-4780-a223-902d62b16d45 + 2020M23 + + + + + + + + + + + 7597 + https://hdl.handle.net/10013/sensor.3b936b7a-fa57-47e4-92df-a9075940ede1 + 2020S109 + + + + + + + + + + + 7337 + https://hdl.handle.net/10013/sensor.ed58a94c-5142-4117-bc6e-9c3a195a7036 + 2020P236 + + + + + + + + + + + 5177 + https://hdl.handle.net/10013/sensor.c4a433b5-b48d-4793-bda1-24c8ac6d2b4c + AquaDopp_8415 + + + + + + + + + + + 5175 + https://hdl.handle.net/10013/sensor.a3529641-45d4-4c9c-9ed9-e05c6c4f90a2 + Vector_5418 + + + + + + + + + + + 3400 + https://hdl.handle.net/10013/sensor.cd259390-a434-4c57-96ea-cee909f6b1f8 + 2020P115 + + + + + + + + + + + 3404 + https://hdl.handle.net/10013/sensor.f0de85fe-d2e2-4a9f-83be-ca8c66974afd + 2020P118 + + + + + + + + + + + 7649 + https://hdl.handle.net/10013/sensor.14eb6d4e-493b-444c-ac4a-5f25f23cec22 + Lead_CTD_chain + + + + + + + + + + + 7651 + https://hdl.handle.net/10013/sensor.d62b1cfd-1b01-46a8-98ec-60f2ebb535f3 + BOS077 + + + + + + + + + + + 7653 + https://hdl.handle.net/10013/sensor.d81d888a-f32b-454a-b1e0-899022163275 + DTC_RS051 + + + + + + + + + + + 7657 + https://hdl.handle.net/10013/sensor.26d5e2eb-43ae-4e19-a35d-cd2065a64a22 + DTC_RS055 + + + + + + + + + + + 7654 + https://hdl.handle.net/10013/sensor.2fdf2303-4462-4f15-8524-7132ee0ce860 + DTC_RS052 + + + + + + + + + + + 7655 + https://hdl.handle.net/10013/sensor.225f2c10-5ef4-47e3-b62f-31a14e666e44 + DTC_RS053 + + + + + + + + + + + 7656 + https://hdl.handle.net/10013/sensor.978a65a4-4ac9-4e7e-8596-7656fa8110ee + DTC_RS054 + + + + + + + + + + + 7658 + https://hdl.handle.net/10013/sensor.2ac088ee-7e12-4e1f-bdba-8151e469f25c + DTC_RS056 + + + + + + + + + + + 7407 + https://hdl.handle.net/10013/sensor.1b6f2b86-6d40-42fa-8aa6-b1542783ea1b + azfp_076 + + + + + + + + + + ibob_078 + + + + + + + + + + + 7006 + https://hdl.handle.net/10013/sensor.f72a9c9e-d0ee-4d7f-8e5a-9fb6ef58feed + 2020S105 + + + + + + + + + + + 7663 + https://hdl.handle.net/10013/sensor.5d91a1da-04d6-4e24-97aa-035a1b09585f + aerosol_chamber_olla + + + + + + + + + + + 7664 + https://hdl.handle.net/10013/sensor.14a2846e-2bc0-4556-bcb1-3284ff65fcd5 + smps_spain + + + + + + + + + + + 7598 + https://hdl.handle.net/10013/sensor.d24ab5a5-d803-40dc-acb7-1fd5333e9d76 + 2020T85 + + + + + + + + + + + 6013 + https://hdl.handle.net/10013/sensor.495ad36b-fd57-400e-ae66-8de087d378c4 + SIO_McLanePPS24 + + + + + + + + + + + 7335 + https://hdl.handle.net/10013/sensor.e897c251-dab1-42db-a087-ccadfc1e6aa6 + 2020P234 + + + + + + + + + + + 4133 + https://hdl.handle.net/10013/sensor.b5c9e281-1674-41c5-a229-dac08df0f81f + thermorec-1 + + + + + + + + + + + 4469 + https://hdl.handle.net/10013/sensor.c2b18e7b-6c08-4b33-99ab-d1e2bb6280fe + thermorec-2 + + + + + + + + + + + 4470 + https://hdl.handle.net/10013/sensor.c25be241-0a64-4513-b2ad-269f349d1c92 + thermorec-3 + + + + + + + + + + + 4471 + https://hdl.handle.net/10013/sensor.1564c716-e8cd-4cd4-a1b8-3a6c49b11431 + thermorec-4 + + + + + + + + + + + 4472 + https://hdl.handle.net/10013/sensor.bb2fb7e3-3d02-4037-9cec-3f8722cff6d9 + thermorec-5 + + + + + + + + + + + 4473 + https://hdl.handle.net/10013/sensor.547cbe04-1cda-45fd-b860-6770f94cc1fd + thermorec-6 + + + + + + + + + + + 4474 + https://hdl.handle.net/10013/sensor.5c23fd5d-5848-4af2-b344-b061571f77cd + thermorec-7 + + + + + + + + + + + 4475 + https://hdl.handle.net/10013/sensor.55cdac49-6b5c-4164-b5f0-68ea5af4a4cd + thermorec-8 + + + + + + + + + + + 7330 + https://hdl.handle.net/10013/sensor.51d4fe74-9643-476f-a90d-d9bc90e6a171 + 2020P229 + + + + + + + + + + + 7331 + https://hdl.handle.net/10013/sensor.b77b1a9f-030e-4760-8651-1b1718f6bfcf + 2020P230 + + + + + + + + + + + 7332 + https://hdl.handle.net/10013/sensor.fd1f91f4-15f1-4997-9097-1be76d384df8 + 2020P231 + + + + + + + + + + + 7338 + https://hdl.handle.net/10013/sensor.f939f0bf-7226-4eab-9bac-7bd60ae9468d + 2020P237 + + + + + + + + + + + 6481 + https://hdl.handle.net/10013/sensor.ce6068a8-6d31-47ae-b3b1-e1642a37c842 + 2020T78 + + + + + + + + + + + 7149 + https://hdl.handle.net/10013/sensor.ea53c305-fe30-4081-86e5-b94d2edb3427 + Dart_Stakes_Clu_14 + + + + + + + + + + + 7389 + https://hdl.handle.net/10013/sensor.5844e9c2-dcb3-4d94-91fd-96d0de43936a + 2020S107 + + + + + + + + + + + 7372 + https://hdl.handle.net/10013/sensor.91f6cb78-69e9-48e5-8242-8ab632a0335f + 2020S106 + + + + + + + + + + + 7342 + https://hdl.handle.net/10013/sensor.492059a7-e2fd-4362-ba52-fc4e2b3ccdef + 2020T81 + + + + + + + + + + + 5186 + https://hdl.handle.net/10013/sensor.d8b33e37-4347-4b6a-a8ee-5d8ede5a7709 + GPS_MY_5460 + + + + + + + + + + + 5187 + https://hdl.handle.net/10013/sensor.28ab3b40-afd3-4096-b204-16bd856c1b2c + GPS_MY_5610 + + + + + + + + + + + 5188 + https://hdl.handle.net/10013/sensor.6c1fc266-9184-4ea8-8639-f18ca14f5947 + GPS_MY_5620 + + + + + + + + + + + 7561 + https://hdl.handle.net/10013/sensor.c95bebfc-e309-4eeb-93ad-2dbc05f1e11f + 2020S108 + + + + + + + + + + + 7384 + https://hdl.handle.net/10013/sensor.2f979aab-5fe7-456e-8d75-1cdec2893f78 + 2020R22 + + + + + + + + + + + 7091 + https://hdl.handle.net/10013/sensor.eea35369-14a3-459a-923b-47d46a858d10 + 2020P166 + + + + + + + + + + + 7093 + https://hdl.handle.net/10013/sensor.8017bf73-fc5b-4dce-80be-f877c31242e5 + 2020P168 + + + + + + + + + + + 7100 + https://hdl.handle.net/10013/sensor.511cb343-a066-455c-8bb4-f91d16182cd8 + 2020P175 + + + + + + + + + + + 7090 + https://hdl.handle.net/10013/sensor.a0e85ce1-b624-4edb-a106-77c2aa2b832f + 2020P165 + + + + + + + + + + + 7095 + https://hdl.handle.net/10013/sensor.8034384d-1f49-4d25-bf0c-112770b4a8bc + 2020P170 + + + + + + + + + + + 7103 + https://hdl.handle.net/10013/sensor.19228b4f-0b2b-4b4d-a6c7-ecca1e309dd5 + 2020P178 + + + + + + + + + + + 7094 + https://hdl.handle.net/10013/sensor.be153646-02be-4cee-8c89-f08539068c29 + 2020P169 + + + + + + + + + + + 7089 + https://hdl.handle.net/10013/sensor.050e22ac-bd1f-42fd-b36f-454d61564f6b + 2020P164 + + + + + + + + + + + 7088 + https://hdl.handle.net/10013/sensor.6323de87-6965-44d2-83fc-e0860d5e6548 + 2020P163 + + + + + + + + + + + 7087 + https://hdl.handle.net/10013/sensor.eecbc8f6-a6f2-43b0-b53e-de01dfedf23b + 2020P162 + + + + + + + + + + + 7106 + https://hdl.handle.net/10013/sensor.8724164d-17b3-4251-8931-f7b2953013c9 + 2020P181 + + + + + + + + + + + 7380 + https://hdl.handle.net/10013/sensor.71e0b114-8cfe-4a27-9b44-d4c8dfe8f360 + 2020R21 + + + + + + + + + + + 7101 + https://hdl.handle.net/10013/sensor.f1a73bc8-21a0-4109-aa68-93aee2220196 + 2020P176 + + + + + + + + + + + 7104 + https://hdl.handle.net/10013/sensor.ad231318-4d2f-44bf-8f50-5bb1b3b7bbe0 + 2020P179 + + + + + + + + + + + 7092 + https://hdl.handle.net/10013/sensor.1de58644-2ce8-4007-b94c-19e830b39814 + 2020P167 + + + + + + + + + + + 7096 + https://hdl.handle.net/10013/sensor.bba23433-4a1e-4b4c-95eb-1efc8402ce93 + 2020P171 + + + + + + + + + + + 7105 + https://hdl.handle.net/10013/sensor.ccc7d6d4-4ced-44c3-8f48-9e1af791e34b + 2020P180 + + + + + + + + + + + 7102 + https://hdl.handle.net/10013/sensor.1521887d-a5fe-4d78-835c-bf9760e8d82b + 2020P177 + + + + + + + + + + + 7099 + https://hdl.handle.net/10013/sensor.be808048-898b-4867-a5b2-6140ddf1d89a + 2020P174 + + + + + + + + + + + 7575 + https://hdl.handle.net/10013/sensor.53ace4c4-dde0-40dc-a1e7-a555a595b618 + 2020O10 + + + + + + + + + + + 3721 + https://hdl.handle.net/10013/sensor.585485c0-9ea9-44a7-b279-abab894c87fe + 2020M28 + + + + + + + + + + + 7336 + https://hdl.handle.net/10013/sensor.608d2e0a-9614-4bff-9695-5cb1f8cf66d7 + 2020P235 + + + + + + + + + + + 7098 + https://hdl.handle.net/10013/sensor.265f6a8f-1333-4d5c-a6cb-daf973bcf73a + 2020P173 + + + + + + + + + + + 7333 + https://hdl.handle.net/10013/sensor.f0a4c697-5324-4bb5-b791-32f8b4892838 + 2020P232 + + + + + + + + + + + 5079 + https://hdl.handle.net/10013/sensor.946a8943-69fe-41b1-9055-33fa8c6105f2 + XCTD_MK150_1 + + + + + + + + + + + 5381 + https://hdl.handle.net/10013/sensor.c655ff13-a76d-4fa9-9e95-8f79b01f1f38 + Tpop_57 + + + + + + + + + + + 7369 + https://hdl.handle.net/10013/sensor.3de82de9-a0c7-464d-9769-b9e8116768e8 + fmi_mavic2pro_drone + + + + + + + + + + + 5178 + https://hdl.handle.net/10013/sensor.f2e9886a-900e-4cce-b1b4-e0b412b386f9 + RINKO-pro_592 + + + + + + + + + + + 5411 + https://hdl.handle.net/10013/sensor.a4687f8b-db7e-4ebd-ab2c-72b14223c405 + Tpop_59 + + + + + + + + + + + 7361 + https://hdl.handle.net/10013/sensor.fdde439b-c0fb-4869-b661-9881d9b3ad2c + CO2-equilibrator-sea-ice + + + + + + + + + + + 4816 + https://hdl.handle.net/10013/sensor.dfddc0be-1505-4910-8b1c-acdd63840e98 + KZ_CNR4_SN090078 + + + + + + + + + + + 7366 + https://hdl.handle.net/10013/sensor.0da1795f-dbc8-4873-ad11-eb72153fe60a + FMI_Spectra_Copter + + + + + + + + + + + 4322 + https://hdl.handle.net/10013/sensor.86cdb17a-5578-4a30-a90c-86aedb9663d2 + Eco_mp_1 + + + + + + + + + + + 5558 + https://hdl.handle.net/10013/sensor.459aff36-f57a-41f7-8130-d19b833ef24b + Ice_rail + + + + + + + + + + + 5410 + https://hdl.handle.net/10013/sensor.93376a3b-bbcc-468f-962b-64074a3c67d5 + Tpop_58 + + + + + + + + + + + 5412 + https://hdl.handle.net/10013/sensor.c4e7025e-7610-4ce1-8d87-a62066b8d11d + Tpop_60 + + + + + + + + + + + 7648 + https://hdl.handle.net/10013/sensor.65521ec0-3914-4d54-813f-3e9b066113d9 + AARI_thermometer + + + + + + + + + + + 4451 + https://hdl.handle.net/10013/sensor.9f5d2dd9-02ea-4e4f-9a2d-0d18424ba59c + CAU_ASD + + + + + + + + + + 2021-04-30T06:42:49Z + StartDateTime + + + + + + + + + + 2021-04-30T06:43:06Z + EndDateTime + + + + + + + + + + + + + + 2021-05-19T06:25:51Z + Kanzow, Torsten + + + + + + + + + + + + + + 2021-05-19T06:26:18Z + Haas, Christian + + + + + + + + + + + + + + + 2021-05-19T06:26:39Z + Krumpen, Thomas + + + + + + + + + + + + + + 2021-05-19T06:26:57Z + Shupe, Matthew D + + + + + + + + + + + + + + 2021-05-19T06:27:10Z + Metfies, Katja + + + + + + + + + + + + + + 2021-05-19T06:27:32Z + Sokolov, Vladimir + + + + + + + + + + + + + + AF-MOSAiC-1_1 + + + + + + + + + + + + + + AF-MOSAiC-1_10 + + + + + + + + + + + + + + AF-MOSAiC-1_100 + + + + + + + + + + + + + + AF-MOSAiC-1_101 + + + + + + + + + + + + + + AF-MOSAiC-1_102 + + + + + + + + + + + + + + AF-MOSAiC-1_103 + + + + + + + + + + + + + + AF-MOSAiC-1_104 + + + + + + + + + + + + + + AF-MOSAiC-1_105 + + + + + + + + + + + + + + AF-MOSAiC-1_106 + + + + + + + + + + + + + + AF-MOSAiC-1_107 + + + + + + + + + + + + + + AF-MOSAiC-1_108 + + + + + + + + + + + + + + AF-MOSAiC-1_109 + + + + + + + + + + + + + + AF-MOSAiC-1_11 + + + + + + + + + + + + + + AF-MOSAiC-1_110 + + + + + + + + + + + + + + AF-MOSAiC-1_111 + + + + + + + + + + + + + + AF-MOSAiC-1_112 + + + + + + + + + + + + + + AF-MOSAiC-1_113 + + + + + + + + + + + + + + AF-MOSAiC-1_114 + + + + + + + + + + + + + + AF-MOSAiC-1_115 + + + + + + + + + + + + + + AF-MOSAiC-1_116 + + + + + + + + + + + + + + AF-MOSAiC-1_117 + + + + + + + + + + + + + + AF-MOSAiC-1_118 + + + + + + + + + + + + + + AF-MOSAiC-1_119 + + + + + + + + + + + + + + AF-MOSAiC-1_12 + + + + + + + + + + + + + + AF-MOSAiC-1_120 + + + + + + + + + + + + + + AF-MOSAiC-1_121 + + + + + + + + + + + + + + AF-MOSAiC-1_122 + + + + + + + + + + + + + + AF-MOSAiC-1_123 + + + + + + + + + + + + + + AF-MOSAiC-1_124 + + + + + + + + + + + + + + AF-MOSAiC-1_125 + + + + + + + + + + + + + + AF-MOSAiC-1_126 + + + + + + + + + + + + + + AF-MOSAiC-1_127 + + + + + + + + + + + + + + AF-MOSAiC-1_128 + + + + + + + + + + + + + + AF-MOSAiC-1_129 + + + + + + + + + + + + + + AF-MOSAiC-1_130 + + + + + + + + + + + + + + AF-MOSAiC-1_131 + + + + + + + + + + + + + + AF-MOSAiC-1_132 + + + + + + + + + + + + + + AF-MOSAiC-1_133 + + + + + + + + + + + + + + AF-MOSAiC-1_134 + + + + + + + + + + + + + + AF-MOSAiC-1_135 + + + + + + + + + + + + + + AF-MOSAiC-1_136 + + + + + + + + + + + + + + AF-MOSAiC-1_137 + + + + + + + + + + + + + + AF-MOSAiC-1_138 + + + + + + + + + + + + + + AF-MOSAiC-1_139 + + + + + + + + + + + + + + AF-MOSAiC-1_140 + + + + + + + + + + + + + + AF-MOSAiC-1_141 + + + + + + + + + + + + + + AF-MOSAiC-1_142 + + + + + + + + + + + + + + AF-MOSAiC-1_143 + + + + + + + + + + + + + + AF-MOSAiC-1_144 + + + + + + + + + + + + + + AF-MOSAiC-1_145 + + + + + + + + + + + + + + AF-MOSAiC-1_146 + + + + + + + + + + + + + + AF-MOSAiC-1_147 + + + + + + + + + + + + + + AF-MOSAiC-1_148 + + + + + + + + + + + + + + AF-MOSAiC-1_149 + + + + + + + + + + + + + + AF-MOSAiC-1_150 + + + + + + + + + + + + + + AF-MOSAiC-1_151 + + + + + + + + + + + + + + AF-MOSAiC-1_152 + + + + + + + + + + + + + + AF-MOSAiC-1_153 + + + + + + + + + + + + + + AF-MOSAiC-1_154 + + + + + + + + + + + + + + AF-MOSAiC-1_155 + + + + + + + + + + + + + + AF-MOSAiC-1_156 + + + + + + + + + + + + + + AF-MOSAiC-1_157 + + + + + + + + + + + + + + AF-MOSAiC-1_158 + + + + + + + + + + + + + + AF-MOSAiC-1_159 + + + + + + + + + + + + + + AF-MOSAiC-1_160 + + + + + + + + + + + + + + AF-MOSAiC-1_161 + + + + + + + + + + + + + + AF-MOSAiC-1_162 + + + + + + + + + + + + + + AF-MOSAiC-1_163 + + + + + + + + + + + + + + AF-MOSAiC-1_164 + + + + + + + + + + + + + + AF-MOSAiC-1_165 + + + + + + + + + + + + + + AF-MOSAiC-1_166 + + + + + + + + + + + + + + AF-MOSAiC-1_167 + + + + + + + + + + + + + + AF-MOSAiC-1_168 + + + + + + + + + + + + + + AF-MOSAiC-1_169 + + + + + + + + + + + + + + AF-MOSAiC-1_170 + + + + + + + + + + + + + + AF-MOSAiC-1_171 + + + + + + + + + + + + + + AF-MOSAiC-1_172 + + + + + + + + + + + + + + AF-MOSAiC-1_173 + + + + + + + + + + + + + + AF-MOSAiC-1_174 + + + + + + + + + + + + + + AF-MOSAiC-1_175 + + + + + + + + + + + + + + AF-MOSAiC-1_176 + + + + + + + + + + + + + + AF-MOSAiC-1_177 + + + + + + + + + + + + + + AF-MOSAiC-1_178 + + + + + + + + + + + + + + AF-MOSAiC-1_179 + + + + + + + + + + + + + + AF-MOSAiC-1_180 + + + + + + + + + + + + + + AF-MOSAiC-1_181 + + + + + + + + + + + + + + AF-MOSAiC-1_182 + + + + + + + + + + + + + + AF-MOSAiC-1_183 + + + + + + + + + + + + + + AF-MOSAiC-1_2 + + + + + + + + + + + + + + AF-MOSAiC-1_22 + + + + + + + + + + + + + + AF-MOSAiC-1_23 + + + + + + + + + + + + + + AF-MOSAiC-1_24 + + + + + + + + + + + + + + AF-MOSAiC-1_25 + + + + + + + + + + + + + + AF-MOSAiC-1_26 + + + + + + + + + + + + + + AF-MOSAiC-1_27 + + + + + + + + + + + + + + AF-MOSAiC-1_28 + + + + + + + + + + + + + + AF-MOSAiC-1_29 + + + + + + + + + + + + + + AF-MOSAiC-1_3 + + + + + + + + + + + + + + AF-MOSAiC-1_30 + + + + + + + + + + + + + + AF-MOSAiC-1_31 + + + + + + + + + + + + + + AF-MOSAiC-1_32 + + + + + + + + + + + + + + AF-MOSAiC-1_33 + + + + + + + + + + + + + + AF-MOSAiC-1_34 + + + + + + + + + + + + + + AF-MOSAiC-1_35 + + + + + + + + + + + + + + AF-MOSAiC-1_36 + + + + + + + + + + + + + + AF-MOSAiC-1_37 + + + + + + + + + + + + + + AF-MOSAiC-1_38 + + + + + + + + + + + + + + AF-MOSAiC-1_39 + + + + + + + + + + + + + + AF-MOSAiC-1_4 + + + + + + + + + + + + + + AF-MOSAiC-1_40 + + + + + + + + + + + + + + AF-MOSAiC-1_41 + + + + + + + + + + + + + + AF-MOSAiC-1_42 + + + + + + + + + + + + + + AF-MOSAiC-1_43 + + + + + + + + + + + + + + AF-MOSAiC-1_44 + + + + + + + + + + + + + + AF-MOSAiC-1_45 + + + + + + + + + + + + + + AF-MOSAiC-1_46 + + + + + + + + + + + + + + AF-MOSAiC-1_47 + + + + + + + + + + + + + + AF-MOSAiC-1_48 + + + + + + + + + + + + + + AF-MOSAiC-1_49 + + + + + + + + + + + + + + AF-MOSAiC-1_5 + + + + + + + + + + + + + + AF-MOSAiC-1_50 + + + + + + + + + + + + + + AF-MOSAiC-1_51 + + + + + + + + + + + + + + AF-MOSAiC-1_52 + + + + + + + + + + + + + + AF-MOSAiC-1_53 + + + + + + + + + + + + + + AF-MOSAiC-1_54 + + + + + + + + + + + + + + AF-MOSAiC-1_55 + + + + + + + + + + + + + + AF-MOSAiC-1_56 + + + + + + + + + + + + + + AF-MOSAiC-1_57 + + + + + + + + + + + + + + AF-MOSAiC-1_58 + + + + + + + + + + + + + + AF-MOSAiC-1_59 + + + + + + + + + + + + + + AF-MOSAiC-1_6 + + + + + + + + + + + + + + AF-MOSAiC-1_60 + + + + + + + + + + + + + + AF-MOSAiC-1_61 + + + + + + + + + + + + + + AF-MOSAiC-1_70 + + + + + + + + + + + + + + AF-MOSAiC-1_71 + + + + + + + + + + + + + + AF-MOSAiC-1_72 + + + + + + + + + + + + + + AF-MOSAiC-1_73 + + + + + + + + + + + + + + AF-MOSAiC-1_74 + + + + + + + + + + + + + + AF-MOSAiC-1_75 + + + + + + + + + + + + + + AF-MOSAiC-1_76 + + + + + + + + + + + + + + AF-MOSAiC-1_77 + + + + + + + + + + + + + + AF-MOSAiC-1_78 + + + + + + + + + + + + + + AF-MOSAiC-1_79 + + + + + + + + + + + + + + AF-MOSAiC-1_8 + + + + + + + + + + + + + + AF-MOSAiC-1_80 + + + + + + + + + + + + + + AF-MOSAiC-1_81 + + + + + + + + + + + + + + AF-MOSAiC-1_82 + + + + + + + + + + + + + + AF-MOSAiC-1_83 + + + + + + + + + + + + + + AF-MOSAiC-1_84 + + + + + + + + + + + + + + AF-MOSAiC-1_85 + + + + + + + + + + + + + + AF-MOSAiC-1_86 + + + + + + + + + + + + + + AF-MOSAiC-1_87 + + + + + + + + + + + + + + AF-MOSAiC-1_88 + + + + + + + + + + + + + + AF-MOSAiC-1_89 + + + + + + + + + + + + + + AF-MOSAiC-1_9 + + + + + + + + + + + + + + AF-MOSAiC-1_90 + + + + + + + + + + + + + + AF-MOSAiC-1_91 + + + + + + + + + + + + + + AF-MOSAiC-1_92 + + + + + + + + + + + + + + AF-MOSAiC-1_93 + + + + + + + + + + + + + + AF-MOSAiC-1_94 + + + + + + + + + + + + + + AF-MOSAiC-1_95 + + + + + + + + + + + + + + AF-MOSAiC-1_96 + + + + + + + + + + + + + + AF-MOSAiC-1_97 + + + + + + + + + + + + + + AF-MOSAiC-1_98 + + + + + + + + + + + + + + AF-MOSAiC-1_99 + + + + + + + + + + + + + + AT-MOSAiC-1_1 + + + + + + + + + + + + + + AT-MOSAiC-1_2 + + + + + + + + + + + + + + AT-MOSAiC-1_3 + + + + + + + + + + + + + + AT-MOSAiC-1_4 + + + + + + + + + + + + + + AT-MOSAiC-1_5 + + + + + + + + + + + + + + AT-MOSAiC-1_6 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2008050101 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2008310201 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2009020301 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2009070401 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2009080501 + + + + + + + + + + + + + + + 6807 + https://hdl.handle.net/10013/sensor.4facb6dc-3b8b-4d4b-bc9f-6812e9e95886 + P6_222_IceBird_MOSAiC_2020_2009100601 + + + + + + + + + + + + + + PS122/1_0_Underway-1 + + + + + + + + + + + + + + PS122/1_0_Underway-10 + + + + + + + + + + + + + + PS122/1_0_Underway-11 + + + + + + + + + + + + + + PS122/1_0_Underway-12 + + + + + + + + + + + + + + PS122/1_0_Underway-3 + + + + + + + + + + + + + + PS122/1_0_Underway-4 + + + + + + + + + + + + + + PS122/1_0_Underway-5 + + + + + + + + + + + + + + PS122/1_0_Underway-6 + + + + + + + + + + + + + + PS122/1_0_Underway-7 + + + + + + + + + + + + + + PS122/1_0_Underway-8 + + + + + + + + + + + + + + PS122/1_0_Underway-9 + + + + + + + + + + + + + + PS122/1_1-100 + + + + + + + + + + + + + + PS122/1_1-101 + + + + + + + + + + + + + + PS122/1_1-102 + + + + + + + + + + + + + + PS122/1_1-103 + + + + + + + + + + + + + + PS122/1_1-104 + + + + + + + + + + + + + + PS122/1_1-105 + + + + + + + + + + + + + + PS122/1_1-106 + + + + + + + + + + + + + + PS122/1_1-107 + + + + + + + + + + + + + + PS122/1_1-108 + + + + + + + + + + + + + + PS122/1_1-109 + + + + + + + + + + + + + + PS122/1_1-110 + + + + + + + + + + + + + + PS122/1_1-111 + + + + + + + + + + + + + + PS122/1_1-112 + + + + + + + + + + + + + + PS122/1_1-113 + + + + + + + + + + + + + + PS122/1_1-114 + + + + + + + + + + + + + + PS122/1_1-115 + + + + + + + + + + + + + + PS122/1_1-116 + + + + + + + + + + + + + + PS122/1_1-117 + + + + + + + + + + + + + + PS122/1_1-118 + + + + + + + + + + + + + + PS122/1_1-119 + + + + + + + + + + + + + + PS122/1_1-120 + + + + + + + + + + + + + + PS122/1_1-121 + + + + + + + + + + + + + + PS122/1_1-122 + + + + + + + + + + + + + + PS122/1_1-123 + + + + + + + + + + + + + + PS122/1_1-124 + + + + + + + + + + + + + + PS122/1_1-125 + + + + + + + + + + + + + + PS122/1_1-130 + + + + + + + + + + + + + + PS122/1_1-131 + + + + + + + + + + + + + + PS122/1_1-132 + + + + + + + + + + + + + + PS122/1_1-133 + + + + + + + + + + + + + + PS122/1_1-134 + + + + + + + + + + + + + + PS122/1_1-135 + + + + + + + + + + + + + + PS122/1_1-136 + + + + + + + + + + + + + + PS122/1_1-19 + + + + + + + + + + + + + + PS122/1_1-20 + + + + + + + + + + + + + + PS122/1_1-21 + + + + + + + + + + + + + + PS122/1_1-220 + + + + + + + + + + + + + + PS122/1_1-221 + + + + + + + + + + + + + + PS122/1_1-222 + + + + + + + + + + + + + + PS122/1_1-223 + + + + + + + + + + + + + + PS122/1_1-228 + + + + + + + + + + + + + + PS122/1_1-231 + + + + + + + + + + + + + + PS122/1_1-232 + + + + + + + + + + + + + + PS122/1_1-233 + + + + + + + + + + + + + + PS122/1_1-234 + + + + + + + + + + + + + + PS122/1_1-235 + + + + + + + + + + + + + + PS122/1_1-236 + + + + + + + + + + + + + + PS122/1_1-237 + + + + + + + + + + + + + + PS122/1_1-238 + + + + + + + + + + + + + + PS122/1_1-239 + + + + + + + + + + + + + + PS122/1_1-243 + + + + + + + + + + + + + + PS122/1_1-244 + + + + + + + + + + + + + + PS122/1_1-245 + + + + + + + + + + + + + + PS122/1_1-246 + + + + + + + + + + + + + + PS122/1_1-247 + + + + + + + + + + + + + + PS122/1_1-248 + + + + + + + + + + + + + + PS122/1_1-249 + + + + + + + + + + + + + + PS122/1_1-250 + + + + + + + + + + + + + + PS122/1_1-251 + + + + + + + + + + + + + + PS122/1_1-252 + + + + + + + + + + + + + + PS122/1_1-253 + + + + + + + + + + + + + + PS122/1_1-254 + + + + + + + + + + + + + + PS122/1_1-255 + + + + + + + + + + + + + + PS122/1_1-256 + + + + + + + + + + + + + + PS122/1_1-257 + + + + + + + + + + + + + + PS122/1_1-258 + + + + + + + + + + + + + + PS122/1_1-259 + + + + + + + + + + + + + + PS122/1_1-26 + + + + + + + + + + + + + + PS122/1_1-260 + + + + + + + + + + + + + + PS122/1_1-264 + + + + + + + + + + + + + + PS122/1_1-265 + + + + + + + + + + + + + + PS122/1_1-266 + + + + + + + + + + + + + + PS122/1_1-267 + + + + + + + + + + + + + + PS122/1_1-268 + + + + + + + + + + + + + + PS122/1_1-269 + + + + + + + + + + + + + + PS122/1_1-27 + + + + + + + + + + + + + + PS122/1_1-270 + + + + + + + + + + + + + + PS122/1_1-271 + + + + + + + + + + + + + + PS122/1_1-272 + + + + + + + + + + + + + + PS122/1_1-273 + + + + + + + + + + + + + + PS122/1_1-274 + + + + + + + + + + + + + + PS122/1_1-28 + + + + + + + + + + + + + + PS122/1_1-280 + + + + + + + + + + + + + + PS122/1_1-281 + + + + + + + + + + + + + + PS122/1_1-282 + + + + + + + + + + + + + + PS122/1_1-283 + + + + + + + + + + + + + + PS122/1_1-284 + + + + + + + + + + + + + + PS122/1_1-289 + + + + + + + + + + + + + + PS122/1_1-29 + + + + + + + + + + + + + + PS122/1_1-290 + + + + + + + + + + + + + + PS122/1_1-291 + + + + + + + + + + + + + + PS122/1_1-292 + + + + + + + + + + + + + + PS122/1_1-293 + + + + + + + + + + + + + + PS122/1_1-294 + + + + + + + + + + + + + + PS122/1_1-296 + + + + + + + + + + + + + + PS122/1_1-297 + + + + + + + + + + + + + + PS122/1_1-298 + + + + + + + + + + + + + + PS122/1_1-299 + + + + + + + + + + + + + + PS122/1_1-3 + + + + + + + + + + + + + + PS122/1_1-30 + + + + + + + + + + + + + + PS122/1_1-300 + + + + + + + + + + + + + + PS122/1_1-301 + + + + + + + + + + + + + + PS122/1_1-302 + + + + + + + + + + + + + + PS122/1_1-303 + + + + + + + + + + + + + + PS122/1_1-305 + + + + + + + + + + + + + + PS122/1_1-306 + + + + + + + + + + + + + + PS122/1_1-307 + + + + + + + + + + + + + + PS122/1_1-308 + + + + + + + + + + + + + + PS122/1_1-309 + + + + + + + + + + + + + + PS122/1_1-31 + + + + + + + + + + + + + + PS122/1_1-310 + + + + + + + + + + + + + + PS122/1_1-311 + + + + + + + + + + + + + + PS122/1_1-312 + + + + + + + + + + + + + + PS122/1_1-315 + + + + + + + + + + + + + + PS122/1_1-316 + + + + + + + + + + + + + + PS122/1_1-317 + + + + + + + + + + + + + + PS122/1_1-318 + + + + + + + + + + + + + + PS122/1_1-319 + + + + + + + + + + + + + + PS122/1_1-32 + + + + + + + + + + + + + + PS122/1_1-320 + + + + + + + + + + + + + + PS122/1_1-321 + + + + + + + + + + + + + + PS122/1_1-322 + + + + + + + + + + + + + + PS122/1_1-323 + + + + + + + + + + + + + + PS122/1_1-324 + + + + + + + + + + + + + + PS122/1_1-325 + + + + + + + + + + + + + + PS122/1_1-326 + + + + + + + + + + + + + + PS122/1_1-327 + + + + + + + + + + + + + + PS122/1_1-328 + + + + + + + + + + + + + + PS122/1_1-329 + + + + + + + + + + + + + + PS122/1_1-33 + + + + + + + + + + + + + + PS122/1_1-330 + + + + + + + + + + + + + + PS122/1_1-331 + + + + + + + + + + + + + + PS122/1_1-332 + + + + + + + + + + + + + + PS122/1_1-333 + + + + + + + + + + + + + + PS122/1_1-334 + + + + + + + + + + + + + + PS122/1_1-335 + + + + + + + + + + + + + + PS122/1_1-336 + + + + + + + + + + + + + + PS122/1_1-337 + + + + + + + + + + + + + + PS122/1_1-338 + + + + + + + + + + + + + + PS122/1_1-339 + + + + + + + + + + + + + + PS122/1_1-34 + + + + + + + + + + + + + + PS122/1_1-340 + + + + + + + + + + + + + + PS122/1_1-341 + + + + + + + + + + + + + + PS122/1_1-342 + + + + + + + + + + + + + + PS122/1_1-343 + + + + + + + + + + + + + + PS122/1_1-344 + + + + + + + + + + + + + + PS122/1_1-345 + + + + + + + + + + + + + + PS122/1_1-347 + + + + + + + + + + + + + + PS122/1_1-348 + + + + + + + + + + + + + + PS122/1_1-349 + + + + + + + + + + + + + + PS122/1_1-35 + + + + + + + + + + + + + + PS122/1_1-36 + + + + + + + + + + + + + + PS122/1_1-37 + + + + + + + + + + + + + + PS122/1_1-38 + + + + + + + + + + + + + + PS122/1_1-39 + + + + + + + + + + + + + + PS122/1_1-4 + + + + + + + + + + + + + + PS122/1_1-40 + + + + + + + + + + + + + + PS122/1_1-41 + + + + + + + + + + + + + + PS122/1_1-42 + + + + + + + + + + + + + + PS122/1_1-44 + + + + + + + + + + + + + + PS122/1_1-45 + + + + + + + + + + + + + + PS122/1_1-46 + + + + + + + + + + + + + + PS122/1_1-47 + + + + + + + + + + + + + + PS122/1_1-48 + + + + + + + + + + + + + + PS122/1_1-49 + + + + + + + + + + + + + + PS122/1_1-5 + + + + + + + + + + + + + + PS122/1_1-50 + + + + + + + + + + + + + + PS122/1_1-51 + + + + + + + + + + + + + + PS122/1_1-52 + + + + + + + + + + + + + + PS122/1_1-53 + + + + + + + + + + + + + + PS122/1_1-54 + + + + + + + + + + + + + + PS122/1_1-55 + + + + + + + + + + + + + + PS122/1_1-56 + + + + + + + + + + + + + + PS122/1_1-57 + + + + + + + + + + + + + + PS122/1_1-59 + + + + + + + + + + + + + + PS122/1_1-60 + + + + + + + + + + + + + + PS122/1_1-61 + + + + + + + + + + + + + + PS122/1_1-62 + + + + + + + + + + + + + + PS122/1_1-63 + + + + + + + + + + + + + + PS122/1_1-64 + + + + + + + + + + + + + + PS122/1_1-66 + + + + + + + + + + + + + + PS122/1_1-67 + + + + + + + + + + + + + + PS122/1_1-68 + + + + + + + + + + + + + + PS122/1_1-69 + + + + + + + + + + + + + + PS122/1_1-70 + + + + + + + + + + + + + + PS122/1_1-72 + + + + + + + + + + + + + + PS122/1_1-73 + + + + + + + + + + + + + + PS122/1_1-74 + + + + + + + + + + + + + + PS122/1_1-75 + + + + + + + + + + + + + + PS122/1_1-76 + + + + + + + + + + + + + + PS122/1_1-77 + + + + + + + + + + + + + + PS122/1_1-78 + + + + + + + + + + + + + + PS122/1_1-79 + + + + + + + + + + + + + + PS122/1_1-80 + + + + + + + + + + + + + + PS122/1_1-81 + + + + + + + + + + + + + + PS122/1_1-82 + + + + + + + + + + + + + + PS122/1_1-83 + + + + + + + + + + + + + + PS122/1_1-84 + + + + + + + + + + + + + + PS122/1_1-85 + + + + + + + + + + + + + + PS122/1_1-86 + + + + + + + + + + + + + + PS122/1_1-87 + + + + + + + + + + + + + + PS122/1_1-88 + + + + + + + + + + + + + + PS122/1_1-89 + + + + + + + + + + + + + + PS122/1_1-90 + + + + + + + + + + + + + + PS122/1_1-91 + + + + + + + + + + + + + + PS122/1_1-92 + + + + + + + + + + + + + + PS122/1_1-93 + + + + + + + + + + + + + + PS122/1_1-94 + + + + + + + + + + + + + + PS122/1_1-95 + + + + + + + + + + + + + + PS122/1_1-97 + + + + + + + + + + + + + + PS122/1_1-98 + + + + + + + + + + + + + + PS122/1_1-99 + + + + + + + + + + + + + + PS122/1_10-10 + + + + + + + + + + + + + + PS122/1_10-100 + + + + + + + + + + + + + + PS122/1_10-101 + + + + + + + + + + + + + + PS122/1_10-102 + + + + + + + + + + + + + + PS122/1_10-103 + + + + + + + + + + + + + + PS122/1_10-104 + + + + + + + + + + + + + + PS122/1_10-105 + + + + + + + + + + + + + + PS122/1_10-106 + + + + + + + + + + + + + + PS122/1_10-107 + + + + + + + + + + + + + + PS122/1_10-108 + + + + + + + + + + + + + + PS122/1_10-109 + + + + + + + + + + + + + + PS122/1_10-11 + + + + + + + + + + + + + + PS122/1_10-110 + + + + + + + + + + + + + + PS122/1_10-111 + + + + + + + + + + + + + + PS122/1_10-112 + + + + + + + + + + + + + + PS122/1_10-113 + + + + + + + + + + + + + + PS122/1_10-114 + + + + + + + + + + + + + + PS122/1_10-115 + + + + + + + + + + + + + + PS122/1_10-116 + + + + + + + + + + + + + + PS122/1_10-117 + + + + + + + + + + + + + + PS122/1_10-118 + + + + + + + + + + + + + + PS122/1_10-119 + + + + + + + + + + + + + + PS122/1_10-12 + + + + + + + + + + + + + + PS122/1_10-120 + + + + + + + + + + + + + + PS122/1_10-121 + + + + + + + + + + + + + + PS122/1_10-122 + + + + + + + + + + + + + + PS122/1_10-124 + + + + + + + + + + + + + + PS122/1_10-125 + + + + + + + + + + + + + + PS122/1_10-126 + + + + + + + + + + + + + + PS122/1_10-128 + + + + + + + + + + + + + + PS122/1_10-129 + + + + + + + + + + + + + + PS122/1_10-130 + + + + + + + + + + + + + + PS122/1_10-131 + + + + + + + + + + + + + + PS122/1_10-132 + + + + + + + + + + + + + + PS122/1_10-133 + + + + + + + + + + + + + + PS122/1_10-134 + + + + + + + + + + + + + + PS122/1_10-135 + + + + + + + + + + + + + + PS122/1_10-136 + + + + + + + + + + + + + + PS122/1_10-137 + + + + + + + + + + + + + + PS122/1_10-138 + + + + + + + + + + + + + + PS122/1_10-14 + + + + + + + + + + + + + + PS122/1_10-15 + + + + + + + + + + + + + + PS122/1_10-16 + + + + + + + + + + + + + + PS122/1_10-17 + + + + + + + + + + + + + + PS122/1_10-18 + + + + + + + + + + + + + + PS122/1_10-19 + + + + + + + + + + + + + + PS122/1_10-2 + + + + + + + + + + + + + + PS122/1_10-20 + + + + + + + + + + + + + + PS122/1_10-21 + + + + + + + + + + + + + + PS122/1_10-22 + + + + + + + + + + + + + + PS122/1_10-23 + + + + + + + + + + + + + + PS122/1_10-24 + + + + + + + + + + + + + + PS122/1_10-25 + + + + + + + + + + + + + + PS122/1_10-26 + + + + + + + + + + + + + + PS122/1_10-27 + + + + + + + + + + + + + + PS122/1_10-28 + + + + + + + + + + + + + + PS122/1_10-29 + + + + + + + + + + + + + + PS122/1_10-3 + + + + + + + + + + + + + + PS122/1_10-30 + + + + + + + + + + + + + + PS122/1_10-31 + + + + + + + + + + + + + + PS122/1_10-32 + + + + + + + + + + + + + + PS122/1_10-33 + + + + + + + + + + + + + + PS122/1_10-34 + + + + + + + + + + + + + + PS122/1_10-35 + + + + + + + + + + + + + + PS122/1_10-36 + + + + + + + + + + + + + + PS122/1_10-37 + + + + + + + + + + + + + + PS122/1_10-38 + + + + + + + + + + + + + + PS122/1_10-39 + + + + + + + + + + + + + + PS122/1_10-4 + + + + + + + + + + + + + + PS122/1_10-40 + + + + + + + + + + + + + + PS122/1_10-41 + + + + + + + + + + + + + + PS122/1_10-42 + + + + + + + + + + + + + + PS122/1_10-43 + + + + + + + + + + + + + + PS122/1_10-44 + + + + + + + + + + + + + + PS122/1_10-45 + + + + + + + + + + + + + + PS122/1_10-46 + + + + + + + + + + + + + + PS122/1_10-47 + + + + + + + + + + + + + + PS122/1_10-48 + + + + + + + + + + + + + + PS122/1_10-49 + + + + + + + + + + + + + + PS122/1_10-5 + + + + + + + + + + + + + + PS122/1_10-50 + + + + + + + + + + + + + + PS122/1_10-51 + + + + + + + + + + + + + + PS122/1_10-52 + + + + + + + + + + + + + + PS122/1_10-53 + + + + + + + + + + + + + + PS122/1_10-54 + + + + + + + + + + + + + + PS122/1_10-55 + + + + + + + + + + + + + + PS122/1_10-56 + + + + + + + + + + + + + + PS122/1_10-57 + + + + + + + + + + + + + + PS122/1_10-58 + + + + + + + + + + + + + + PS122/1_10-59 + + + + + + + + + + + + + + PS122/1_10-60 + + + + + + + + + + + + + + PS122/1_10-61 + + + + + + + + + + + + + + PS122/1_10-62 + + + + + + + + + + + + + + PS122/1_10-64 + + + + + + + + + + + + + + PS122/1_10-66 + + + + + + + + + + + + + + PS122/1_10-67 + + + + + + + + + + + + + + PS122/1_10-68 + + + + + + + + + + + + + + PS122/1_10-69 + + + + + + + + + + + + + + PS122/1_10-7 + + + + + + + + + + + + + + PS122/1_10-70 + + + + + + + + + + + + + + PS122/1_10-71 + + + + + + + + + + + + + + PS122/1_10-72 + + + + + + + + + + + + + + PS122/1_10-73 + + + + + + + + + + + + + + PS122/1_10-74 + + + + + + + + + + + + + + PS122/1_10-75 + + + + + + + + + + + + + + PS122/1_10-76 + + + + + + + + + + + + + + PS122/1_10-77 + + + + + + + + + + + + + + PS122/1_10-78 + + + + + + + + + + + + + + PS122/1_10-79 + + + + + + + + + + + + + + PS122/1_10-8 + + + + + + + + + + + + + + PS122/1_10-80 + + + + + + + + + + + + + + PS122/1_10-81 + + + + + + + + + + + + + + PS122/1_10-82 + + + + + + + + + + + + + + PS122/1_10-83 + + + + + + + + + + + + + + PS122/1_10-84 + + + + + + + + + + + + + + PS122/1_10-85 + + + + + + + + + + + + + + PS122/1_10-86 + + + + + + + + + + + + + + PS122/1_10-87 + + + + + + + + + + + + + + PS122/1_10-88 + + + + + + + + + + + + + + PS122/1_10-89 + + + + + + + + + + + + + + PS122/1_10-9 + + + + + + + + + + + + + + PS122/1_10-90 + + + + + + + + + + + + + + PS122/1_10-91 + + + + + + + + + + + + + + PS122/1_10-92 + + + + + + + + + + + + + + PS122/1_10-93 + + + + + + + + + + + + + + PS122/1_10-94 + + + + + + + + + + + + + + PS122/1_10-95 + + + + + + + + + + + + + + PS122/1_10-96 + + + + + + + + + + + + + + PS122/1_10-97 + + + + + + + + + + + + + + PS122/1_10-98 + + + + + + + + + + + + + + PS122/1_10-99 + + + + + + + + + + + + + + PS122/1_11-10 + + + + + + + + + + + + + + PS122/1_11-11 + + + + + + + + + + + + + + PS122/1_11-12 + + + + + + + + + + + + + + PS122/1_11-13 + + + + + + + + + + + + + + PS122/1_11-14 + + + + + + + + + + + + + + PS122/1_11-15 + + + + + + + + + + + + + + PS122/1_11-16 + + + + + + + + + + + + + + PS122/1_11-17 + + + + + + + + + + + + + + PS122/1_11-18 + + + + + + + + + + + + + + PS122/1_11-19 + + + + + + + + + + + + + + PS122/1_11-2 + + + + + + + + + + + + + + PS122/1_11-20 + + + + + + + + + + + + + + PS122/1_11-21 + + + + + + + + + + + + + + PS122/1_11-22 + + + + + + + + + + + + + + PS122/1_11-23 + + + + + + + + + + + + + + PS122/1_11-24 + + + + + + + + + + + + + + PS122/1_11-25 + + + + + + + + + + + + + + PS122/1_11-26 + + + + + + + + + + + + + + PS122/1_11-27 + + + + + + + + + + + + + + PS122/1_11-28 + + + + + + + + + + + + + + PS122/1_11-29 + + + + + + + + + + + + + + PS122/1_11-3 + + + + + + + + + + + + + + PS122/1_11-30 + + + + + + + + + + + + + + PS122/1_11-31 + + + + + + + + + + + + + + PS122/1_11-32 + + + + + + + + + + + + + + PS122/1_11-33 + + + + + + + + + + + + + + PS122/1_11-34 + + + + + + + + + + + + + + PS122/1_11-35 + + + + + + + + + + + + + + PS122/1_11-36 + + + + + + + + + + + + + + PS122/1_11-37 + + + + + + + + + + + + + + PS122/1_11-38 + + + + + + + + + + + + + + PS122/1_11-39 + + + + + + + + + + + + + + PS122/1_11-4 + + + + + + + + + + + + + + PS122/1_11-40 + + + + + + + + + + + + + + PS122/1_11-41 + + + + + + + + + + + + + + PS122/1_11-42 + + + + + + + + + + + + + + PS122/1_11-43 + + + + + + + + + + + + + + PS122/1_11-44 + + + + + + + + + + + + + + PS122/1_11-45 + + + + + + + + + + + + + + PS122/1_11-46 + + + + + + + + + + + + + + PS122/1_11-47 + + + + + + + + + + + + + + PS122/1_11-48 + + + + + + + + + + + + + + PS122/1_11-5 + + + + + + + + + + + + + + PS122/1_11-6 + + + + + + + + + + + + + + PS122/1_11-7 + + + + + + + + + + + + + + PS122/1_11-8 + + + + + + + + + + + + + + PS122/1_11-9 + + + + + + + + + + + + + + PS122/1_2-1 + + + + + + + + + + + + + + PS122/1_2-10 + + + + + + + + + + + + + + PS122/1_2-100 + + + + + + + + + + + + + + PS122/1_2-101 + + + + + + + + + + + + + + PS122/1_2-102 + + + + + + + + + + + + + + PS122/1_2-103 + + + + + + + + + + + + + + PS122/1_2-104 + + + + + + + + + + + + + + PS122/1_2-105 + + + + + + + + + + + + + + PS122/1_2-106 + + + + + + + + + + + + + + PS122/1_2-107 + + + + + + + + + + + + + + PS122/1_2-108 + + + + + + + + + + + + + + PS122/1_2-109 + + + + + + + + + + + + + + PS122/1_2-11 + + + + + + + + + + + + + + PS122/1_2-110 + + + + + + + + + + + + + + PS122/1_2-111 + + + + + + + + + + + + + + PS122/1_2-112 + + + + + + + + + + + + + + PS122/1_2-113 + + + + + + + + + + + + + + PS122/1_2-115 + + + + + + + + + + + + + + PS122/1_2-116 + + + + + + + + + + + + + + PS122/1_2-117 + + + + + + + + + + + + + + PS122/1_2-118 + + + + + + + + + + + + + + PS122/1_2-119 + + + + + + + + + + + + + + PS122/1_2-12 + + + + + + + + + + + + + + PS122/1_2-120 + + + + + + + + + + + + + + PS122/1_2-121 + + + + + + + + + + + + + + PS122/1_2-122 + + + + + + + + + + + + + + PS122/1_2-123 + + + + + + + + + + + + + + PS122/1_2-127 + + + + + + + + + + + + + + PS122/1_2-13 + + + + + + + + + + + + + + PS122/1_2-131 + + + + + + + + + + + + + + PS122/1_2-132 + + + + + + + + + + + + + + PS122/1_2-133 + + + + + + + + + + + + + + PS122/1_2-134 + + + + + + + + + + + + + + PS122/1_2-135 + + + + + + + + + + + + + + PS122/1_2-136 + + + + + + + + + + + + + + PS122/1_2-137 + + + + + + + + + + + + + + PS122/1_2-138 + + + + + + + + + + + + + + PS122/1_2-139 + + + + + + + + + + + + + + PS122/1_2-140 + + + + + + + + + + + + + + PS122/1_2-141 + + + + + + + + + + + + + + PS122/1_2-142 + + + + + + + + + + + + + + PS122/1_2-143 + + + + + + + + + + + + + + PS122/1_2-144 + + + + + + + + + + + + + + PS122/1_2-145 + + + + + + + + + + + + + + PS122/1_2-146 + + + + + + + + + + + + + + PS122/1_2-147 + + + + + + + + + + + + + + PS122/1_2-148 + + + + + + + + + + + + + + PS122/1_2-149 + + + + + + + + + + + + + + PS122/1_2-150 + + + + + + + + + + + + + + PS122/1_2-151 + + + + + + + + + + + + + + PS122/1_2-152 + + + + + + + + + + + + + + PS122/1_2-153 + + + + + + + + + + + + + + PS122/1_2-154 + + + + + + + + + + + + + + PS122/1_2-155 + + + + + + + + + + + + + + PS122/1_2-157 + + + + + + + + + + + + + + PS122/1_2-16 + + + + + + + + + + + + + + PS122/1_2-160 + + + + + + + + + + + + + + PS122/1_2-161 + + + + + + + + + + + + + + PS122/1_2-162 + + + + + + + + + + + + + + PS122/1_2-163 + + + + + + + + + + + + + + PS122/1_2-164 + + + + + + + + + + + + + + PS122/1_2-166 + + + + + + + + + + + + + + PS122/1_2-167 + + + + + + + + + + + + + + PS122/1_2-17 + + + + + + + + + + + + + + PS122/1_2-171 + + + + + + + + + + + + + + PS122/1_2-172 + + + + + + + + + + + + + + PS122/1_2-173 + + + + + + + + + + + + + + PS122/1_2-174 + + + + + + + + + + + + + + PS122/1_2-175 + + + + + + + + + + + + + + PS122/1_2-179 + + + + + + + + + + + + + + PS122/1_2-180 + + + + + + + + + + + + + + PS122/1_2-181 + + + + + + + + + + + + + + PS122/1_2-182 + + + + + + + + + + + + + + PS122/1_2-183 + + + + + + + + + + + + + + PS122/1_2-184 + + + + + + + + + + + + + + PS122/1_2-185 + + + + + + + + + + + + + + PS122/1_2-186 + + + + + + + + + + + + + + PS122/1_2-187 + + + + + + + + + + + + + + PS122/1_2-188 + + + + + + + + + + + + + + PS122/1_2-189 + + + + + + + + + + + + + + PS122/1_2-190 + + + + + + + + + + + + + + PS122/1_2-191 + + + + + + + + + + + + + + PS122/1_2-192 + + + + + + + + + + + + + + PS122/1_2-193 + + + + + + + + + + + + + + PS122/1_2-194 + + + + + + + + + + + + + + PS122/1_2-195 + + + + + + + + + + + + + + PS122/1_2-198 + + + + + + + + + + + + + + PS122/1_2-20 + + + + + + + + + + + + + + PS122/1_2-200 + + + + + + + + + + + + + + PS122/1_2-203 + + + + + + + + + + + + + + PS122/1_2-204 + + + + + + + + + + + + + + PS122/1_2-205 + + + + + + + + + + + + + + PS122/1_2-21 + + + + + + + + + + + + + + PS122/1_2-22 + + + + + + + + + + + + + + PS122/1_2-23 + + + + + + + + + + + + + + PS122/1_2-24 + + + + + + + + + + + + + + PS122/1_2-27 + + + + + + + + + + + + + + PS122/1_2-28 + + + + + + + + + + + + + + PS122/1_2-29 + + + + + + + + + + + + + + PS122/1_2-30 + + + + + + + + + + + + + + PS122/1_2-31 + + + + + + + + + + + + + + PS122/1_2-32 + + + + + + + + + + + + + + PS122/1_2-33 + + + + + + + + + + + + + + PS122/1_2-34 + + + + + + + + + + + + + + PS122/1_2-36 + + + + + + + + + + + + + + PS122/1_2-37 + + + + + + + + + + + + + + PS122/1_2-38 + + + + + + + + + + + + + + PS122/1_2-39 + + + + + + + + + + + + + + PS122/1_2-4 + + + + + + + + + + + + + + PS122/1_2-41 + + + + + + + + + + + + + + PS122/1_2-42 + + + + + + + + + + + + + + PS122/1_2-43 + + + + + + + + + + + + + + PS122/1_2-44 + + + + + + + + + + + + + + PS122/1_2-45 + + + + + + + + + + + + + + PS122/1_2-46 + + + + + + + + + + + + + + PS122/1_2-47 + + + + + + + + + + + + + + PS122/1_2-49 + + + + + + + + + + + + + + PS122/1_2-5 + + + + + + + + + + + + + + PS122/1_2-50 + + + + + + + + + + + + + + PS122/1_2-51 + + + + + + + + + + + + + + PS122/1_2-52 + + + + + + + + + + + + + + PS122/1_2-53 + + + + + + + + + + + + + + PS122/1_2-54 + + + + + + + + + + + + + + PS122/1_2-55 + + + + + + + + + + + + + + PS122/1_2-56 + + + + + + + + + + + + + + PS122/1_2-57 + + + + + + + + + + + + + + PS122/1_2-59 + + + + + + + + + + + + + + PS122/1_2-6 + + + + + + + + + + + + + + PS122/1_2-60 + + + + + + + + + + + + + + PS122/1_2-61 + + + + + + + + + + + + + + PS122/1_2-62 + + + + + + + + + + + + + + PS122/1_2-63 + + + + + + + + + + + + + + PS122/1_2-64 + + + + + + + + + + + + + + PS122/1_2-65 + + + + + + + + + + + + + + PS122/1_2-66 + + + + + + + + + + + + + + PS122/1_2-67 + + + + + + + + + + + + + + PS122/1_2-68 + + + + + + + + + + + + + + PS122/1_2-69 + + + + + + + + + + + + + + PS122/1_2-7 + + + + + + + + + + + + + + PS122/1_2-70 + + + + + + + + + + + + + + PS122/1_2-71 + + + + + + + + + + + + + + PS122/1_2-72 + + + + + + + + + + + + + + PS122/1_2-73 + + + + + + + + + + + + + + PS122/1_2-74 + + + + + + + + + + + + + + PS122/1_2-75 + + + + + + + + + + + + + + PS122/1_2-76 + + + + + + + + + + + + + + PS122/1_2-77 + + + + + + + + + + + + + + PS122/1_2-78 + + + + + + + + + + + + + + PS122/1_2-79 + + + + + + + + + + + + + + PS122/1_2-80 + + + + + + + + + + + + + + PS122/1_2-81 + + + + + + + + + + + + + + PS122/1_2-82 + + + + + + + + + + + + + + PS122/1_2-83 + + + + + + + + + + + + + + PS122/1_2-85 + + + + + + + + + + + + + + PS122/1_2-86 + + + + + + + + + + + + + + PS122/1_2-87 + + + + + + + + + + + + + + PS122/1_2-88 + + + + + + + + + + + + + + PS122/1_2-9 + + + + + + + + + + + + + + PS122/1_2-91 + + + + + + + + + + + + + + PS122/1_2-92 + + + + + + + + + + + + + + PS122/1_2-93 + + + + + + + + + + + + + + PS122/1_2-94 + + + + + + + + + + + + + + PS122/1_2-95 + + + + + + + + + + + + + + PS122/1_4-1 + + + + + + + + + + + + + + PS122/1_4-10 + + + + + + + + + + + + + + PS122/1_4-11 + + + + + + + + + + + + + + PS122/1_4-12 + + + + + + + + + + + + + + PS122/1_4-19 + + + + + + + + + + + + + + PS122/1_4-2 + + + + + + + + + + + + + + PS122/1_4-20 + + + + + + + + + + + + + + PS122/1_4-21 + + + + + + + + + + + + + + PS122/1_4-22 + + + + + + + + + + + + + + PS122/1_4-23 + + + + + + + + + + + + + + PS122/1_4-24 + + + + + + + + + + + + + + PS122/1_4-28 + + + + + + + + + + + + + + PS122/1_4-29 + + + + + + + + + + + + + + PS122/1_4-3 + + + + + + + + + + + + + + PS122/1_4-30 + + + + + + + + + + + + + + PS122/1_4-31 + + + + + + + + + + + + + + PS122/1_4-32 + + + + + + + + + + + + + + PS122/1_4-33 + + + + + + + + + + + + + + PS122/1_4-34 + + + + + + + + + + + + + + PS122/1_4-35 + + + + + + + + + + + + + + PS122/1_4-36 + + + + + + + + + + + + + + PS122/1_4-37 + + + + + + + + + + + + + + PS122/1_4-38 + + + + + + + + + + + + + + PS122/1_4-4 + + + + + + + + + + + + + + PS122/1_4-41 + + + + + + + + + + + + + + PS122/1_4-42 + + + + + + + + + + + + + + PS122/1_4-43 + + + + + + + + + + + + + + PS122/1_4-44 + + + + + + + + + + + + + + PS122/1_4-46 + + + + + + + + + + + + + + PS122/1_4-47 + + + + + + + + + + + + + + PS122/1_4-48 + + + + + + + + + + + + + + PS122/1_4-49 + + + + + + + + + + + + + + PS122/1_4-5 + + + + + + + + + + + + + + PS122/1_4-50 + + + + + + + + + + + + + + PS122/1_4-51 + + + + + + + + + + + + + + PS122/1_4-52 + + + + + + + + + + + + + + PS122/1_4-6 + + + + + + + + + + + + + + PS122/1_4-7 + + + + + + + + + + + + + + PS122/1_4-8 + + + + + + + + + + + + + + PS122/1_4-9 + + + + + + + + + + + + + + PS122/1_5-10 + + + + + + + + + + + + + + PS122/1_5-100 + + + + + + + + + + + + + + PS122/1_5-101 + + + + + + + + + + + + + + PS122/1_5-103 + + + + + + + + + + + + + + PS122/1_5-11 + + + + + + + + + + + + + + PS122/1_5-12 + + + + + + + + + + + + + + PS122/1_5-13 + + + + + + + + + + + + + + PS122/1_5-19 + + + + + + + + + + + + + + PS122/1_5-2 + + + + + + + + + + + + + + PS122/1_5-20 + + + + + + + + + + + + + + PS122/1_5-21 + + + + + + + + + + + + + + PS122/1_5-22 + + + + + + + + + + + + + + PS122/1_5-23 + + + + + + + + + + + + + + PS122/1_5-24 + + + + + + + + + + + + + + PS122/1_5-25 + + + + + + + + + + + + + + PS122/1_5-26 + + + + + + + + + + + + + + PS122/1_5-27 + + + + + + + + + + + + + + PS122/1_5-28 + + + + + + + + + + + + + + PS122/1_5-29 + + + + + + + + + + + + + + PS122/1_5-3 + + + + + + + + + + + + + + PS122/1_5-31 + + + + + + + + + + + + + + PS122/1_5-32 + + + + + + + + + + + + + + PS122/1_5-33 + + + + + + + + + + + + + + PS122/1_5-34 + + + + + + + + + + + + + + PS122/1_5-35 + + + + + + + + + + + + + + PS122/1_5-36 + + + + + + + + + + + + + + PS122/1_5-37 + + + + + + + + + + + + + + PS122/1_5-38 + + + + + + + + + + + + + + PS122/1_5-39 + + + + + + + + + + + + + + PS122/1_5-4 + + + + + + + + + + + + + + PS122/1_5-40 + + + + + + + + + + + + + + PS122/1_5-41 + + + + + + + + + + + + + + PS122/1_5-42 + + + + + + + + + + + + + + PS122/1_5-43 + + + + + + + + + + + + + + PS122/1_5-44 + + + + + + + + + + + + + + PS122/1_5-45 + + + + + + + + + + + + + + PS122/1_5-46 + + + + + + + + + + + + + + PS122/1_5-47 + + + + + + + + + + + + + + PS122/1_5-49 + + + + + + + + + + + + + + PS122/1_5-5 + + + + + + + + + + + + + + PS122/1_5-50 + + + + + + + + + + + + + + PS122/1_5-51 + + + + + + + + + + + + + + PS122/1_5-52 + + + + + + + + + + + + + + PS122/1_5-53 + + + + + + + + + + + + + + PS122/1_5-54 + + + + + + + + + + + + + + PS122/1_5-55 + + + + + + + + + + + + + + PS122/1_5-56 + + + + + + + + + + + + + + PS122/1_5-57 + + + + + + + + + + + + + + PS122/1_5-58 + + + + + + + + + + + + + + PS122/1_5-59 + + + + + + + + + + + + + + PS122/1_5-6 + + + + + + + + + + + + + + PS122/1_5-61 + + + + + + + + + + + + + + PS122/1_5-62 + + + + + + + + + + + + + + PS122/1_5-63 + + + + + + + + + + + + + + PS122/1_5-64 + + + + + + + + + + + + + + PS122/1_5-66 + + + + + + + + + + + + + + PS122/1_5-67 + + + + + + + + + + + + + + PS122/1_5-68 + + + + + + + + + + + + + + PS122/1_5-69 + + + + + + + + + + + + + + PS122/1_5-7 + + + + + + + + + + + + + + PS122/1_5-70 + + + + + + + + + + + + + + PS122/1_5-71 + + + + + + + + + + + + + + PS122/1_5-72 + + + + + + + + + + + + + + PS122/1_5-73 + + + + + + + + + + + + + + PS122/1_5-74 + + + + + + + + + + + + + + PS122/1_5-75 + + + + + + + + + + + + + + PS122/1_5-76 + + + + + + + + + + + + + + PS122/1_5-77 + + + + + + + + + + + + + + PS122/1_5-78 + + + + + + + + + + + + + + PS122/1_5-79 + + + + + + + + + + + + + + PS122/1_5-8 + + + + + + + + + + + + + + PS122/1_5-80 + + + + + + + + + + + + + + PS122/1_5-81 + + + + + + + + + + + + + + PS122/1_5-85 + + + + + + + + + + + + + + PS122/1_5-86 + + + + + + + + + + + + + + PS122/1_5-87 + + + + + + + + + + + + + + PS122/1_5-9 + + + + + + + + + + + + + + PS122/1_5-90 + + + + + + + + + + + + + + PS122/1_5-91 + + + + + + + + + + + + + + PS122/1_5-92 + + + + + + + + + + + + + + PS122/1_5-93 + + + + + + + + + + + + + + PS122/1_5-94 + + + + + + + + + + + + + + PS122/1_5-95 + + + + + + + + + + + + + + PS122/1_5-98 + + + + + + + + + + + + + + PS122/1_6-1 + + + + + + + + + + + + + + PS122/1_6-10 + + + + + + + + + + + + + + PS122/1_6-104 + + + + + + + + + + + + + + PS122/1_6-105 + + + + + + + + + + + + + + PS122/1_6-106 + + + + + + + + + + + + + + PS122/1_6-107 + + + + + + + + + + + + + + PS122/1_6-108 + + + + + + + + + + + + + + PS122/1_6-109 + + + + + + + + + + + + + + PS122/1_6-11 + + + + + + + + + + + + + + PS122/1_6-110 + + + + + + + + + + + + + + PS122/1_6-111 + + + + + + + + + + + + + + PS122/1_6-112 + + + + + + + + + + + + + + PS122/1_6-113 + + + + + + + + + + + + + + PS122/1_6-114 + + + + + + + + + + + + + + PS122/1_6-115 + + + + + + + + + + + + + + PS122/1_6-116 + + + + + + + + + + + + + + PS122/1_6-117 + + + + + + + + + + + + + + PS122/1_6-118 + + + + + + + + + + + + + + PS122/1_6-12 + + + + + + + + + + + + + + PS122/1_6-122 + + + + + + + + + + + + + + PS122/1_6-123 + + + + + + + + + + + + + + PS122/1_6-124 + + + + + + + + + + + + + + PS122/1_6-125 + + + + + + + + + + + + + + PS122/1_6-126 + + + + + + + + + + + + + + PS122/1_6-127 + + + + + + + + + + + + + + PS122/1_6-128 + + + + + + + + + + + + + + PS122/1_6-129 + + + + + + + + + + + + + + PS122/1_6-13 + + + + + + + + + + + + + + PS122/1_6-130 + + + + + + + + + + + + + + PS122/1_6-132 + + + + + + + + + + + + + + PS122/1_6-133 + + + + + + + + + + + + + + PS122/1_6-134 + + + + + + + + + + + + + + PS122/1_6-135 + + + + + + + + + + + + + + PS122/1_6-136 + + + + + + + + + + + + + + PS122/1_6-137 + + + + + + + + + + + + + + PS122/1_6-138 + + + + + + + + + + + + + + PS122/1_6-139 + + + + + + + + + + + + + + PS122/1_6-14 + + + + + + + + + + + + + + PS122/1_6-140 + + + + + + + + + + + + + + PS122/1_6-141 + + + + + + + + + + + + + + PS122/1_6-142 + + + + + + + + + + + + + + PS122/1_6-143 + + + + + + + + + + + + + + PS122/1_6-145 + + + + + + + + + + + + + + PS122/1_6-146 + + + + + + + + + + + + + + PS122/1_6-147 + + + + + + + + + + + + + + PS122/1_6-148 + + + + + + + + + + + + + + PS122/1_6-149 + + + + + + + + + + + + + + PS122/1_6-15 + + + + + + + + + + + + + + PS122/1_6-16 + + + + + + + + + + + + + + PS122/1_6-17 + + + + + + + + + + + + + + PS122/1_6-18 + + + + + + + + + + + + + + PS122/1_6-2 + + + + + + + + + + + + + + PS122/1_6-22 + + + + + + + + + + + + + + PS122/1_6-23 + + + + + + + + + + + + + + PS122/1_6-24 + + + + + + + + + + + + + + PS122/1_6-25 + + + + + + + + + + + + + + PS122/1_6-26 + + + + + + + + + + + + + + PS122/1_6-27 + + + + + + + + + + + + + + PS122/1_6-28 + + + + + + + + + + + + + + PS122/1_6-29 + + + + + + + + + + + + + + PS122/1_6-3 + + + + + + + + + + + + + + PS122/1_6-30 + + + + + + + + + + + + + + PS122/1_6-31 + + + + + + + + + + + + + + PS122/1_6-32 + + + + + + + + + + + + + + PS122/1_6-33 + + + + + + + + + + + + + + PS122/1_6-34 + + + + + + + + + + + + + + PS122/1_6-35 + + + + + + + + + + + + + + PS122/1_6-36 + + + + + + + + + + + + + + PS122/1_6-37 + + + + + + + + + + + + + + PS122/1_6-38 + + + + + + + + + + + + + + PS122/1_6-4 + + + + + + + + + + + + + + PS122/1_6-41 + + + + + + + + + + + + + + PS122/1_6-42 + + + + + + + + + + + + + + PS122/1_6-43 + + + + + + + + + + + + + + PS122/1_6-44 + + + + + + + + + + + + + + PS122/1_6-45 + + + + + + + + + + + + + + PS122/1_6-46 + + + + + + + + + + + + + + PS122/1_6-47 + + + + + + + + + + + + + + PS122/1_6-48 + + + + + + + + + + + + + + PS122/1_6-49 + + + + + + + + + + + + + + PS122/1_6-5 + + + + + + + + + + + + + + PS122/1_6-50 + + + + + + + + + + + + + + PS122/1_6-51 + + + + + + + + + + + + + + PS122/1_6-52 + + + + + + + + + + + + + + PS122/1_6-53 + + + + + + + + + + + + + + PS122/1_6-54 + + + + + + + + + + + + + + PS122/1_6-55 + + + + + + + + + + + + + + PS122/1_6-56 + + + + + + + + + + + + + + PS122/1_6-57 + + + + + + + + + + + + + + PS122/1_6-58 + + + + + + + + + + + + + + PS122/1_6-59 + + + + + + + + + + + + + + PS122/1_6-6 + + + + + + + + + + + + + + PS122/1_6-60 + + + + + + + + + + + + + + PS122/1_6-61 + + + + + + + + + + + + + + PS122/1_6-62 + + + + + + + + + + + + + + PS122/1_6-64 + + + + + + + + + + + + + + PS122/1_6-65 + + + + + + + + + + + + + + PS122/1_6-66 + + + + + + + + + + + + + + PS122/1_6-67 + + + + + + + + + + + + + + PS122/1_6-68 + + + + + + + + + + + + + + PS122/1_6-69 + + + + + + + + + + + + + + PS122/1_6-70 + + + + + + + + + + + + + + PS122/1_6-71 + + + + + + + + + + + + + + PS122/1_6-72 + + + + + + + + + + + + + + PS122/1_6-73 + + + + + + + + + + + + + + PS122/1_6-74 + + + + + + + + + + + + + + PS122/1_6-75 + + + + + + + + + + + + + + PS122/1_6-78 + + + + + + + + + + + + + + PS122/1_6-79 + + + + + + + + + + + + + + PS122/1_6-80 + + + + + + + + + + + + + + PS122/1_6-81 + + + + + + + + + + + + + + PS122/1_6-82 + + + + + + + + + + + + + + PS122/1_6-83 + + + + + + + + + + + + + + PS122/1_6-84 + + + + + + + + + + + + + + PS122/1_6-85 + + + + + + + + + + + + + + PS122/1_6-86 + + + + + + + + + + + + + + PS122/1_6-87 + + + + + + + + + + + + + + PS122/1_6-88 + + + + + + + + + + + + + + PS122/1_6-89 + + + + + + + + + + + + + + PS122/1_6-90 + + + + + + + + + + + + + + PS122/1_6-91 + + + + + + + + + + + + + + PS122/1_6-92 + + + + + + + + + + + + + + PS122/1_6-94 + + + + + + + + + + + + + + PS122/1_7-1 + + + + + + + + + + + + + + PS122/1_7-10 + + + + + + + + + + + + + + PS122/1_7-100 + + + + + + + + + + + + + + PS122/1_7-101 + + + + + + + + + + + + + + PS122/1_7-102 + + + + + + + + + + + + + + PS122/1_7-103 + + + + + + + + + + + + + + PS122/1_7-105 + + + + + + + + + + + + + + PS122/1_7-106 + + + + + + + + + + + + + + PS122/1_7-107 + + + + + + + + + + + + + + PS122/1_7-108 + + + + + + + + + + + + + + PS122/1_7-109 + + + + + + + + + + + + + + PS122/1_7-11 + + + + + + + + + + + + + + PS122/1_7-110 + + + + + + + + + + + + + + PS122/1_7-111 + + + + + + + + + + + + + + PS122/1_7-112 + + + + + + + + + + + + + + PS122/1_7-113 + + + + + + + + + + + + + + PS122/1_7-114 + + + + + + + + + + + + + + PS122/1_7-115 + + + + + + + + + + + + + + PS122/1_7-116 + + + + + + + + + + + + + + PS122/1_7-117 + + + + + + + + + + + + + + PS122/1_7-118 + + + + + + + + + + + + + + PS122/1_7-119 + + + + + + + + + + + + + + PS122/1_7-12 + + + + + + + + + + + + + + PS122/1_7-129 + + + + + + + + + + + + + + PS122/1_7-13 + + + + + + + + + + + + + + PS122/1_7-130 + + + + + + + + + + + + + + PS122/1_7-131 + + + + + + + + + + + + + + PS122/1_7-132 + + + + + + + + + + + + + + PS122/1_7-133 + + + + + + + + + + + + + + PS122/1_7-135 + + + + + + + + + + + + + + PS122/1_7-136 + + + + + + + + + + + + + + PS122/1_7-137 + + + + + + + + + + + + + + PS122/1_7-138 + + + + + + + + + + + + + + PS122/1_7-139 + + + + + + + + + + + + + + PS122/1_7-14 + + + + + + + + + + + + + + PS122/1_7-140 + + + + + + + + + + + + + + PS122/1_7-15 + + + + + + + + + + + + + + PS122/1_7-16 + + + + + + + + + + + + + + PS122/1_7-18 + + + + + + + + + + + + + + PS122/1_7-19 + + + + + + + + + + + + + + PS122/1_7-21 + + + + + + + + + + + + + + PS122/1_7-24 + + + + + + + + + + + + + + PS122/1_7-25 + + + + + + + + + + + + + + PS122/1_7-26 + + + + + + + + + + + + + + PS122/1_7-27 + + + + + + + + + + + + + + PS122/1_7-28 + + + + + + + + + + + + + + PS122/1_7-29 + + + + + + + + + + + + + + PS122/1_7-30 + + + + + + + + + + + + + + PS122/1_7-31 + + + + + + + + + + + + + + PS122/1_7-32 + + + + + + + + + + + + + + PS122/1_7-33 + + + + + + + + + + + + + + PS122/1_7-34 + + + + + + + + + + + + + + PS122/1_7-35 + + + + + + + + + + + + + + PS122/1_7-36 + + + + + + + + + + + + + + PS122/1_7-37 + + + + + + + + + + + + + + PS122/1_7-38 + + + + + + + + + + + + + + PS122/1_7-39 + + + + + + + + + + + + + + PS122/1_7-40 + + + + + + + + + + + + + + PS122/1_7-41 + + + + + + + + + + + + + + PS122/1_7-42 + + + + + + + + + + + + + + PS122/1_7-43 + + + + + + + + + + + + + + PS122/1_7-44 + + + + + + + + + + + + + + PS122/1_7-45 + + + + + + + + + + + + + + PS122/1_7-46 + + + + + + + + + + + + + + PS122/1_7-47 + + + + + + + + + + + + + + PS122/1_7-48 + + + + + + + + + + + + + + PS122/1_7-49 + + + + + + + + + + + + + + PS122/1_7-5 + + + + + + + + + + + + + + PS122/1_7-50 + + + + + + + + + + + + + + PS122/1_7-51 + + + + + + + + + + + + + + PS122/1_7-52 + + + + + + + + + + + + + + PS122/1_7-53 + + + + + + + + + + + + + + PS122/1_7-54 + + + + + + + + + + + + + + PS122/1_7-55 + + + + + + + + + + + + + + PS122/1_7-56 + + + + + + + + + + + + + + PS122/1_7-57 + + + + + + + + + + + + + + PS122/1_7-58 + + + + + + + + + + + + + + PS122/1_7-59 + + + + + + + + + + + + + + PS122/1_7-6 + + + + + + + + + + + + + + PS122/1_7-60 + + + + + + + + + + + + + + PS122/1_7-61 + + + + + + + + + + + + + + PS122/1_7-62 + + + + + + + + + + + + + + PS122/1_7-63 + + + + + + + + + + + + + + PS122/1_7-64 + + + + + + + + + + + + + + PS122/1_7-65 + + + + + + + + + + + + + + PS122/1_7-66 + + + + + + + + + + + + + + PS122/1_7-67 + + + + + + + + + + + + + + PS122/1_7-68 + + + + + + + + + + + + + + PS122/1_7-69 + + + + + + + + + + + + + + PS122/1_7-7 + + + + + + + + + + + + + + PS122/1_7-70 + + + + + + + + + + + + + + PS122/1_7-71 + + + + + + + + + + + + + + PS122/1_7-72 + + + + + + + + + + + + + + PS122/1_7-73 + + + + + + + + + + + + + + PS122/1_7-74 + + + + + + + + + + + + + + PS122/1_7-75 + + + + + + + + + + + + + + PS122/1_7-76 + + + + + + + + + + + + + + PS122/1_7-77 + + + + + + + + + + + + + + PS122/1_7-78 + + + + + + + + + + + + + + PS122/1_7-79 + + + + + + + + + + + + + + PS122/1_7-8 + + + + + + + + + + + + + + PS122/1_7-80 + + + + + + + + + + + + + + PS122/1_7-81 + + + + + + + + + + + + + + PS122/1_7-82 + + + + + + + + + + + + + + PS122/1_7-83 + + + + + + + + + + + + + + PS122/1_7-84 + + + + + + + + + + + + + + PS122/1_7-85 + + + + + + + + + + + + + + PS122/1_7-86 + + + + + + + + + + + + + + PS122/1_7-87 + + + + + + + + + + + + + + PS122/1_7-88 + + + + + + + + + + + + + + PS122/1_7-89 + + + + + + + + + + + + + + PS122/1_7-9 + + + + + + + + + + + + + + PS122/1_7-90 + + + + + + + + + + + + + + PS122/1_7-91 + + + + + + + + + + + + + + PS122/1_7-92 + + + + + + + + + + + + + + PS122/1_7-93 + + + + + + + + + + + + + + PS122/1_7-94 + + + + + + + + + + + + + + PS122/1_7-95 + + + + + + + + + + + + + + PS122/1_7-96 + + + + + + + + + + + + + + PS122/1_7-97 + + + + + + + + + + + + + + PS122/1_7-98 + + + + + + + + + + + + + + PS122/1_7-99 + + + + + + + + + + + + + + PS122/1_8-1 + + + + + + + + + + + + + + PS122/1_8-10 + + + + + + + + + + + + + + PS122/1_8-100 + + + + + + + + + + + + + + PS122/1_8-101 + + + + + + + + + + + + + + PS122/1_8-102 + + + + + + + + + + + + + + PS122/1_8-103 + + + + + + + + + + + + + + PS122/1_8-104 + + + + + + + + + + + + + + PS122/1_8-107 + + + + + + + + + + + + + + PS122/1_8-108 + + + + + + + + + + + + + + PS122/1_8-109 + + + + + + + + + + + + + + PS122/1_8-11 + + + + + + + + + + + + + + PS122/1_8-110 + + + + + + + + + + + + + + PS122/1_8-111 + + + + + + + + + + + + + + PS122/1_8-112 + + + + + + + + + + + + + + PS122/1_8-113 + + + + + + + + + + + + + + PS122/1_8-115 + + + + + + + + + + + + + + PS122/1_8-116 + + + + + + + + + + + + + + PS122/1_8-117 + + + + + + + + + + + + + + PS122/1_8-118 + + + + + + + + + + + + + + PS122/1_8-119 + + + + + + + + + + + + + + PS122/1_8-12 + + + + + + + + + + + + + + PS122/1_8-120 + + + + + + + + + + + + + + PS122/1_8-121 + + + + + + + + + + + + + + PS122/1_8-122 + + + + + + + + + + + + + + PS122/1_8-123 + + + + + + + + + + + + + + PS122/1_8-124 + + + + + + + + + + + + + + PS122/1_8-125 + + + + + + + + + + + + + + PS122/1_8-126 + + + + + + + + + + + + + + PS122/1_8-127 + + + + + + + + + + + + + + PS122/1_8-128 + + + + + + + + + + + + + + PS122/1_8-129 + + + + + + + + + + + + + + PS122/1_8-13 + + + + + + + + + + + + + + PS122/1_8-130 + + + + + + + + + + + + + + PS122/1_8-131 + + + + + + + + + + + + + + PS122/1_8-132 + + + + + + + + + + + + + + PS122/1_8-14 + + + + + + + + + + + + + + PS122/1_8-15 + + + + + + + + + + + + + + PS122/1_8-16 + + + + + + + + + + + + + + PS122/1_8-17 + + + + + + + + + + + + + + PS122/1_8-18 + + + + + + + + + + + + + + PS122/1_8-2 + + + + + + + + + + + + + + PS122/1_8-21 + + + + + + + + + + + + + + PS122/1_8-22 + + + + + + + + + + + + + + PS122/1_8-23 + + + + + + + + + + + + + + PS122/1_8-24 + + + + + + + + + + + + + + PS122/1_8-25 + + + + + + + + + + + + + + PS122/1_8-26 + + + + + + + + + + + + + + PS122/1_8-27 + + + + + + + + + + + + + + PS122/1_8-28 + + + + + + + + + + + + + + PS122/1_8-29 + + + + + + + + + + + + + + PS122/1_8-3 + + + + + + + + + + + + + + PS122/1_8-30 + + + + + + + + + + + + + + PS122/1_8-31 + + + + + + + + + + + + + + PS122/1_8-32 + + + + + + + + + + + + + + PS122/1_8-33 + + + + + + + + + + + + + + PS122/1_8-34 + + + + + + + + + + + + + + PS122/1_8-35 + + + + + + + + + + + + + + PS122/1_8-36 + + + + + + + + + + + + + + PS122/1_8-37 + + + + + + + + + + + + + + PS122/1_8-38 + + + + + + + + + + + + + + PS122/1_8-39 + + + + + + + + + + + + + + PS122/1_8-4 + + + + + + + + + + + + + + PS122/1_8-40 + + + + + + + + + + + + + + PS122/1_8-41 + + + + + + + + + + + + + + PS122/1_8-42 + + + + + + + + + + + + + + PS122/1_8-43 + + + + + + + + + + + + + + PS122/1_8-44 + + + + + + + + + + + + + + PS122/1_8-45 + + + + + + + + + + + + + + PS122/1_8-46 + + + + + + + + + + + + + + PS122/1_8-47 + + + + + + + + + + + + + + PS122/1_8-48 + + + + + + + + + + + + + + PS122/1_8-49 + + + + + + + + + + + + + + PS122/1_8-5 + + + + + + + + + + + + + + PS122/1_8-50 + + + + + + + + + + + + + + PS122/1_8-51 + + + + + + + + + + + + + + PS122/1_8-52 + + + + + + + + + + + + + + PS122/1_8-53 + + + + + + + + + + + + + + PS122/1_8-54 + + + + + + + + + + + + + + PS122/1_8-55 + + + + + + + + + + + + + + PS122/1_8-56 + + + + + + + + + + + + + + PS122/1_8-57 + + + + + + + + + + + + + + PS122/1_8-58 + + + + + + + + + + + + + + PS122/1_8-59 + + + + + + + + + + + + + + PS122/1_8-6 + + + + + + + + + + + + + + PS122/1_8-60 + + + + + + + + + + + + + + PS122/1_8-61 + + + + + + + + + + + + + + PS122/1_8-62 + + + + + + + + + + + + + + PS122/1_8-63 + + + + + + + + + + + + + + PS122/1_8-64 + + + + + + + + + + + + + + PS122/1_8-65 + + + + + + + + + + + + + + PS122/1_8-66 + + + + + + + + + + + + + + PS122/1_8-67 + + + + + + + + + + + + + + PS122/1_8-68 + + + + + + + + + + + + + + PS122/1_8-69 + + + + + + + + + + + + + + PS122/1_8-70 + + + + + + + + + + + + + + PS122/1_8-71 + + + + + + + + + + + + + + PS122/1_8-72 + + + + + + + + + + + + + + PS122/1_8-73 + + + + + + + + + + + + + + PS122/1_8-74 + + + + + + + + + + + + + + PS122/1_8-75 + + + + + + + + + + + + + + PS122/1_8-76 + + + + + + + + + + + + + + PS122/1_8-77 + + + + + + + + + + + + + + PS122/1_8-78 + + + + + + + + + + + + + + PS122/1_8-79 + + + + + + + + + + + + + + PS122/1_8-80 + + + + + + + + + + + + + + PS122/1_8-81 + + + + + + + + + + + + + + PS122/1_8-82 + + + + + + + + + + + + + + PS122/1_8-83 + + + + + + + + + + + + + + PS122/1_8-84 + + + + + + + + + + + + + + PS122/1_8-85 + + + + + + + + + + + + + + PS122/1_8-86 + + + + + + + + + + + + + + PS122/1_8-87 + + + + + + + + + + + + + + PS122/1_8-88 + + + + + + + + + + + + + + PS122/1_8-89 + + + + + + + + + + + + + + PS122/1_8-90 + + + + + + + + + + + + + + PS122/1_8-91 + + + + + + + + + + + + + + PS122/1_8-92 + + + + + + + + + + + + + + PS122/1_8-93 + + + + + + + + + + + + + + PS122/1_8-94 + + + + + + + + + + + + + + PS122/1_8-95 + + + + + + + + + + + + + + PS122/1_8-96 + + + + + + + + + + + + + + PS122/1_8-97 + + + + + + + + + + + + + + PS122/1_8-98 + + + + + + + + + + + + + + PS122/1_8-99 + + + + + + + + + + + + + + PS122/1_9-10 + + + + + + + + + + + + + + PS122/1_9-100 + + + + + + + + + + + + + + PS122/1_9-101 + + + + + + + + + + + + + + PS122/1_9-102 + + + + + + + + + + + + + + PS122/1_9-103 + + + + + + + + + + + + + + PS122/1_9-104 + + + + + + + + + + + + + + PS122/1_9-105 + + + + + + + + + + + + + + PS122/1_9-106 + + + + + + + + + + + + + + PS122/1_9-107 + + + + + + + + + + + + + + PS122/1_9-108 + + + + + + + + + + + + + + PS122/1_9-109 + + + + + + + + + + + + + + PS122/1_9-11 + + + + + + + + + + + + + + PS122/1_9-110 + + + + + + + + + + + + + + PS122/1_9-111 + + + + + + + + + + + + + + PS122/1_9-112 + + + + + + + + + + + + + + PS122/1_9-113 + + + + + + + + + + + + + + PS122/1_9-115 + + + + + + + + + + + + + + PS122/1_9-116 + + + + + + + + + + + + + + PS122/1_9-117 + + + + + + + + + + + + + + PS122/1_9-118 + + + + + + + + + + + + + + PS122/1_9-119 + + + + + + + + + + + + + + PS122/1_9-12 + + + + + + + + + + + + + + PS122/1_9-120 + + + + + + + + + + + + + + PS122/1_9-13 + + + + + + + + + + + + + + PS122/1_9-14 + + + + + + + + + + + + + + PS122/1_9-15 + + + + + + + + + + + + + + PS122/1_9-16 + + + + + + + + + + + + + + PS122/1_9-17 + + + + + + + + + + + + + + PS122/1_9-18 + + + + + + + + + + + + + + PS122/1_9-19 + + + + + + + + + + + + + + PS122/1_9-20 + + + + + + + + + + + + + + PS122/1_9-21 + + + + + + + + + + + + + + PS122/1_9-22 + + + + + + + + + + + + + + PS122/1_9-23 + + + + + + + + + + + + + + PS122/1_9-24 + + + + + + + + + + + + + + PS122/1_9-25 + + + + + + + + + + + + + + PS122/1_9-26 + + + + + + + + + + + + + + PS122/1_9-28 + + + + + + + + + + + + + + PS122/1_9-29 + + + + + + + + + + + + + + PS122/1_9-3 + + + + + + + + + + + + + + PS122/1_9-30 + + + + + + + + + + + + + + PS122/1_9-31 + + + + + + + + + + + + + + PS122/1_9-33 + + + + + + + + + + + + + + PS122/1_9-35 + + + + + + + + + + + + + + PS122/1_9-36 + + + + + + + + + + + + + + PS122/1_9-37 + + + + + + + + + + + + + + PS122/1_9-38 + + + + + + + + + + + + + + PS122/1_9-39 + + + + + + + + + + + + + + PS122/1_9-4 + + + + + + + + + + + + + + PS122/1_9-40 + + + + + + + + + + + + + + PS122/1_9-41 + + + + + + + + + + + + + + PS122/1_9-42 + + + + + + + + + + + + + + PS122/1_9-43 + + + + + + + + + + + + + + PS122/1_9-44 + + + + + + + + + + + + + + PS122/1_9-45 + + + + + + + + + + + + + + PS122/1_9-46 + + + + + + + + + + + + + + PS122/1_9-47 + + + + + + + + + + + + + + PS122/1_9-48 + + + + + + + + + + + + + + PS122/1_9-49 + + + + + + + + + + + + + + PS122/1_9-5 + + + + + + + + + + + + + + PS122/1_9-50 + + + + + + + + + + + + + + PS122/1_9-51 + + + + + + + + + + + + + + PS122/1_9-52 + + + + + + + + + + + + + + PS122/1_9-53 + + + + + + + + + + + + + + PS122/1_9-54 + + + + + + + + + + + + + + PS122/1_9-55 + + + + + + + + + + + + + + PS122/1_9-56 + + + + + + + + + + + + + + PS122/1_9-57 + + + + + + + + + + + + + + PS122/1_9-58 + + + + + + + + + + + + + + PS122/1_9-59 + + + + + + + + + + + + + + PS122/1_9-6 + + + + + + + + + + + + + + PS122/1_9-60 + + + + + + + + + + + + + + PS122/1_9-61 + + + + + + + + + + + + + + PS122/1_9-62 + + + + + + + + + + + + + + PS122/1_9-63 + + + + + + + + + + + + + + PS122/1_9-64 + + + + + + + + + + + + + + PS122/1_9-65 + + + + + + + + + + + + + + PS122/1_9-66 + + + + + + + + + + + + + + PS122/1_9-67 + + + + + + + + + + + + + + PS122/1_9-68 + + + + + + + + + + + + + + PS122/1_9-69 + + + + + + + + + + + + + + PS122/1_9-7 + + + + + + + + + + + + + + PS122/1_9-70 + + + + + + + + + + + + + + PS122/1_9-71 + + + + + + + + + + + + + + PS122/1_9-72 + + + + + + + + + + + + + + PS122/1_9-73 + + + + + + + + + + + + + + PS122/1_9-74 + + + + + + + + + + + + + + PS122/1_9-75 + + + + + + + + + + + + + + PS122/1_9-76 + + + + + + + + + + + + + + PS122/1_9-77 + + + + + + + + + + + + + + PS122/1_9-78 + + + + + + + + + + + + + + PS122/1_9-79 + + + + + + + + + + + + + + PS122/1_9-8 + + + + + + + + + + + + + + PS122/1_9-80 + + + + + + + + + + + + + + PS122/1_9-81 + + + + + + + + + + + + + + PS122/1_9-82 + + + + + + + + + + + + + + PS122/1_9-83 + + + + + + + + + + + + + + PS122/1_9-84 + + + + + + + + + + + + + + PS122/1_9-85 + + + + + + + + + + + + + + PS122/1_9-86 + + + + + + + + + + + + + + PS122/1_9-87 + + + + + + + + + + + + + + PS122/1_9-88 + + + + + + + + + + + + + + PS122/1_9-89 + + + + + + + + + + + + + + PS122/1_9-9 + + + + + + + + + + + + + + PS122/1_9-90 + + + + + + + + + + + + + + PS122/1_9-91 + + + + + + + + + + + + + + PS122/1_9-92 + + + + + + + + + + + + + + PS122/1_9-93 + + + + + + + + + + + + + + PS122/1_9-94 + + + + + + + + + + + + + + PS122/1_9-95 + + + + + + + + + + + + + + PS122/1_9-96 + + + + + + + + + + + + + + PS122/1_9-97 + + + + + + + + + + + + + + PS122/1_9-98 + + + + + + + + + + + + + + PS122/1_9-99 + + + + + + + + + + + + + + PS122/1_99-46 + + + + + + + + + + + + + + PS122/1_99-47 + + + + + + + + + + + + + + PS122/2_0_Underway-11 + + + + + + + + + + + + + + PS122/2_0_Underway-17 + + + + + + + + + + + + + + PS122/2_0_Underway-20 + + + + + + + + + + + + + + PS122/2_0_Underway-21 + + + + + + + + + + + + + + PS122/2_0_Underway-28 + + + + + + + + + + + + + + PS122/2_0_Underway-29 + + + + + + + + + + + + + + PS122/2_0_Underway-3 + + + + + + + + + + + + + + PS122/2_0_Underway-34 + + + + + + + + + + + + + + PS122/2_0_Underway-35 + + + + + + + + + + + + + + PS122/2_0_Underway-36 + + + + + + + + + + + + + + PS122/2_0_Underway-42 + + + + + + + + + + + + + + PS122/2_13-1 + + + + + + + + + + + + + + PS122/2_14-1 + + + + + + + + + + + + + + PS122/2_14-10 + + + + + + + + + + + + + + PS122/2_14-100 + + + + + + + + + + + + + + PS122/2_14-101 + + + + + + + + + + + + + + PS122/2_14-102 + + + + + + + + + + + + + + PS122/2_14-103 + + + + + + + + + + + + + + PS122/2_14-104 + + + + + + + + + + + + + + PS122/2_14-105 + + + + + + + + + + + + + + PS122/2_14-106 + + + + + + + + + + + + + + PS122/2_14-107 + + + + + + + + + + + + + + PS122/2_14-108 + + + + + + + + + + + + + + PS122/2_14-109 + + + + + + + + + + + + + + PS122/2_14-11 + + + + + + + + + + + + + + PS122/2_14-110 + + + + + + + + + + + + + + PS122/2_14-111 + + + + + + + + + + + + + + PS122/2_14-112 + + + + + + + + + + + + + + PS122/2_14-113 + + + + + + + + + + + + + + PS122/2_14-114 + + + + + + + + + + + + + + PS122/2_14-115 + + + + + + + + + + + + + + PS122/2_14-116 + + + + + + + + + + + + + + PS122/2_14-117 + + + + + + + + + + + + + + PS122/2_14-118 + + + + + + + + + + + + + + PS122/2_14-119 + + + + + + + + + + + + + + PS122/2_14-12 + + + + + + + + + + + + + + PS122/2_14-120 + + + + + + + + + + + + + + PS122/2_14-121 + + + + + + + + + + + + + + PS122/2_14-122 + + + + + + + + + + + + + + PS122/2_14-123 + + + + + + + + + + + + + + PS122/2_14-124 + + + + + + + + + + + + + + PS122/2_14-125 + + + + + + + + + + + + + + PS122/2_14-126 + + + + + + + + + + + + + + PS122/2_14-127 + + + + + + + + + + + + + + PS122/2_14-129 + + + + + + + + + + + + + + PS122/2_14-13 + + + + + + + + + + + + + + PS122/2_14-130 + + + + + + + + + + + + + + PS122/2_14-131 + + + + + + + + + + + + + + PS122/2_14-132 + + + + + + + + + + + + + + PS122/2_14-133 + + + + + + + + + + + + + + PS122/2_14-134 + + + + + + + + + + + + + + PS122/2_14-135 + + + + + + + + + + + + + + PS122/2_14-136 + + + + + + + + + + + + + + PS122/2_14-137 + + + + + + + + + + + + + + PS122/2_14-138 + + + + + + + + + + + + + + PS122/2_14-139 + + + + + + + + + + + + + + PS122/2_14-14 + + + + + + + + + + + + + + PS122/2_14-140 + + + + + + + + + + + + + + PS122/2_14-141 + + + + + + + + + + + + + + PS122/2_14-142 + + + + + + + + + + + + + + PS122/2_14-143 + + + + + + + + + + + + + + PS122/2_14-144 + + + + + + + + + + + + + + PS122/2_14-145 + + + + + + + + + + + + + + PS122/2_14-146 + + + + + + + + + + + + + + PS122/2_14-147 + + + + + + + + + + + + + + PS122/2_14-148 + + + + + + + + + + + + + + PS122/2_14-149 + + + + + + + + + + + + + + PS122/2_14-15 + + + + + + + + + + + + + + PS122/2_14-150 + + + + + + + + + + + + + + PS122/2_14-151 + + + + + + + + + + + + + + PS122/2_14-152 + + + + + + + + + + + + + + PS122/2_14-153 + + + + + + + + + + + + + + PS122/2_14-154 + + + + + + + + + + + + + + PS122/2_14-155 + + + + + + + + + + + + + + PS122/2_14-156 + + + + + + + + + + + + + + PS122/2_14-157 + + + + + + + + + + + + + + PS122/2_14-158 + + + + + + + + + + + + + + PS122/2_14-159 + + + + + + + + + + + + + + PS122/2_14-16 + + + + + + + + + + + + + + PS122/2_14-160 + + + + + + + + + + + + + + PS122/2_14-161 + + + + + + + + + + + + + + PS122/2_14-162 + + + + + + + + + + + + + + PS122/2_14-163 + + + + + + + + + + + + + + PS122/2_14-164 + + + + + + + + + + + + + + PS122/2_14-165 + + + + + + + + + + + + + + PS122/2_14-166 + + + + + + + + + + + + + + PS122/2_14-167 + + + + + + + + + + + + + + PS122/2_14-168 + + + + + + + + + + + + + + PS122/2_14-169 + + + + + + + + + + + + + + PS122/2_14-17 + + + + + + + + + + + + + + PS122/2_14-170 + + + + + + + + + + + + + + PS122/2_14-171 + + + + + + + + + + + + + + PS122/2_14-172 + + + + + + + + + + + + + + PS122/2_14-173 + + + + + + + + + + + + + + PS122/2_14-174 + + + + + + + + + + + + + + PS122/2_14-175 + + + + + + + + + + + + + + PS122/2_14-176 + + + + + + + + + + + + + + PS122/2_14-177 + + + + + + + + + + + + + + PS122/2_14-178 + + + + + + + + + + + + + + PS122/2_14-179 + + + + + + + + + + + + + + PS122/2_14-18 + + + + + + + + + + + + + + PS122/2_14-180 + + + + + + + + + + + + + + PS122/2_14-181 + + + + + + + + + + + + + + PS122/2_14-182 + + + + + + + + + + + + + + PS122/2_14-183 + + + + + + + + + + + + + + PS122/2_14-184 + + + + + + + + + + + + + + PS122/2_14-185 + + + + + + + + + + + + + + PS122/2_14-186 + + + + + + + + + + + + + + PS122/2_14-187 + + + + + + + + + + + + + + PS122/2_14-188 + + + + + + + + + + + + + + PS122/2_14-189 + + + + + + + + + + + + + + PS122/2_14-19 + + + + + + + + + + + + + + PS122/2_14-190 + + + + + + + + + + + + + + PS122/2_14-191 + + + + + + + + + + + + + + PS122/2_14-192 + + + + + + + + + + + + + + PS122/2_14-193 + + + + + + + + + + + + + + PS122/2_14-194 + + + + + + + + + + + + + + PS122/2_14-195 + + + + + + + + + + + + + + PS122/2_14-196 + + + + + + + + + + + + + + PS122/2_14-197 + + + + + + + + + + + + + + PS122/2_14-198 + + + + + + + + + + + + + + PS122/2_14-199 + + + + + + + + + + + + + + PS122/2_14-2 + + + + + + + + + + + + + + PS122/2_14-20 + + + + + + + + + + + + + + PS122/2_14-200 + + + + + + + + + + + + + + PS122/2_14-201 + + + + + + + + + + + + + + PS122/2_14-202 + + + + + + + + + + + + + + PS122/2_14-203 + + + + + + + + + + + + + + PS122/2_14-204 + + + + + + + + + + + + + + PS122/2_14-205 + + + + + + + + + + + + + + PS122/2_14-206 + + + + + + + + + + + + + + PS122/2_14-207 + + + + + + + + + + + + + + PS122/2_14-208 + + + + + + + + + + + + + + PS122/2_14-209 + + + + + + + + + + + + + + PS122/2_14-21 + + + + + + + + + + + + + + PS122/2_14-210 + + + + + + + + + + + + + + PS122/2_14-211 + + + + + + + + + + + + + + PS122/2_14-212 + + + + + + + + + + + + + + PS122/2_14-213 + + + + + + + + + + + + + + PS122/2_14-214 + + + + + + + + + + + + + + PS122/2_14-215 + + + + + + + + + + + + + + PS122/2_14-216 + + + + + + + + + + + + + + PS122/2_14-217 + + + + + + + + + + + + + + PS122/2_14-218 + + + + + + + + + + + + + + PS122/2_14-219 + + + + + + + + + + + + + + PS122/2_14-22 + + + + + + + + + + + + + + PS122/2_14-220 + + + + + + + + + + + + + + PS122/2_14-221 + + + + + + + + + + + + + + PS122/2_14-222 + + + + + + + + + + + + + + PS122/2_14-223 + + + + + + + + + + + + + + PS122/2_14-224 + + + + + + + + + + + + + + PS122/2_14-225 + + + + + + + + + + + + + + PS122/2_14-226 + + + + + + + + + + + + + + PS122/2_14-227 + + + + + + + + + + + + + + PS122/2_14-228 + + + + + + + + + + + + + + PS122/2_14-229 + + + + + + + + + + + + + + PS122/2_14-23 + + + + + + + + + + + + + + PS122/2_14-230 + + + + + + + + + + + + + + PS122/2_14-231 + + + + + + + + + + + + + + PS122/2_14-232 + + + + + + + + + + + + + + PS122/2_14-233 + + + + + + + + + + + + + + PS122/2_14-234 + + + + + + + + + + + + + + PS122/2_14-235 + + + + + + + + + + + + + + PS122/2_14-236 + + + + + + + + + + + + + + PS122/2_14-237 + + + + + + + + + + + + + + PS122/2_14-238 + + + + + + + + + + + + + + PS122/2_14-24 + + + + + + + + + + + + + + PS122/2_14-240 + + + + + + + + + + + + + + PS122/2_14-241 + + + + + + + + + + + + + + PS122/2_14-242 + + + + + + + + + + + + + + PS122/2_14-243 + + + + + + + + + + + + + + PS122/2_14-244 + + + + + + + + + + + + + + PS122/2_14-245 + + + + + + + + + + + + + + PS122/2_14-246 + + + + + + + + + + + + + + PS122/2_14-247 + + + + + + + + + + + + + + PS122/2_14-248 + + + + + + + + + + + + + + PS122/2_14-249 + + + + + + + + + + + + + + PS122/2_14-25 + + + + + + + + + + + + + + PS122/2_14-250 + + + + + + + + + + + + + + PS122/2_14-251 + + + + + + + + + + + + + + PS122/2_14-252 + + + + + + + + + + + + + + PS122/2_14-253 + + + + + + + + + + + + + + PS122/2_14-254 + + + + + + + + + + + + + + PS122/2_14-255 + + + + + + + + + + + + + + PS122/2_14-256 + + + + + + + + + + + + + + PS122/2_14-257 + + + + + + + + + + + + + + PS122/2_14-258 + + + + + + + + + + + + + + PS122/2_14-259 + + + + + + + + + + + + + + PS122/2_14-26 + + + + + + + + + + + + + + PS122/2_14-260 + + + + + + + + + + + + + + PS122/2_14-261 + + + + + + + + + + + + + + PS122/2_14-262 + + + + + + + + + + + + + + PS122/2_14-263 + + + + + + + + + + + + + + PS122/2_14-264 + + + + + + + + + + + + + + PS122/2_14-265 + + + + + + + + + + + + + + PS122/2_14-266 + + + + + + + + + + + + + + PS122/2_14-267 + + + + + + + + + + + + + + PS122/2_14-268 + + + + + + + + + + + + + + PS122/2_14-269 + + + + + + + + + + + + + + PS122/2_14-27 + + + + + + + + + + + + + + PS122/2_14-270 + + + + + + + + + + + + + + PS122/2_14-271 + + + + + + + + + + + + + + PS122/2_14-272 + + + + + + + + + + + + + + PS122/2_14-273 + + + + + + + + + + + + + + PS122/2_14-274 + + + + + + + + + + + + + + PS122/2_14-275 + + + + + + + + + + + + + + PS122/2_14-276 + + + + + + + + + + + + + + PS122/2_14-277 + + + + + + + + + + + + + + PS122/2_14-278 + + + + + + + + + + + + + + PS122/2_14-279 + + + + + + + + + + + + + + PS122/2_14-28 + + + + + + + + + + + + + + PS122/2_14-280 + + + + + + + + + + + + + + PS122/2_14-285 + + + + + + + + + + + + + + PS122/2_14-286 + + + + + + + + + + + + + + PS122/2_14-287 + + + + + + + + + + + + + + PS122/2_14-288 + + + + + + + + + + + + + + PS122/2_14-289 + + + + + + + + + + + + + + PS122/2_14-29 + + + + + + + + + + + + + + PS122/2_14-290 + + + + + + + + + + + + + + PS122/2_14-291 + + + + + + + + + + + + + + PS122/2_14-292 + + + + + + + + + + + + + + PS122/2_14-3 + + + + + + + + + + + + + + PS122/2_14-30 + + + + + + + + + + + + + + PS122/2_14-307 + + + + + + + + + + + + + + PS122/2_14-308 + + + + + + + + + + + + + + PS122/2_14-309 + + + + + + + + + + + + + + PS122/2_14-31 + + + + + + + + + + + + + + PS122/2_14-310 + + + + + + + + + + + + + + PS122/2_14-311 + + + + + + + + + + + + + + PS122/2_14-312 + + + + + + + + + + + + + + PS122/2_14-313 + + + + + + + + + + + + + + PS122/2_14-314 + + + + + + + + + + + + + + PS122/2_14-315 + + + + + + + + + + + + + + PS122/2_14-316 + + + + + + + + + + + + + + PS122/2_14-317 + + + + + + + + + + + + + + PS122/2_14-318 + + + + + + + + + + + + + + PS122/2_14-319 + + + + + + + + + + + + + + PS122/2_14-32 + + + + + + + + + + + + + + PS122/2_14-320 + + + + + + + + + + + + + + PS122/2_14-321 + + + + + + + + + + + + + + PS122/2_14-322 + + + + + + + + + + + + + + PS122/2_14-323 + + + + + + + + + + + + + + PS122/2_14-324 + + + + + + + + + + + + + + PS122/2_14-326 + + + + + + + + + + + + + + PS122/2_14-327 + + + + + + + + + + + + + + PS122/2_14-33 + + + + + + + + + + + + + + PS122/2_14-331 + + + + + + + + + + + + + + PS122/2_14-333 + + + + + + + + + + + + + + PS122/2_14-335 + + + + + + + + + + + + + + PS122/2_14-336 + + + + + + + + + + + + + + PS122/2_14-337 + + + + + + + + + + + + + + PS122/2_14-338 + + + + + + + + + + + + + + PS122/2_14-34 + + + + + + + + + + + + + + PS122/2_14-341 + + + + + + + + + + + + + + PS122/2_14-342 + + + + + + + + + + + + + + PS122/2_14-344 + + + + + + + + + + + + + + PS122/2_14-347 + + + + + + + + + + + + + + PS122/2_14-349 + + + + + + + + + + + + + + PS122/2_14-35 + + + + + + + + + + + + + + PS122/2_14-351 + + + + + + + + + + + + + + PS122/2_14-352 + + + + + + + + + + + + + + PS122/2_14-353 + + + + + + + + + + + + + + PS122/2_14-354 + + + + + + + + + + + + + + PS122/2_14-357 + + + + + + + + + + + + + + PS122/2_14-36 + + + + + + + + + + + + + + PS122/2_14-360 + + + + + + + + + + + + + + PS122/2_14-361 + + + + + + + + + + + + + + PS122/2_14-362 + + + + + + + + + + + + + + PS122/2_14-363 + + + + + + + + + + + + + + PS122/2_14-364 + + + + + + + + + + + + + + PS122/2_14-366 + + + + + + + + + + + + + + PS122/2_14-367 + + + + + + + + + + + + + + PS122/2_14-368 + + + + + + + + + + + + + + PS122/2_14-369 + + + + + + + + + + + + + + PS122/2_14-37 + + + + + + + + + + + + + + PS122/2_14-370 + + + + + + + + + + + + + + PS122/2_14-38 + + + + + + + + + + + + + + PS122/2_14-39 + + + + + + + + + + + + + + PS122/2_14-4 + + + + + + + + + + + + + + PS122/2_14-40 + + + + + + + + + + + + + + PS122/2_14-41 + + + + + + + + + + + + + + PS122/2_14-42 + + + + + + + + + + + + + + PS122/2_14-43 + + + + + + + + + + + + + + PS122/2_14-44 + + + + + + + + + + + + + + PS122/2_14-45 + + + + + + + + + + + + + + PS122/2_14-46 + + + + + + + + + + + + + + PS122/2_14-47 + + + + + + + + + + + + + + PS122/2_14-48 + + + + + + + + + + + + + + PS122/2_14-49 + + + + + + + + + + + + + + PS122/2_14-5 + + + + + + + + + + + + + + PS122/2_14-50 + + + + + + + + + + + + + + PS122/2_14-51 + + + + + + + + + + + + + + PS122/2_14-52 + + + + + + + + + + + + + + PS122/2_14-53 + + + + + + + + + + + + + + PS122/2_14-54 + + + + + + + + + + + + + + PS122/2_14-55 + + + + + + + + + + + + + + PS122/2_14-56 + + + + + + + + + + + + + + PS122/2_14-57 + + + + + + + + + + + + + + PS122/2_14-58 + + + + + + + + + + + + + + PS122/2_14-59 + + + + + + + + + + + + + + PS122/2_14-6 + + + + + + + + + + + + + + PS122/2_14-60 + + + + + + + + + + + + + + PS122/2_14-61 + + + + + + + + + + + + + + PS122/2_14-62 + + + + + + + + + + + + + + PS122/2_14-63 + + + + + + + + + + + + + + PS122/2_14-64 + + + + + + + + + + + + + + PS122/2_14-65 + + + + + + + + + + + + + + PS122/2_14-66 + + + + + + + + + + + + + + PS122/2_14-67 + + + + + + + + + + + + + + PS122/2_14-68 + + + + + + + + + + + + + + PS122/2_14-69 + + + + + + + + + + + + + + PS122/2_14-7 + + + + + + + + + + + + + + PS122/2_14-70 + + + + + + + + + + + + + + PS122/2_14-71 + + + + + + + + + + + + + + PS122/2_14-72 + + + + + + + + + + + + + + PS122/2_14-73 + + + + + + + + + + + + + + PS122/2_14-74 + + + + + + + + + + + + + + PS122/2_14-75 + + + + + + + + + + + + + + PS122/2_14-76 + + + + + + + + + + + + + + PS122/2_14-77 + + + + + + + + + + + + + + PS122/2_14-78 + + + + + + + + + + + + + + PS122/2_14-79 + + + + + + + + + + + + + + PS122/2_14-8 + + + + + + + + + + + + + + PS122/2_14-80 + + + + + + + + + + + + + + PS122/2_14-81 + + + + + + + + + + + + + + PS122/2_14-82 + + + + + + + + + + + + + + PS122/2_14-83 + + + + + + + + + + + + + + PS122/2_14-84 + + + + + + + + + + + + + + PS122/2_14-85 + + + + + + + + + + + + + + PS122/2_14-86 + + + + + + + + + + + + + + PS122/2_14-87 + + + + + + + + + + + + + + PS122/2_14-88 + + + + + + + + + + + + + + PS122/2_14-89 + + + + + + + + + + + + + + PS122/2_14-9 + + + + + + + + + + + + + + PS122/2_14-90 + + + + + + + + + + + + + + PS122/2_14-91 + + + + + + + + + + + + + + PS122/2_14-92 + + + + + + + + + + + + + + PS122/2_14-93 + + + + + + + + + + + + + + PS122/2_14-94 + + + + + + + + + + + + + + PS122/2_14-95 + + + + + + + + + + + + + + PS122/2_14-96 + + + + + + + + + + + + + + PS122/2_14-97 + + + + + + + + + + + + + + PS122/2_14-98 + + + + + + + + + + + + + + PS122/2_14-99 + + + + + + + + + + + + + + PS122/2_15-1 + + + + + + + + + + + + + + PS122/2_15-10 + + + + + + + + + + + + + + PS122/2_15-11 + + + + + + + + + + + + + + PS122/2_15-12 + + + + + + + + + + + + + + PS122/2_15-13 + + + + + + + + + + + + + + PS122/2_15-2 + + + + + + + + + + + + + + PS122/2_15-3 + + + + + + + + + + + + + + PS122/2_15-4 + + + + + + + + + + + + + + PS122/2_15-5 + + + + + + + + + + + + + + PS122/2_15-6 + + + + + + + + + + + + + + PS122/2_15-7 + + + + + + + + + + + + + + PS122/2_15-8 + + + + + + + + + + + + + + PS122/2_15-9 + + + + + + + + + + + + + + PS122/2_16-10 + + + + + + + + + + + + + + PS122/2_16-11 + + + + + + + + + + + + + + PS122/2_16-12 + + + + + + + + + + + + + + PS122/2_16-13 + + + + + + + + + + + + + + PS122/2_16-14 + + + + + + + + + + + + + + PS122/2_16-15 + + + + + + + + + + + + + + PS122/2_16-16 + + + + + + + + + + + + + + PS122/2_16-17 + + + + + + + + + + + + + + PS122/2_16-18 + + + + + + + + + + + + + + PS122/2_16-19 + + + + + + + + + + + + + + PS122/2_16-2 + + + + + + + + + + + + + + PS122/2_16-20 + + + + + + + + + + + + + + PS122/2_16-21 + + + + + + + + + + + + + + PS122/2_16-22 + + + + + + + + + + + + + + PS122/2_16-23 + + + + + + + + + + + + + + PS122/2_16-24 + + + + + + + + + + + + + + PS122/2_16-27 + + + + + + + + + + + + + + PS122/2_16-28 + + + + + + + + + + + + + + PS122/2_16-29 + + + + + + + + + + + + + + PS122/2_16-3 + + + + + + + + + + + + + + PS122/2_16-30 + + + + + + + + + + + + + + PS122/2_16-31 + + + + + + + + + + + + + + PS122/2_16-32 + + + + + + + + + + + + + + PS122/2_16-33 + + + + + + + + + + + + + + PS122/2_16-34 + + + + + + + + + + + + + + PS122/2_16-37 + + + + + + + + + + + + + + PS122/2_16-38 + + + + + + + + + + + + + + PS122/2_16-39 + + + + + + + + + + + + + + PS122/2_16-4 + + + + + + + + + + + + + + PS122/2_16-40 + + + + + + + + + + + + + + PS122/2_16-41 + + + + + + + + + + + + + + PS122/2_16-42 + + + + + + + + + + + + + + PS122/2_16-43 + + + + + + + + + + + + + + PS122/2_16-44 + + + + + + + + + + + + + + PS122/2_16-45 + + + + + + + + + + + + + + PS122/2_16-46 + + + + + + + + + + + + + + PS122/2_16-47 + + + + + + + + + + + + + + PS122/2_16-48 + + + + + + + + + + + + + + PS122/2_16-5 + + + + + + + + + + + + + + PS122/2_16-50 + + + + + + + + + + + + + + PS122/2_16-52 + + + + + + + + + + + + + + PS122/2_16-53 + + + + + + + + + + + + + + PS122/2_16-54 + + + + + + + + + + + + + + PS122/2_16-55 + + + + + + + + + + + + + + PS122/2_16-57 + + + + + + + + + + + + + + PS122/2_16-58 + + + + + + + + + + + + + + PS122/2_16-59 + + + + + + + + + + + + + + PS122/2_16-6 + + + + + + + + + + + + + + PS122/2_16-60 + + + + + + + + + + + + + + PS122/2_16-61 + + + + + + + + + + + + + + PS122/2_16-62 + + + + + + + + + + + + + + PS122/2_16-64 + + + + + + + + + + + + + + PS122/2_16-65 + + + + + + + + + + + + + + PS122/2_16-67 + + + + + + + + + + + + + + PS122/2_16-68 + + + + + + + + + + + + + + PS122/2_16-69 + + + + + + + + + + + + + + PS122/2_16-7 + + + + + + + + + + + + + + PS122/2_16-70 + + + + + + + + + + + + + + PS122/2_16-71 + + + + + + + + + + + + + + PS122/2_16-72 + + + + + + + + + + + + + + PS122/2_16-73 + + + + + + + + + + + + + + PS122/2_16-74 + + + + + + + + + + + + + + PS122/2_16-75 + + + + + + + + + + + + + + PS122/2_16-76 + + + + + + + + + + + + + + PS122/2_16-77 + + + + + + + + + + + + + + PS122/2_16-78 + + + + + + + + + + + + + + PS122/2_16-79 + + + + + + + + + + + + + + PS122/2_16-8 + + + + + + + + + + + + + + PS122/2_16-80 + + + + + + + + + + + + + + PS122/2_16-81 + + + + + + + + + + + + + + PS122/2_16-82 + + + + + + + + + + + + + + PS122/2_16-83 + + + + + + + + + + + + + + PS122/2_16-84 + + + + + + + + + + + + + + PS122/2_16-9 + + + + + + + + + + + + + + PS122/2_16-90 + + + + + + + + + + + + + + PS122/2_16-91 + + + + + + + + + + + + + + PS122/2_16-92 + + + + + + + + + + + + + + PS122/2_16-93 + + + + + + + + + + + + + + PS122/2_16-94 + + + + + + + + + + + + + + PS122/2_17-10 + + + + + + + + + + + + + + PS122/2_17-101 + + + + + + + + + + + + + + PS122/2_17-102 + + + + + + + + + + + + + + PS122/2_17-103 + + + + + + + + + + + + + + PS122/2_17-104 + + + + + + + + + + + + + + PS122/2_17-105 + + + + + + + + + + + + + + PS122/2_17-106 + + + + + + + + + + + + + + PS122/2_17-107 + + + + + + + + + + + + + + PS122/2_17-108 + + + + + + + + + + + + + + PS122/2_17-109 + + + + + + + + + + + + + + PS122/2_17-11 + + + + + + + + + + + + + + PS122/2_17-110 + + + + + + + + + + + + + + PS122/2_17-111 + + + + + + + + + + + + + + PS122/2_17-112 + + + + + + + + + + + + + + PS122/2_17-113 + + + + + + + + + + + + + + PS122/2_17-114 + + + + + + + + + + + + + + PS122/2_17-119 + + + + + + + + + + + + + + PS122/2_17-12 + + + + + + + + + + + + + + PS122/2_17-120 + + + + + + + + + + + + + + PS122/2_17-122 + + + + + + + + + + + + + + PS122/2_17-123 + + + + + + + + + + + + + + PS122/2_17-124 + + + + + + + + + + + + + + PS122/2_17-127 + + + + + + + + + + + + + + PS122/2_17-128 + + + + + + + + + + + + + + PS122/2_17-129 + + + + + + + + + + + + + + PS122/2_17-13 + + + + + + + + + + + + + + PS122/2_17-130 + + + + + + + + + + + + + + PS122/2_17-131 + + + + + + + + + + + + + + PS122/2_17-132 + + + + + + + + + + + + + + PS122/2_17-14 + + + + + + + + + + + + + + PS122/2_17-15 + + + + + + + + + + + + + + PS122/2_17-16 + + + + + + + + + + + + + + PS122/2_17-17 + + + + + + + + + + + + + + PS122/2_17-18 + + + + + + + + + + + + + + PS122/2_17-19 + + + + + + + + + + + + + + PS122/2_17-2 + + + + + + + + + + + + + + PS122/2_17-21 + + + + + + + + + + + + + + PS122/2_17-22 + + + + + + + + + + + + + + PS122/2_17-23 + + + + + + + + + + + + + + PS122/2_17-24 + + + + + + + + + + + + + + PS122/2_17-25 + + + + + + + + + + + + + + PS122/2_17-29 + + + + + + + + + + + + + + PS122/2_17-3 + + + + + + + + + + + + + + PS122/2_17-33 + + + + + + + + + + + + + + PS122/2_17-34 + + + + + + + + + + + + + + PS122/2_17-35 + + + + + + + + + + + + + + PS122/2_17-36 + + + + + + + + + + + + + + PS122/2_17-37 + + + + + + + + + + + + + + PS122/2_17-38 + + + + + + + + + + + + + + PS122/2_17-39 + + + + + + + + + + + + + + PS122/2_17-40 + + + + + + + + + + + + + + PS122/2_17-41 + + + + + + + + + + + + + + PS122/2_17-42 + + + + + + + + + + + + + + PS122/2_17-43 + + + + + + + + + + + + + + PS122/2_17-44 + + + + + + + + + + + + + + PS122/2_17-45 + + + + + + + + + + + + + + PS122/2_17-46 + + + + + + + + + + + + + + PS122/2_17-47 + + + + + + + + + + + + + + PS122/2_17-48 + + + + + + + + + + + + + + PS122/2_17-49 + + + + + + + + + + + + + + PS122/2_17-5 + + + + + + + + + + + + + + PS122/2_17-52 + + + + + + + + + + + + + + PS122/2_17-54 + + + + + + + + + + + + + + PS122/2_17-55 + + + + + + + + + + + + + + PS122/2_17-56 + + + + + + + + + + + + + + PS122/2_17-57 + + + + + + + + + + + + + + PS122/2_17-58 + + + + + + + + + + + + + + PS122/2_17-60 + + + + + + + + + + + + + + PS122/2_17-62 + + + + + + + + + + + + + + PS122/2_17-64 + + + + + + + + + + + + + + PS122/2_17-65 + + + + + + + + + + + + + + PS122/2_17-66 + + + + + + + + + + + + + + PS122/2_17-67 + + + + + + + + + + + + + + PS122/2_17-68 + + + + + + + + + + + + + + PS122/2_17-69 + + + + + + + + + + + + + + PS122/2_17-7 + + + + + + + + + + + + + + PS122/2_17-70 + + + + + + + + + + + + + + PS122/2_17-71 + + + + + + + + + + + + + + PS122/2_17-72 + + + + + + + + + + + + + + PS122/2_17-73 + + + + + + + + + + + + + + PS122/2_17-74 + + + + + + + + + + + + + + PS122/2_17-75 + + + + + + + + + + + + + + PS122/2_17-76 + + + + + + + + + + + + + + PS122/2_17-77 + + + + + + + + + + + + + + PS122/2_17-78 + + + + + + + + + + + + + + PS122/2_17-8 + + + + + + + + + + + + + + PS122/2_17-86 + + + + + + + + + + + + + + PS122/2_17-87 + + + + + + + + + + + + + + PS122/2_17-88 + + + + + + + + + + + + + + PS122/2_17-89 + + + + + + + + + + + + + + PS122/2_17-9 + + + + + + + + + + + + + + PS122/2_17-90 + + + + + + + + + + + + + + PS122/2_17-91 + + + + + + + + + + + + + + PS122/2_17-92 + + + + + + + + + + + + + + PS122/2_17-93 + + + + + + + + + + + + + + PS122/2_17-94 + + + + + + + + + + + + + + PS122/2_17-95 + + + + + + + + + + + + + + PS122/2_17-96 + + + + + + + + + + + + + + PS122/2_17-97 + + + + + + + + + + + + + + PS122/2_17-98 + + + + + + + + + + + + + + PS122/2_17-99 + + + + + + + + + + + + + + PS122/2_18-10 + + + + + + + + + + + + + + PS122/2_18-100 + + + + + + + + + + + + + + PS122/2_18-106 + + + + + + + + + + + + + + PS122/2_18-107 + + + + + + + + + + + + + + PS122/2_18-108 + + + + + + + + + + + + + + PS122/2_18-109 + + + + + + + + + + + + + + PS122/2_18-11 + + + + + + + + + + + + + + PS122/2_18-110 + + + + + + + + + + + + + + PS122/2_18-111 + + + + + + + + + + + + + + PS122/2_18-112 + + + + + + + + + + + + + + PS122/2_18-113 + + + + + + + + + + + + + + PS122/2_18-114 + + + + + + + + + + + + + + PS122/2_18-115 + + + + + + + + + + + + + + PS122/2_18-116 + + + + + + + + + + + + + + PS122/2_18-117 + + + + + + + + + + + + + + PS122/2_18-118 + + + + + + + + + + + + + + PS122/2_18-119 + + + + + + + + + + + + + + PS122/2_18-12 + + + + + + + + + + + + + + PS122/2_18-13 + + + + + + + + + + + + + + PS122/2_18-15 + + + + + + + + + + + + + + PS122/2_18-16 + + + + + + + + + + + + + + PS122/2_18-17 + + + + + + + + + + + + + + PS122/2_18-18 + + + + + + + + + + + + + + PS122/2_18-19 + + + + + + + + + + + + + + PS122/2_18-2 + + + + + + + + + + + + + + PS122/2_18-20 + + + + + + + + + + + + + + PS122/2_18-21 + + + + + + + + + + + + + + PS122/2_18-22 + + + + + + + + + + + + + + PS122/2_18-23 + + + + + + + + + + + + + + PS122/2_18-24 + + + + + + + + + + + + + + PS122/2_18-25 + + + + + + + + + + + + + + PS122/2_18-26 + + + + + + + + + + + + + + PS122/2_18-27 + + + + + + + + + + + + + + PS122/2_18-28 + + + + + + + + + + + + + + PS122/2_18-29 + + + + + + + + + + + + + + PS122/2_18-30 + + + + + + + + + + + + + + PS122/2_18-31 + + + + + + + + + + + + + + PS122/2_18-32 + + + + + + + + + + + + + + PS122/2_18-33 + + + + + + + + + + + + + + PS122/2_18-34 + + + + + + + + + + + + + + PS122/2_18-35 + + + + + + + + + + + + + + PS122/2_18-36 + + + + + + + + + + + + + + PS122/2_18-37 + + + + + + + + + + + + + + PS122/2_18-38 + + + + + + + + + + + + + + PS122/2_18-39 + + + + + + + + + + + + + + PS122/2_18-40 + + + + + + + + + + + + + + PS122/2_18-41 + + + + + + + + + + + + + + PS122/2_18-42 + + + + + + + + + + + + + + PS122/2_18-43 + + + + + + + + + + + + + + PS122/2_18-44 + + + + + + + + + + + + + + PS122/2_18-45 + + + + + + + + + + + + + + PS122/2_18-46 + + + + + + + + + + + + + + PS122/2_18-47 + + + + + + + + + + + + + + PS122/2_18-48 + + + + + + + + + + + + + + PS122/2_18-49 + + + + + + + + + + + + + + PS122/2_18-5 + + + + + + + + + + + + + + PS122/2_18-50 + + + + + + + + + + + + + + PS122/2_18-51 + + + + + + + + + + + + + + PS122/2_18-52 + + + + + + + + + + + + + + PS122/2_18-53 + + + + + + + + + + + + + + PS122/2_18-54 + + + + + + + + + + + + + + PS122/2_18-55 + + + + + + + + + + + + + + PS122/2_18-56 + + + + + + + + + + + + + + PS122/2_18-57 + + + + + + + + + + + + + + PS122/2_18-58 + + + + + + + + + + + + + + PS122/2_18-59 + + + + + + + + + + + + + + PS122/2_18-6 + + + + + + + + + + + + + + PS122/2_18-60 + + + + + + + + + + + + + + PS122/2_18-61 + + + + + + + + + + + + + + PS122/2_18-62 + + + + + + + + + + + + + + PS122/2_18-63 + + + + + + + + + + + + + + PS122/2_18-64 + + + + + + + + + + + + + + PS122/2_18-65 + + + + + + + + + + + + + + PS122/2_18-66 + + + + + + + + + + + + + + PS122/2_18-67 + + + + + + + + + + + + + + PS122/2_18-68 + + + + + + + + + + + + + + PS122/2_18-69 + + + + + + + + + + + + + + PS122/2_18-7 + + + + + + + + + + + + + + PS122/2_18-70 + + + + + + + + + + + + + + PS122/2_18-71 + + + + + + + + + + + + + + PS122/2_18-72 + + + + + + + + + + + + + + PS122/2_18-73 + + + + + + + + + + + + + + PS122/2_18-74 + + + + + + + + + + + + + + PS122/2_18-75 + + + + + + + + + + + + + + PS122/2_18-76 + + + + + + + + + + + + + + PS122/2_18-77 + + + + + + + + + + + + + + PS122/2_18-78 + + + + + + + + + + + + + + PS122/2_18-79 + + + + + + + + + + + + + + PS122/2_18-8 + + + + + + + + + + + + + + PS122/2_18-80 + + + + + + + + + + + + + + PS122/2_18-81 + + + + + + + + + + + + + + PS122/2_18-82 + + + + + + + + + + + + + + PS122/2_18-83 + + + + + + + + + + + + + + PS122/2_18-84 + + + + + + + + + + + + + + PS122/2_18-85 + + + + + + + + + + + + + + PS122/2_18-86 + + + + + + + + + + + + + + PS122/2_18-87 + + + + + + + + + + + + + + PS122/2_18-88 + + + + + + + + + + + + + + PS122/2_18-89 + + + + + + + + + + + + + + PS122/2_18-9 + + + + + + + + + + + + + + PS122/2_18-90 + + + + + + + + + + + + + + PS122/2_18-91 + + + + + + + + + + + + + + PS122/2_18-92 + + + + + + + + + + + + + + PS122/2_18-93 + + + + + + + + + + + + + + PS122/2_18-94 + + + + + + + + + + + + + + PS122/2_18-95 + + + + + + + + + + + + + + PS122/2_18-96 + + + + + + + + + + + + + + PS122/2_18-97 + + + + + + + + + + + + + + PS122/2_18-98 + + + + + + + + + + + + + + PS122/2_18-99 + + + + + + + + + + + + + + PS122/2_19-10 + + + + + + + + + + + + + + PS122/2_19-100 + + + + + + + + + + + + + + PS122/2_19-101 + + + + + + + + + + + + + + PS122/2_19-102 + + + + + + + + + + + + + + PS122/2_19-103 + + + + + + + + + + + + + + PS122/2_19-104 + + + + + + + + + + + + + + PS122/2_19-105 + + + + + + + + + + + + + + PS122/2_19-106 + + + + + + + + + + + + + + PS122/2_19-107 + + + + + + + + + + + + + + PS122/2_19-108 + + + + + + + + + + + + + + PS122/2_19-109 + + + + + + + + + + + + + + PS122/2_19-11 + + + + + + + + + + + + + + PS122/2_19-110 + + + + + + + + + + + + + + PS122/2_19-111 + + + + + + + + + + + + + + PS122/2_19-112 + + + + + + + + + + + + + + PS122/2_19-113 + + + + + + + + + + + + + + PS122/2_19-114 + + + + + + + + + + + + + + PS122/2_19-115 + + + + + + + + + + + + + + PS122/2_19-116 + + + + + + + + + + + + + + PS122/2_19-118 + + + + + + + + + + + + + + PS122/2_19-119 + + + + + + + + + + + + + + PS122/2_19-12 + + + + + + + + + + + + + + PS122/2_19-122 + + + + + + + + + + + + + + PS122/2_19-123 + + + + + + + + + + + + + + PS122/2_19-124 + + + + + + + + + + + + + + PS122/2_19-125 + + + + + + + + + + + + + + PS122/2_19-126 + + + + + + + + + + + + + + PS122/2_19-127 + + + + + + + + + + + + + + PS122/2_19-128 + + + + + + + + + + + + + + PS122/2_19-129 + + + + + + + + + + + + + + PS122/2_19-13 + + + + + + + + + + + + + + PS122/2_19-131 + + + + + + + + + + + + + + PS122/2_19-132 + + + + + + + + + + + + + + PS122/2_19-133 + + + + + + + + + + + + + + PS122/2_19-134 + + + + + + + + + + + + + + PS122/2_19-135 + + + + + + + + + + + + + + PS122/2_19-136 + + + + + + + + + + + + + + PS122/2_19-137 + + + + + + + + + + + + + + PS122/2_19-138 + + + + + + + + + + + + + + PS122/2_19-139 + + + + + + + + + + + + + + PS122/2_19-14 + + + + + + + + + + + + + + PS122/2_19-140 + + + + + + + + + + + + + + PS122/2_19-141 + + + + + + + + + + + + + + PS122/2_19-142 + + + + + + + + + + + + + + PS122/2_19-143 + + + + + + + + + + + + + + PS122/2_19-144 + + + + + + + + + + + + + + PS122/2_19-145 + + + + + + + + + + + + + + PS122/2_19-146 + + + + + + + + + + + + + + PS122/2_19-147 + + + + + + + + + + + + + + PS122/2_19-148 + + + + + + + + + + + + + + PS122/2_19-149 + + + + + + + + + + + + + + PS122/2_19-15 + + + + + + + + + + + + + + PS122/2_19-150 + + + + + + + + + + + + + + PS122/2_19-151 + + + + + + + + + + + + + + PS122/2_19-152 + + + + + + + + + + + + + + PS122/2_19-153 + + + + + + + + + + + + + + PS122/2_19-154 + + + + + + + + + + + + + + PS122/2_19-156 + + + + + + + + + + + + + + PS122/2_19-157 + + + + + + + + + + + + + + PS122/2_19-158 + + + + + + + + + + + + + + PS122/2_19-159 + + + + + + + + + + + + + + PS122/2_19-16 + + + + + + + + + + + + + + PS122/2_19-160 + + + + + + + + + + + + + + PS122/2_19-161 + + + + + + + + + + + + + + PS122/2_19-163 + + + + + + + + + + + + + + PS122/2_19-164 + + + + + + + + + + + + + + PS122/2_19-165 + + + + + + + + + + + + + + PS122/2_19-166 + + + + + + + + + + + + + + PS122/2_19-167 + + + + + + + + + + + + + + PS122/2_19-168 + + + + + + + + + + + + + + PS122/2_19-17 + + + + + + + + + + + + + + PS122/2_19-173 + + + + + + + + + + + + + + PS122/2_19-174 + + + + + + + + + + + + + + PS122/2_19-175 + + + + + + + + + + + + + + PS122/2_19-176 + + + + + + + + + + + + + + PS122/2_19-177 + + + + + + + + + + + + + + PS122/2_19-178 + + + + + + + + + + + + + + PS122/2_19-179 + + + + + + + + + + + + + + PS122/2_19-18 + + + + + + + + + + + + + + PS122/2_19-180 + + + + + + + + + + + + + + PS122/2_19-181 + + + + + + + + + + + + + + PS122/2_19-182 + + + + + + + + + + + + + + PS122/2_19-19 + + + + + + + + + + + + + + PS122/2_19-2 + + + + + + + + + + + + + + PS122/2_19-20 + + + + + + + + + + + + + + PS122/2_19-21 + + + + + + + + + + + + + + PS122/2_19-22 + + + + + + + + + + + + + + PS122/2_19-23 + + + + + + + + + + + + + + PS122/2_19-24 + + + + + + + + + + + + + + PS122/2_19-25 + + + + + + + + + + + + + + PS122/2_19-26 + + + + + + + + + + + + + + PS122/2_19-27 + + + + + + + + + + + + + + PS122/2_19-28 + + + + + + + + + + + + + + PS122/2_19-29 + + + + + + + + + + + + + + PS122/2_19-3 + + + + + + + + + + + + + + PS122/2_19-30 + + + + + + + + + + + + + + PS122/2_19-31 + + + + + + + + + + + + + + PS122/2_19-32 + + + + + + + + + + + + + + PS122/2_19-33 + + + + + + + + + + + + + + PS122/2_19-34 + + + + + + + + + + + + + + PS122/2_19-35 + + + + + + + + + + + + + + PS122/2_19-4 + + + + + + + + + + + + + + PS122/2_19-41 + + + + + + + + + + + + + + PS122/2_19-42 + + + + + + + + + + + + + + PS122/2_19-43 + + + + + + + + + + + + + + PS122/2_19-44 + + + + + + + + + + + + + + PS122/2_19-45 + + + + + + + + + + + + + + PS122/2_19-46 + + + + + + + + + + + + + + PS122/2_19-47 + + + + + + + + + + + + + + PS122/2_19-48 + + + + + + + + + + + + + + PS122/2_19-49 + + + + + + + + + + + + + + PS122/2_19-5 + + + + + + + + + + + + + + PS122/2_19-50 + + + + + + + + + + + + + + PS122/2_19-51 + + + + + + + + + + + + + + PS122/2_19-52 + + + + + + + + + + + + + + PS122/2_19-53 + + + + + + + + + + + + + + PS122/2_19-54 + + + + + + + + + + + + + + PS122/2_19-55 + + + + + + + + + + + + + + PS122/2_19-56 + + + + + + + + + + + + + + PS122/2_19-57 + + + + + + + + + + + + + + PS122/2_19-58 + + + + + + + + + + + + + + PS122/2_19-59 + + + + + + + + + + + + + + PS122/2_19-6 + + + + + + + + + + + + + + PS122/2_19-60 + + + + + + + + + + + + + + PS122/2_19-61 + + + + + + + + + + + + + + PS122/2_19-62 + + + + + + + + + + + + + + PS122/2_19-64 + + + + + + + + + + + + + + PS122/2_19-66 + + + + + + + + + + + + + + PS122/2_19-68 + + + + + + + + + + + + + + PS122/2_19-7 + + + + + + + + + + + + + + PS122/2_19-70 + + + + + + + + + + + + + + PS122/2_19-71 + + + + + + + + + + + + + + PS122/2_19-72 + + + + + + + + + + + + + + PS122/2_19-73 + + + + + + + + + + + + + + PS122/2_19-74 + + + + + + + + + + + + + + PS122/2_19-75 + + + + + + + + + + + + + + PS122/2_19-76 + + + + + + + + + + + + + + PS122/2_19-77 + + + + + + + + + + + + + + PS122/2_19-79 + + + + + + + + + + + + + + PS122/2_19-8 + + + + + + + + + + + + + + PS122/2_19-80 + + + + + + + + + + + + + + PS122/2_19-81 + + + + + + + + + + + + + + PS122/2_19-82 + + + + + + + + + + + + + + PS122/2_19-83 + + + + + + + + + + + + + + PS122/2_19-84 + + + + + + + + + + + + + + PS122/2_19-85 + + + + + + + + + + + + + + PS122/2_19-86 + + + + + + + + + + + + + + PS122/2_19-87 + + + + + + + + + + + + + + PS122/2_19-89 + + + + + + + + + + + + + + PS122/2_19-9 + + + + + + + + + + + + + + PS122/2_19-90 + + + + + + + + + + + + + + PS122/2_19-92 + + + + + + + + + + + + + + PS122/2_19-93 + + + + + + + + + + + + + + PS122/2_19-94 + + + + + + + + + + + + + + PS122/2_19-95 + + + + + + + + + + + + + + PS122/2_19-96 + + + + + + + + + + + + + + PS122/2_19-97 + + + + + + + + + + + + + + PS122/2_19-98 + + + + + + + + + + + + + + PS122/2_19-99 + + + + + + + + + + + + + + PS122/2_20-1 + + + + + + + + + + + + + + PS122/2_20-10 + + + + + + + + + + + + + + PS122/2_20-100 + + + + + + + + + + + + + + PS122/2_20-101 + + + + + + + + + + + + + + PS122/2_20-102 + + + + + + + + + + + + + + PS122/2_20-103 + + + + + + + + + + + + + + PS122/2_20-104 + + + + + + + + + + + + + + PS122/2_20-105 + + + + + + + + + + + + + + PS122/2_20-106 + + + + + + + + + + + + + + PS122/2_20-107 + + + + + + + + + + + + + + PS122/2_20-108 + + + + + + + + + + + + + + PS122/2_20-109 + + + + + + + + + + + + + + PS122/2_20-11 + + + + + + + + + + + + + + PS122/2_20-110 + + + + + + + + + + + + + + PS122/2_20-111 + + + + + + + + + + + + + + PS122/2_20-112 + + + + + + + + + + + + + + PS122/2_20-113 + + + + + + + + + + + + + + PS122/2_20-114 + + + + + + + + + + + + + + PS122/2_20-117 + + + + + + + + + + + + + + PS122/2_20-118 + + + + + + + + + + + + + + PS122/2_20-119 + + + + + + + + + + + + + + PS122/2_20-120 + + + + + + + + + + + + + + PS122/2_20-121 + + + + + + + + + + + + + + PS122/2_20-122 + + + + + + + + + + + + + + PS122/2_20-123 + + + + + + + + + + + + + + PS122/2_20-124 + + + + + + + + + + + + + + PS122/2_20-125 + + + + + + + + + + + + + + PS122/2_20-126 + + + + + + + + + + + + + + PS122/2_20-128 + + + + + + + + + + + + + + PS122/2_20-13 + + + + + + + + + + + + + + PS122/2_20-133 + + + + + + + + + + + + + + PS122/2_20-134 + + + + + + + + + + + + + + PS122/2_20-135 + + + + + + + + + + + + + + PS122/2_20-136 + + + + + + + + + + + + + + PS122/2_20-137 + + + + + + + + + + + + + + PS122/2_20-138 + + + + + + + + + + + + + + PS122/2_20-139 + + + + + + + + + + + + + + PS122/2_20-14 + + + + + + + + + + + + + + PS122/2_20-140 + + + + + + + + + + + + + + PS122/2_20-141 + + + + + + + + + + + + + + PS122/2_20-142 + + + + + + + + + + + + + + PS122/2_20-143 + + + + + + + + + + + + + + PS122/2_20-144 + + + + + + + + + + + + + + PS122/2_20-145 + + + + + + + + + + + + + + PS122/2_20-147 + + + + + + + + + + + + + + PS122/2_20-148 + + + + + + + + + + + + + + PS122/2_20-149 + + + + + + + + + + + + + + PS122/2_20-150 + + + + + + + + + + + + + + PS122/2_20-152 + + + + + + + + + + + + + + PS122/2_20-153 + + + + + + + + + + + + + + PS122/2_20-154 + + + + + + + + + + + + + + PS122/2_20-155 + + + + + + + + + + + + + + PS122/2_20-156 + + + + + + + + + + + + + + PS122/2_20-157 + + + + + + + + + + + + + + PS122/2_20-158 + + + + + + + + + + + + + + PS122/2_20-159 + + + + + + + + + + + + + + PS122/2_20-16 + + + + + + + + + + + + + + PS122/2_20-160 + + + + + + + + + + + + + + PS122/2_20-161 + + + + + + + + + + + + + + PS122/2_20-162 + + + + + + + + + + + + + + PS122/2_20-163 + + + + + + + + + + + + + + PS122/2_20-164 + + + + + + + + + + + + + + PS122/2_20-167 + + + + + + + + + + + + + + PS122/2_20-168 + + + + + + + + + + + + + + PS122/2_20-17 + + + + + + + + + + + + + + PS122/2_20-170 + + + + + + + + + + + + + + PS122/2_20-171 + + + + + + + + + + + + + + PS122/2_20-172 + + + + + + + + + + + + + + PS122/2_20-173 + + + + + + + + + + + + + + PS122/2_20-174 + + + + + + + + + + + + + + PS122/2_20-175 + + + + + + + + + + + + + + PS122/2_20-176 + + + + + + + + + + + + + + PS122/2_20-18 + + + + + + + + + + + + + + PS122/2_20-19 + + + + + + + + + + + + + + PS122/2_20-2 + + + + + + + + + + + + + + PS122/2_20-20 + + + + + + + + + + + + + + PS122/2_20-21 + + + + + + + + + + + + + + PS122/2_20-22 + + + + + + + + + + + + + + PS122/2_20-23 + + + + + + + + + + + + + + PS122/2_20-24 + + + + + + + + + + + + + + PS122/2_20-26 + + + + + + + + + + + + + + PS122/2_20-27 + + + + + + + + + + + + + + PS122/2_20-28 + + + + + + + + + + + + + + PS122/2_20-29 + + + + + + + + + + + + + + PS122/2_20-3 + + + + + + + + + + + + + + PS122/2_20-30 + + + + + + + + + + + + + + PS122/2_20-31 + + + + + + + + + + + + + + PS122/2_20-32 + + + + + + + + + + + + + + PS122/2_20-33 + + + + + + + + + + + + + + PS122/2_20-34 + + + + + + + + + + + + + + PS122/2_20-35 + + + + + + + + + + + + + + PS122/2_20-36 + + + + + + + + + + + + + + PS122/2_20-37 + + + + + + + + + + + + + + PS122/2_20-38 + + + + + + + + + + + + + + PS122/2_20-39 + + + + + + + + + + + + + + PS122/2_20-4 + + + + + + + + + + + + + + PS122/2_20-40 + + + + + + + + + + + + + + PS122/2_20-41 + + + + + + + + + + + + + + PS122/2_20-42 + + + + + + + + + + + + + + PS122/2_20-43 + + + + + + + + + + + + + + PS122/2_20-44 + + + + + + + + + + + + + + PS122/2_20-45 + + + + + + + + + + + + + + PS122/2_20-46 + + + + + + + + + + + + + + PS122/2_20-47 + + + + + + + + + + + + + + PS122/2_20-48 + + + + + + + + + + + + + + PS122/2_20-49 + + + + + + + + + + + + + + PS122/2_20-5 + + + + + + + + + + + + + + PS122/2_20-50 + + + + + + + + + + + + + + PS122/2_20-51 + + + + + + + + + + + + + + PS122/2_20-52 + + + + + + + + + + + + + + PS122/2_20-53 + + + + + + + + + + + + + + PS122/2_20-54 + + + + + + + + + + + + + + PS122/2_20-55 + + + + + + + + + + + + + + PS122/2_20-56 + + + + + + + + + + + + + + PS122/2_20-59 + + + + + + + + + + + + + + PS122/2_20-6 + + + + + + + + + + + + + + PS122/2_20-60 + + + + + + + + + + + + + + PS122/2_20-63 + + + + + + + + + + + + + + PS122/2_20-65 + + + + + + + + + + + + + + PS122/2_20-66 + + + + + + + + + + + + + + PS122/2_20-67 + + + + + + + + + + + + + + PS122/2_20-68 + + + + + + + + + + + + + + PS122/2_20-69 + + + + + + + + + + + + + + PS122/2_20-7 + + + + + + + + + + + + + + PS122/2_20-70 + + + + + + + + + + + + + + PS122/2_20-71 + + + + + + + + + + + + + + PS122/2_20-72 + + + + + + + + + + + + + + PS122/2_20-73 + + + + + + + + + + + + + + PS122/2_20-74 + + + + + + + + + + + + + + PS122/2_20-75 + + + + + + + + + + + + + + PS122/2_20-77 + + + + + + + + + + + + + + PS122/2_20-78 + + + + + + + + + + + + + + PS122/2_20-79 + + + + + + + + + + + + + + PS122/2_20-8 + + + + + + + + + + + + + + PS122/2_20-80 + + + + + + + + + + + + + + PS122/2_20-81 + + + + + + + + + + + + + + PS122/2_20-82 + + + + + + + + + + + + + + PS122/2_20-83 + + + + + + + + + + + + + + PS122/2_20-84 + + + + + + + + + + + + + + PS122/2_20-85 + + + + + + + + + + + + + + PS122/2_20-86 + + + + + + + + + + + + + + PS122/2_20-87 + + + + + + + + + + + + + + PS122/2_20-88 + + + + + + + + + + + + + + PS122/2_20-9 + + + + + + + + + + + + + + PS122/2_20-90 + + + + + + + + + + + + + + PS122/2_20-92 + + + + + + + + + + + + + + PS122/2_20-94 + + + + + + + + + + + + + + PS122/2_20-95 + + + + + + + + + + + + + + PS122/2_20-96 + + + + + + + + + + + + + + PS122/2_20-97 + + + + + + + + + + + + + + PS122/2_20-98 + + + + + + + + + + + + + + PS122/2_20-99 + + + + + + + + + + + + + + PS122/2_21-1 + + + + + + + + + + + + + + PS122/2_21-100 + + + + + + + + + + + + + + PS122/2_21-101 + + + + + + + + + + + + + + PS122/2_21-102 + + + + + + + + + + + + + + PS122/2_21-103 + + + + + + + + + + + + + + PS122/2_21-104 + + + + + + + + + + + + + + PS122/2_21-105 + + + + + + + + + + + + + + PS122/2_21-106 + + + + + + + + + + + + + + PS122/2_21-107 + + + + + + + + + + + + + + PS122/2_21-108 + + + + + + + + + + + + + + PS122/2_21-109 + + + + + + + + + + + + + + PS122/2_21-11 + + + + + + + + + + + + + + PS122/2_21-112 + + + + + + + + + + + + + + PS122/2_21-113 + + + + + + + + + + + + + + PS122/2_21-114 + + + + + + + + + + + + + + PS122/2_21-115 + + + + + + + + + + + + + + PS122/2_21-116 + + + + + + + + + + + + + + PS122/2_21-117 + + + + + + + + + + + + + + PS122/2_21-118 + + + + + + + + + + + + + + PS122/2_21-119 + + + + + + + + + + + + + + PS122/2_21-12 + + + + + + + + + + + + + + PS122/2_21-120 + + + + + + + + + + + + + + PS122/2_21-121 + + + + + + + + + + + + + + PS122/2_21-122 + + + + + + + + + + + + + + PS122/2_21-123 + + + + + + + + + + + + + + PS122/2_21-124 + + + + + + + + + + + + + + PS122/2_21-125 + + + + + + + + + + + + + + PS122/2_21-126 + + + + + + + + + + + + + + PS122/2_21-127 + + + + + + + + + + + + + + PS122/2_21-128 + + + + + + + + + + + + + + PS122/2_21-129 + + + + + + + + + + + + + + PS122/2_21-13 + + + + + + + + + + + + + + PS122/2_21-130 + + + + + + + + + + + + + + PS122/2_21-131 + + + + + + + + + + + + + + PS122/2_21-132 + + + + + + + + + + + + + + PS122/2_21-133 + + + + + + + + + + + + + + PS122/2_21-134 + + + + + + + + + + + + + + PS122/2_21-135 + + + + + + + + + + + + + + PS122/2_21-136 + + + + + + + + + + + + + + PS122/2_21-137 + + + + + + + + + + + + + + PS122/2_21-138 + + + + + + + + + + + + + + PS122/2_21-139 + + + + + + + + + + + + + + PS122/2_21-14 + + + + + + + + + + + + + + PS122/2_21-140 + + + + + + + + + + + + + + PS122/2_21-141 + + + + + + + + + + + + + + PS122/2_21-142 + + + + + + + + + + + + + + PS122/2_21-143 + + + + + + + + + + + + + + PS122/2_21-144 + + + + + + + + + + + + + + PS122/2_21-145 + + + + + + + + + + + + + + PS122/2_21-146 + + + + + + + + + + + + + + PS122/2_21-147 + + + + + + + + + + + + + + PS122/2_21-148 + + + + + + + + + + + + + + PS122/2_21-149 + + + + + + + + + + + + + + PS122/2_21-15 + + + + + + + + + + + + + + PS122/2_21-150 + + + + + + + + + + + + + + PS122/2_21-151 + + + + + + + + + + + + + + PS122/2_21-152 + + + + + + + + + + + + + + PS122/2_21-153 + + + + + + + + + + + + + + PS122/2_21-154 + + + + + + + + + + + + + + PS122/2_21-155 + + + + + + + + + + + + + + PS122/2_21-156 + + + + + + + + + + + + + + PS122/2_21-157 + + + + + + + + + + + + + + PS122/2_21-158 + + + + + + + + + + + + + + PS122/2_21-159 + + + + + + + + + + + + + + PS122/2_21-16 + + + + + + + + + + + + + + PS122/2_21-160 + + + + + + + + + + + + + + PS122/2_21-161 + + + + + + + + + + + + + + PS122/2_21-162 + + + + + + + + + + + + + + PS122/2_21-163 + + + + + + + + + + + + + + PS122/2_21-164 + + + + + + + + + + + + + + PS122/2_21-165 + + + + + + + + + + + + + + PS122/2_21-166 + + + + + + + + + + + + + + PS122/2_21-167 + + + + + + + + + + + + + + PS122/2_21-168 + + + + + + + + + + + + + + PS122/2_21-169 + + + + + + + + + + + + + + PS122/2_21-17 + + + + + + + + + + + + + + PS122/2_21-170 + + + + + + + + + + + + + + PS122/2_21-172 + + + + + + + + + + + + + + PS122/2_21-173 + + + + + + + + + + + + + + PS122/2_21-18 + + + + + + + + + + + + + + PS122/2_21-19 + + + + + + + + + + + + + + PS122/2_21-2 + + + + + + + + + + + + + + PS122/2_21-21 + + + + + + + + + + + + + + PS122/2_21-22 + + + + + + + + + + + + + + PS122/2_21-23 + + + + + + + + + + + + + + PS122/2_21-24 + + + + + + + + + + + + + + PS122/2_21-25 + + + + + + + + + + + + + + PS122/2_21-26 + + + + + + + + + + + + + + PS122/2_21-27 + + + + + + + + + + + + + + PS122/2_21-34 + + + + + + + + + + + + + + PS122/2_21-35 + + + + + + + + + + + + + + PS122/2_21-36 + + + + + + + + + + + + + + PS122/2_21-37 + + + + + + + + + + + + + + PS122/2_21-38 + + + + + + + + + + + + + + PS122/2_21-39 + + + + + + + + + + + + + + PS122/2_21-4 + + + + + + + + + + + + + + PS122/2_21-40 + + + + + + + + + + + + + + PS122/2_21-41 + + + + + + + + + + + + + + PS122/2_21-42 + + + + + + + + + + + + + + PS122/2_21-43 + + + + + + + + + + + + + + PS122/2_21-44 + + + + + + + + + + + + + + PS122/2_21-45 + + + + + + + + + + + + + + PS122/2_21-46 + + + + + + + + + + + + + + PS122/2_21-49 + + + + + + + + + + + + + + PS122/2_21-50 + + + + + + + + + + + + + + PS122/2_21-51 + + + + + + + + + + + + + + PS122/2_21-52 + + + + + + + + + + + + + + PS122/2_21-53 + + + + + + + + + + + + + + PS122/2_21-54 + + + + + + + + + + + + + + PS122/2_21-55 + + + + + + + + + + + + + + PS122/2_21-56 + + + + + + + + + + + + + + PS122/2_21-57 + + + + + + + + + + + + + + PS122/2_21-58 + + + + + + + + + + + + + + PS122/2_21-59 + + + + + + + + + + + + + + PS122/2_21-60 + + + + + + + + + + + + + + PS122/2_21-61 + + + + + + + + + + + + + + PS122/2_21-62 + + + + + + + + + + + + + + PS122/2_21-64 + + + + + + + + + + + + + + PS122/2_21-65 + + + + + + + + + + + + + + PS122/2_21-66 + + + + + + + + + + + + + + PS122/2_21-67 + + + + + + + + + + + + + + PS122/2_21-68 + + + + + + + + + + + + + + PS122/2_21-69 + + + + + + + + + + + + + + PS122/2_21-70 + + + + + + + + + + + + + + PS122/2_21-71 + + + + + + + + + + + + + + PS122/2_21-72 + + + + + + + + + + + + + + PS122/2_21-73 + + + + + + + + + + + + + + PS122/2_21-74 + + + + + + + + + + + + + + PS122/2_21-75 + + + + + + + + + + + + + + PS122/2_21-76 + + + + + + + + + + + + + + PS122/2_21-77 + + + + + + + + + + + + + + PS122/2_21-78 + + + + + + + + + + + + + + PS122/2_21-79 + + + + + + + + + + + + + + PS122/2_21-80 + + + + + + + + + + + + + + PS122/2_21-81 + + + + + + + + + + + + + + PS122/2_21-82 + + + + + + + + + + + + + + PS122/2_21-83 + + + + + + + + + + + + + + PS122/2_21-84 + + + + + + + + + + + + + + PS122/2_21-85 + + + + + + + + + + + + + + PS122/2_21-86 + + + + + + + + + + + + + + PS122/2_21-88 + + + + + + + + + + + + + + PS122/2_21-90 + + + + + + + + + + + + + + PS122/2_21-92 + + + + + + + + + + + + + + PS122/2_21-96 + + + + + + + + + + + + + + PS122/2_21-97 + + + + + + + + + + + + + + PS122/2_22-10 + + + + + + + + + + + + + + PS122/2_22-100 + + + + + + + + + + + + + + PS122/2_22-101 + + + + + + + + + + + + + + PS122/2_22-102 + + + + + + + + + + + + + + PS122/2_22-103 + + + + + + + + + + + + + + PS122/2_22-104 + + + + + + + + + + + + + + PS122/2_22-105 + + + + + + + + + + + + + + PS122/2_22-107 + + + + + + + + + + + + + + PS122/2_22-11 + + + + + + + + + + + + + + PS122/2_22-110 + + + + + + + + + + + + + + PS122/2_22-111 + + + + + + + + + + + + + + PS122/2_22-112 + + + + + + + + + + + + + + PS122/2_22-113 + + + + + + + + + + + + + + PS122/2_22-114 + + + + + + + + + + + + + + PS122/2_22-116 + + + + + + + + + + + + + + PS122/2_22-117 + + + + + + + + + + + + + + PS122/2_22-118 + + + + + + + + + + + + + + PS122/2_22-120 + + + + + + + + + + + + + + PS122/2_22-121 + + + + + + + + + + + + + + PS122/2_22-122 + + + + + + + + + + + + + + PS122/2_22-124 + + + + + + + + + + + + + + PS122/2_22-125 + + + + + + + + + + + + + + PS122/2_22-126 + + + + + + + + + + + + + + PS122/2_22-127 + + + + + + + + + + + + + + PS122/2_22-128 + + + + + + + + + + + + + + PS122/2_22-129 + + + + + + + + + + + + + + PS122/2_22-13 + + + + + + + + + + + + + + PS122/2_22-131 + + + + + + + + + + + + + + PS122/2_22-132 + + + + + + + + + + + + + + PS122/2_22-133 + + + + + + + + + + + + + + PS122/2_22-14 + + + + + + + + + + + + + + PS122/2_22-16 + + + + + + + + + + + + + + PS122/2_22-17 + + + + + + + + + + + + + + PS122/2_22-18 + + + + + + + + + + + + + + PS122/2_22-19 + + + + + + + + + + + + + + PS122/2_22-2 + + + + + + + + + + + + + + PS122/2_22-20 + + + + + + + + + + + + + + PS122/2_22-21 + + + + + + + + + + + + + + PS122/2_22-22 + + + + + + + + + + + + + + PS122/2_22-23 + + + + + + + + + + + + + + PS122/2_22-24 + + + + + + + + + + + + + + PS122/2_22-25 + + + + + + + + + + + + + + PS122/2_22-28 + + + + + + + + + + + + + + PS122/2_22-29 + + + + + + + + + + + + + + PS122/2_22-3 + + + + + + + + + + + + + + PS122/2_22-31 + + + + + + + + + + + + + + PS122/2_22-32 + + + + + + + + + + + + + + PS122/2_22-33 + + + + + + + + + + + + + + PS122/2_22-34 + + + + + + + + + + + + + + PS122/2_22-35 + + + + + + + + + + + + + + PS122/2_22-37 + + + + + + + + + + + + + + PS122/2_22-38 + + + + + + + + + + + + + + PS122/2_22-39 + + + + + + + + + + + + + + PS122/2_22-4 + + + + + + + + + + + + + + PS122/2_22-40 + + + + + + + + + + + + + + PS122/2_22-41 + + + + + + + + + + + + + + PS122/2_22-42 + + + + + + + + + + + + + + PS122/2_22-43 + + + + + + + + + + + + + + PS122/2_22-44 + + + + + + + + + + + + + + PS122/2_22-45 + + + + + + + + + + + + + + PS122/2_22-46 + + + + + + + + + + + + + + PS122/2_22-47 + + + + + + + + + + + + + + PS122/2_22-49 + + + + + + + + + + + + + + PS122/2_22-5 + + + + + + + + + + + + + + PS122/2_22-50 + + + + + + + + + + + + + + PS122/2_22-51 + + + + + + + + + + + + + + PS122/2_22-53 + + + + + + + + + + + + + + PS122/2_22-54 + + + + + + + + + + + + + + PS122/2_22-55 + + + + + + + + + + + + + + PS122/2_22-56 + + + + + + + + + + + + + + PS122/2_22-57 + + + + + + + + + + + + + + PS122/2_22-58 + + + + + + + + + + + + + + PS122/2_22-59 + + + + + + + + + + + + + + PS122/2_22-6 + + + + + + + + + + + + + + PS122/2_22-60 + + + + + + + + + + + + + + PS122/2_22-61 + + + + + + + + + + + + + + PS122/2_22-62 + + + + + + + + + + + + + + PS122/2_22-63 + + + + + + + + + + + + + + PS122/2_22-64 + + + + + + + + + + + + + + PS122/2_22-65 + + + + + + + + + + + + + + PS122/2_22-66 + + + + + + + + + + + + + + PS122/2_22-67 + + + + + + + + + + + + + + PS122/2_22-68 + + + + + + + + + + + + + + PS122/2_22-69 + + + + + + + + + + + + + + PS122/2_22-7 + + + + + + + + + + + + + + PS122/2_22-70 + + + + + + + + + + + + + + PS122/2_22-71 + + + + + + + + + + + + + + PS122/2_22-72 + + + + + + + + + + + + + + PS122/2_22-73 + + + + + + + + + + + + + + PS122/2_22-74 + + + + + + + + + + + + + + PS122/2_22-75 + + + + + + + + + + + + + + PS122/2_22-76 + + + + + + + + + + + + + + PS122/2_22-77 + + + + + + + + + + + + + + PS122/2_22-78 + + + + + + + + + + + + + + PS122/2_22-79 + + + + + + + + + + + + + + PS122/2_22-8 + + + + + + + + + + + + + + PS122/2_22-80 + + + + + + + + + + + + + + PS122/2_22-81 + + + + + + + + + + + + + + PS122/2_22-82 + + + + + + + + + + + + + + PS122/2_22-84 + + + + + + + + + + + + + + PS122/2_22-85 + + + + + + + + + + + + + + PS122/2_22-86 + + + + + + + + + + + + + + PS122/2_22-87 + + + + + + + + + + + + + + PS122/2_22-88 + + + + + + + + + + + + + + PS122/2_22-89 + + + + + + + + + + + + + + PS122/2_22-9 + + + + + + + + + + + + + + PS122/2_22-90 + + + + + + + + + + + + + + PS122/2_22-91 + + + + + + + + + + + + + + PS122/2_22-92 + + + + + + + + + + + + + + PS122/2_22-93 + + + + + + + + + + + + + + PS122/2_22-94 + + + + + + + + + + + + + + PS122/2_22-95 + + + + + + + + + + + + + + PS122/2_22-96 + + + + + + + + + + + + + + PS122/2_22-97 + + + + + + + + + + + + + + PS122/2_22-98 + + + + + + + + + + + + + + PS122/2_22-99 + + + + + + + + + + + + + + PS122/2_23-1 + + + + + + + + + + + + + + PS122/2_23-10 + + + + + + + + + + + + + + PS122/2_23-100 + + + + + + + + + + + + + + PS122/2_23-101 + + + + + + + + + + + + + + PS122/2_23-102 + + + + + + + + + + + + + + PS122/2_23-103 + + + + + + + + + + + + + + PS122/2_23-104 + + + + + + + + + + + + + + PS122/2_23-105 + + + + + + + + + + + + + + PS122/2_23-106 + + + + + + + + + + + + + + PS122/2_23-107 + + + + + + + + + + + + + + PS122/2_23-109 + + + + + + + + + + + + + + PS122/2_23-11 + + + + + + + + + + + + + + PS122/2_23-110 + + + + + + + + + + + + + + PS122/2_23-111 + + + + + + + + + + + + + + PS122/2_23-112 + + + + + + + + + + + + + + PS122/2_23-113 + + + + + + + + + + + + + + PS122/2_23-114 + + + + + + + + + + + + + + PS122/2_23-115 + + + + + + + + + + + + + + PS122/2_23-116 + + + + + + + + + + + + + + PS122/2_23-117 + + + + + + + + + + + + + + PS122/2_23-118 + + + + + + + + + + + + + + PS122/2_23-119 + + + + + + + + + + + + + + PS122/2_23-12 + + + + + + + + + + + + + + PS122/2_23-120 + + + + + + + + + + + + + + PS122/2_23-121 + + + + + + + + + + + + + + PS122/2_23-122 + + + + + + + + + + + + + + PS122/2_23-123 + + + + + + + + + + + + + + PS122/2_23-125 + + + + + + + + + + + + + + PS122/2_23-126 + + + + + + + + + + + + + + PS122/2_23-127 + + + + + + + + + + + + + + PS122/2_23-128 + + + + + + + + + + + + + + PS122/2_23-129 + + + + + + + + + + + + + + PS122/2_23-13 + + + + + + + + + + + + + + PS122/2_23-130 + + + + + + + + + + + + + + PS122/2_23-131 + + + + + + + + + + + + + + PS122/2_23-132 + + + + + + + + + + + + + + PS122/2_23-133 + + + + + + + + + + + + + + PS122/2_23-134 + + + + + + + + + + + + + + PS122/2_23-135 + + + + + + + + + + + + + + PS122/2_23-136 + + + + + + + + + + + + + + PS122/2_23-137 + + + + + + + + + + + + + + PS122/2_23-138 + + + + + + + + + + + + + + PS122/2_23-139 + + + + + + + + + + + + + + PS122/2_23-14 + + + + + + + + + + + + + + PS122/2_23-142 + + + + + + + + + + + + + + PS122/2_23-143 + + + + + + + + + + + + + + PS122/2_23-144 + + + + + + + + + + + + + + PS122/2_23-145 + + + + + + + + + + + + + + PS122/2_23-146 + + + + + + + + + + + + + + PS122/2_23-147 + + + + + + + + + + + + + + PS122/2_23-148 + + + + + + + + + + + + + + PS122/2_23-149 + + + + + + + + + + + + + + PS122/2_23-15 + + + + + + + + + + + + + + PS122/2_23-150 + + + + + + + + + + + + + + PS122/2_23-151 + + + + + + + + + + + + + + PS122/2_23-152 + + + + + + + + + + + + + + PS122/2_23-153 + + + + + + + + + + + + + + PS122/2_23-154 + + + + + + + + + + + + + + PS122/2_23-16 + + + + + + + + + + + + + + PS122/2_23-17 + + + + + + + + + + + + + + PS122/2_23-18 + + + + + + + + + + + + + + PS122/2_23-19 + + + + + + + + + + + + + + PS122/2_23-2 + + + + + + + + + + + + + + PS122/2_23-20 + + + + + + + + + + + + + + PS122/2_23-21 + + + + + + + + + + + + + + PS122/2_23-22 + + + + + + + + + + + + + + PS122/2_23-23 + + + + + + + + + + + + + + PS122/2_23-24 + + + + + + + + + + + + + + PS122/2_23-25 + + + + + + + + + + + + + + PS122/2_23-27 + + + + + + + + + + + + + + PS122/2_23-28 + + + + + + + + + + + + + + PS122/2_23-29 + + + + + + + + + + + + + + PS122/2_23-3 + + + + + + + + + + + + + + PS122/2_23-30 + + + + + + + + + + + + + + PS122/2_23-31 + + + + + + + + + + + + + + PS122/2_23-32 + + + + + + + + + + + + + + PS122/2_23-33 + + + + + + + + + + + + + + PS122/2_23-34 + + + + + + + + + + + + + + PS122/2_23-36 + + + + + + + + + + + + + + PS122/2_23-37 + + + + + + + + + + + + + + PS122/2_23-38 + + + + + + + + + + + + + + PS122/2_23-4 + + + + + + + + + + + + + + PS122/2_23-40 + + + + + + + + + + + + + + PS122/2_23-41 + + + + + + + + + + + + + + PS122/2_23-42 + + + + + + + + + + + + + + PS122/2_23-43 + + + + + + + + + + + + + + PS122/2_23-44 + + + + + + + + + + + + + + PS122/2_23-45 + + + + + + + + + + + + + + PS122/2_23-46 + + + + + + + + + + + + + + PS122/2_23-47 + + + + + + + + + + + + + + PS122/2_23-48 + + + + + + + + + + + + + + PS122/2_23-49 + + + + + + + + + + + + + + PS122/2_23-5 + + + + + + + + + + + + + + PS122/2_23-50 + + + + + + + + + + + + + + PS122/2_23-51 + + + + + + + + + + + + + + PS122/2_23-53 + + + + + + + + + + + + + + PS122/2_23-54 + + + + + + + + + + + + + + PS122/2_23-55 + + + + + + + + + + + + + + PS122/2_23-56 + + + + + + + + + + + + + + PS122/2_23-57 + + + + + + + + + + + + + + PS122/2_23-58 + + + + + + + + + + + + + + PS122/2_23-59 + + + + + + + + + + + + + + PS122/2_23-6 + + + + + + + + + + + + + + PS122/2_23-60 + + + + + + + + + + + + + + PS122/2_23-61 + + + + + + + + + + + + + + PS122/2_23-62 + + + + + + + + + + + + + + PS122/2_23-63 + + + + + + + + + + + + + + PS122/2_23-64 + + + + + + + + + + + + + + PS122/2_23-65 + + + + + + + + + + + + + + PS122/2_23-66 + + + + + + + + + + + + + + PS122/2_23-68 + + + + + + + + + + + + + + PS122/2_23-69 + + + + + + + + + + + + + + PS122/2_23-7 + + + + + + + + + + + + + + PS122/2_23-70 + + + + + + + + + + + + + + PS122/2_23-71 + + + + + + + + + + + + + + PS122/2_23-72 + + + + + + + + + + + + + + PS122/2_23-73 + + + + + + + + + + + + + + PS122/2_23-74 + + + + + + + + + + + + + + PS122/2_23-75 + + + + + + + + + + + + + + PS122/2_23-76 + + + + + + + + + + + + + + PS122/2_23-77 + + + + + + + + + + + + + + PS122/2_23-78 + + + + + + + + + + + + + + PS122/2_23-79 + + + + + + + + + + + + + + PS122/2_23-8 + + + + + + + + + + + + + + PS122/2_23-80 + + + + + + + + + + + + + + PS122/2_23-81 + + + + + + + + + + + + + + PS122/2_23-82 + + + + + + + + + + + + + + PS122/2_23-83 + + + + + + + + + + + + + + PS122/2_23-84 + + + + + + + + + + + + + + PS122/2_23-85 + + + + + + + + + + + + + + PS122/2_23-86 + + + + + + + + + + + + + + PS122/2_23-87 + + + + + + + + + + + + + + PS122/2_23-89 + + + + + + + + + + + + + + PS122/2_23-9 + + + + + + + + + + + + + + PS122/2_23-90 + + + + + + + + + + + + + + PS122/2_23-91 + + + + + + + + + + + + + + PS122/2_23-92 + + + + + + + + + + + + + + PS122/2_23-93 + + + + + + + + + + + + + + PS122/2_23-94 + + + + + + + + + + + + + + PS122/2_23-95 + + + + + + + + + + + + + + PS122/2_23-96 + + + + + + + + + + + + + + PS122/2_23-97 + + + + + + + + + + + + + + PS122/2_23-98 + + + + + + + + + + + + + + PS122/2_23-99 + + + + + + + + + + + + + + PS122/2_24-10 + + + + + + + + + + + + + + PS122/2_24-100 + + + + + + + + + + + + + + PS122/2_24-101 + + + + + + + + + + + + + + PS122/2_24-102 + + + + + + + + + + + + + + PS122/2_24-103 + + + + + + + + + + + + + + PS122/2_24-104 + + + + + + + + + + + + + + PS122/2_24-105 + + + + + + + + + + + + + + PS122/2_24-106 + + + + + + + + + + + + + + PS122/2_24-107 + + + + + + + + + + + + + + PS122/2_24-11 + + + + + + + + + + + + + + PS122/2_24-112 + + + + + + + + + + + + + + PS122/2_24-113 + + + + + + + + + + + + + + PS122/2_24-114 + + + + + + + + + + + + + + PS122/2_24-116 + + + + + + + + + + + + + + PS122/2_24-117 + + + + + + + + + + + + + + PS122/2_24-118 + + + + + + + + + + + + + + PS122/2_24-119 + + + + + + + + + + + + + + PS122/2_24-12 + + + + + + + + + + + + + + PS122/2_24-120 + + + + + + + + + + + + + + PS122/2_24-121 + + + + + + + + + + + + + + PS122/2_24-122 + + + + + + + + + + + + + + PS122/2_24-13 + + + + + + + + + + + + + + PS122/2_24-14 + + + + + + + + + + + + + + PS122/2_24-15 + + + + + + + + + + + + + + PS122/2_24-16 + + + + + + + + + + + + + + PS122/2_24-17 + + + + + + + + + + + + + + PS122/2_24-18 + + + + + + + + + + + + + + PS122/2_24-19 + + + + + + + + + + + + + + PS122/2_24-2 + + + + + + + + + + + + + + PS122/2_24-20 + + + + + + + + + + + + + + PS122/2_24-21 + + + + + + + + + + + + + + PS122/2_24-22 + + + + + + + + + + + + + + PS122/2_24-23 + + + + + + + + + + + + + + PS122/2_24-24 + + + + + + + + + + + + + + PS122/2_24-25 + + + + + + + + + + + + + + PS122/2_24-26 + + + + + + + + + + + + + + PS122/2_24-27 + + + + + + + + + + + + + + PS122/2_24-28 + + + + + + + + + + + + + + PS122/2_24-29 + + + + + + + + + + + + + + PS122/2_24-3 + + + + + + + + + + + + + + PS122/2_24-30 + + + + + + + + + + + + + + PS122/2_24-31 + + + + + + + + + + + + + + PS122/2_24-32 + + + + + + + + + + + + + + PS122/2_24-34 + + + + + + + + + + + + + + PS122/2_24-35 + + + + + + + + + + + + + + PS122/2_24-36 + + + + + + + + + + + + + + PS122/2_24-37 + + + + + + + + + + + + + + PS122/2_24-38 + + + + + + + + + + + + + + PS122/2_24-39 + + + + + + + + + + + + + + PS122/2_24-4 + + + + + + + + + + + + + + PS122/2_24-40 + + + + + + + + + + + + + + PS122/2_24-41 + + + + + + + + + + + + + + PS122/2_24-42 + + + + + + + + + + + + + + PS122/2_24-43 + + + + + + + + + + + + + + PS122/2_24-44 + + + + + + + + + + + + + + PS122/2_24-45 + + + + + + + + + + + + + + PS122/2_24-46 + + + + + + + + + + + + + + PS122/2_24-47 + + + + + + + + + + + + + + PS122/2_24-48 + + + + + + + + + + + + + + PS122/2_24-49 + + + + + + + + + + + + + + PS122/2_24-5 + + + + + + + + + + + + + + PS122/2_24-56 + + + + + + + + + + + + + + PS122/2_24-57 + + + + + + + + + + + + + + PS122/2_24-58 + + + + + + + + + + + + + + PS122/2_24-6 + + + + + + + + + + + + + + PS122/2_24-63 + + + + + + + + + + + + + + PS122/2_24-64 + + + + + + + + + + + + + + PS122/2_24-65 + + + + + + + + + + + + + + PS122/2_24-66 + + + + + + + + + + + + + + PS122/2_24-67 + + + + + + + + + + + + + + PS122/2_24-68 + + + + + + + + + + + + + + PS122/2_24-69 + + + + + + + + + + + + + + PS122/2_24-70 + + + + + + + + + + + + + + PS122/2_24-71 + + + + + + + + + + + + + + PS122/2_24-72 + + + + + + + + + + + + + + PS122/2_24-73 + + + + + + + + + + + + + + PS122/2_24-74 + + + + + + + + + + + + + + PS122/2_24-75 + + + + + + + + + + + + + + PS122/2_24-76 + + + + + + + + + + + + + + PS122/2_24-77 + + + + + + + + + + + + + + PS122/2_24-78 + + + + + + + + + + + + + + PS122/2_24-79 + + + + + + + + + + + + + + PS122/2_24-8 + + + + + + + + + + + + + + PS122/2_24-80 + + + + + + + + + + + + + + PS122/2_24-81 + + + + + + + + + + + + + + PS122/2_24-82 + + + + + + + + + + + + + + PS122/2_24-83 + + + + + + + + + + + + + + PS122/2_24-84 + + + + + + + + + + + + + + PS122/2_24-85 + + + + + + + + + + + + + + PS122/2_24-86 + + + + + + + + + + + + + + PS122/2_24-88 + + + + + + + + + + + + + + PS122/2_24-9 + + + + + + + + + + + + + + PS122/2_24-90 + + + + + + + + + + + + + + PS122/2_24-91 + + + + + + + + + + + + + + PS122/2_24-92 + + + + + + + + + + + + + + PS122/2_24-97 + + + + + + + + + + + + + + PS122/2_24-98 + + + + + + + + + + + + + + PS122/2_24-99 + + + + + + + + + + + + + + PS122/2_25-100 + + + + + + + + + + + + + + PS122/2_25-101 + + + + + + + + + + + + + + PS122/2_25-102 + + + + + + + + + + + + + + PS122/2_25-103 + + + + + + + + + + + + + + PS122/2_25-104 + + + + + + + + + + + + + + PS122/2_25-105 + + + + + + + + + + + + + + PS122/2_25-106 + + + + + + + + + + + + + + PS122/2_25-107 + + + + + + + + + + + + + + PS122/2_25-108 + + + + + + + + + + + + + + PS122/2_25-109 + + + + + + + + + + + + + + PS122/2_25-110 + + + + + + + + + + + + + + PS122/2_25-111 + + + + + + + + + + + + + + PS122/2_25-112 + + + + + + + + + + + + + + PS122/2_25-113 + + + + + + + + + + + + + + PS122/2_25-114 + + + + + + + + + + + + + + PS122/2_25-115 + + + + + + + + + + + + + + PS122/2_25-116 + + + + + + + + + + + + + + PS122/2_25-117 + + + + + + + + + + + + + + PS122/2_25-118 + + + + + + + + + + + + + + PS122/2_25-119 + + + + + + + + + + + + + + PS122/2_25-120 + + + + + + + + + + + + + + PS122/2_25-121 + + + + + + + + + + + + + + PS122/2_25-122 + + + + + + + + + + + + + + PS122/2_25-123 + + + + + + + + + + + + + + PS122/2_25-124 + + + + + + + + + + + + + + PS122/2_25-125 + + + + + + + + + + + + + + PS122/2_25-126 + + + + + + + + + + + + + + PS122/2_25-127 + + + + + + + + + + + + + + PS122/2_25-128 + + + + + + + + + + + + + + PS122/2_25-129 + + + + + + + + + + + + + + PS122/2_25-13 + + + + + + + + + + + + + + PS122/2_25-130 + + + + + + + + + + + + + + PS122/2_25-14 + + + + + + + + + + + + + + PS122/2_25-15 + + + + + + + + + + + + + + PS122/2_25-16 + + + + + + + + + + + + + + PS122/2_25-17 + + + + + + + + + + + + + + PS122/2_25-18 + + + + + + + + + + + + + + PS122/2_25-19 + + + + + + + + + + + + + + PS122/2_25-2 + + + + + + + + + + + + + + PS122/2_25-20 + + + + + + + + + + + + + + PS122/2_25-21 + + + + + + + + + + + + + + PS122/2_25-22 + + + + + + + + + + + + + + PS122/2_25-23 + + + + + + + + + + + + + + PS122/2_25-24 + + + + + + + + + + + + + + PS122/2_25-25 + + + + + + + + + + + + + + PS122/2_25-26 + + + + + + + + + + + + + + PS122/2_25-28 + + + + + + + + + + + + + + PS122/2_25-29 + + + + + + + + + + + + + + PS122/2_25-3 + + + + + + + + + + + + + + PS122/2_25-30 + + + + + + + + + + + + + + PS122/2_25-31 + + + + + + + + + + + + + + PS122/2_25-32 + + + + + + + + + + + + + + PS122/2_25-33 + + + + + + + + + + + + + + PS122/2_25-34 + + + + + + + + + + + + + + PS122/2_25-35 + + + + + + + + + + + + + + PS122/2_25-36 + + + + + + + + + + + + + + PS122/2_25-37 + + + + + + + + + + + + + + PS122/2_25-38 + + + + + + + + + + + + + + PS122/2_25-39 + + + + + + + + + + + + + + PS122/2_25-4 + + + + + + + + + + + + + + PS122/2_25-40 + + + + + + + + + + + + + + PS122/2_25-41 + + + + + + + + + + + + + + PS122/2_25-42 + + + + + + + + + + + + + + PS122/2_25-43 + + + + + + + + + + + + + + PS122/2_25-44 + + + + + + + + + + + + + + PS122/2_25-45 + + + + + + + + + + + + + + PS122/2_25-47 + + + + + + + + + + + + + + PS122/2_25-48 + + + + + + + + + + + + + + PS122/2_25-49 + + + + + + + + + + + + + + PS122/2_25-5 + + + + + + + + + + + + + + PS122/2_25-50 + + + + + + + + + + + + + + PS122/2_25-51 + + + + + + + + + + + + + + PS122/2_25-52 + + + + + + + + + + + + + + PS122/2_25-53 + + + + + + + + + + + + + + PS122/2_25-54 + + + + + + + + + + + + + + PS122/2_25-55 + + + + + + + + + + + + + + PS122/2_25-56 + + + + + + + + + + + + + + PS122/2_25-57 + + + + + + + + + + + + + + PS122/2_25-58 + + + + + + + + + + + + + + PS122/2_25-59 + + + + + + + + + + + + + + PS122/2_25-6 + + + + + + + + + + + + + + PS122/2_25-60 + + + + + + + + + + + + + + PS122/2_25-61 + + + + + + + + + + + + + + PS122/2_25-62 + + + + + + + + + + + + + + PS122/2_25-63 + + + + + + + + + + + + + + PS122/2_25-64 + + + + + + + + + + + + + + PS122/2_25-65 + + + + + + + + + + + + + + PS122/2_25-66 + + + + + + + + + + + + + + PS122/2_25-67 + + + + + + + + + + + + + + PS122/2_25-68 + + + + + + + + + + + + + + PS122/2_25-69 + + + + + + + + + + + + + + PS122/2_25-7 + + + + + + + + + + + + + + PS122/2_25-70 + + + + + + + + + + + + + + PS122/2_25-71 + + + + + + + + + + + + + + PS122/2_25-72 + + + + + + + + + + + + + + PS122/2_25-73 + + + + + + + + + + + + + + PS122/2_25-74 + + + + + + + + + + + + + + PS122/2_25-75 + + + + + + + + + + + + + + PS122/2_25-76 + + + + + + + + + + + + + + PS122/2_25-77 + + + + + + + + + + + + + + PS122/2_25-78 + + + + + + + + + + + + + + PS122/2_25-79 + + + + + + + + + + + + + + PS122/2_25-8 + + + + + + + + + + + + + + PS122/2_25-80 + + + + + + + + + + + + + + PS122/2_25-81 + + + + + + + + + + + + + + PS122/2_25-82 + + + + + + + + + + + + + + PS122/2_25-83 + + + + + + + + + + + + + + PS122/2_25-84 + + + + + + + + + + + + + + PS122/2_25-85 + + + + + + + + + + + + + + PS122/2_25-86 + + + + + + + + + + + + + + PS122/2_25-87 + + + + + + + + + + + + + + PS122/2_25-88 + + + + + + + + + + + + + + PS122/2_25-89 + + + + + + + + + + + + + + PS122/2_25-9 + + + + + + + + + + + + + + PS122/2_25-90 + + + + + + + + + + + + + + PS122/2_25-91 + + + + + + + + + + + + + + PS122/2_25-92 + + + + + + + + + + + + + + PS122/2_25-93 + + + + + + + + + + + + + + PS122/2_25-94 + + + + + + + + + + + + + + PS122/2_25-95 + + + + + + + + + + + + + + PS122/2_25-96 + + + + + + + + + + + + + + PS122/2_25-97 + + + + + + + + + + + + + + PS122/2_25-98 + + + + + + + + + + + + + + PS122/2_25-99 + + + + + + + + + + + + + + PS122/2_26-2 + + + + + + + + + + + + + + PS122/2_26-3 + + + + + + + + + + + + + + PS122/3_0_Underway-11 + + + + + + + + + + + + + + PS122/3_0_Underway-17 + + + + + + + + + + + + + + PS122/3_0_Underway-20 + + + + + + + + + + + + + + PS122/3_0_Underway-21 + + + + + + + + + + + + + + PS122/3_0_Underway-28 + + + + + + + + + + + + + + PS122/3_0_Underway-29 + + + + + + + + + + + + + + PS122/3_0_Underway-3 + + + + + + + + + + + + + + PS122/3_0_Underway-34 + + + + + + + + + + + + + + PS122/3_0_Underway-35 + + + + + + + + + + + + + + PS122/3_0_Underway-36 + + + + + + + + + + + + + + PS122/3_0_Underway-42 + + + + + + + + + + + + + + PS122/3_28-10 + + + + + + + + + + + + + + PS122/3_28-100 + + + + + + + + + + + + + + PS122/3_28-101 + + + + + + + + + + + + + + PS122/3_28-102 + + + + + + + + + + + + + + PS122/3_28-103 + + + + + + + + + + + + + + PS122/3_28-104 + + + + + + + + + + + + + + PS122/3_28-107 + + + + + + + + + + + + + + PS122/3_28-108 + + + + + + + + + + + + + + PS122/3_28-109 + + + + + + + + + + + + + + PS122/3_28-11 + + + + + + + + + + + + + + PS122/3_28-110 + + + + + + + + + + + + + + PS122/3_28-111 + + + + + + + + + + + + + + PS122/3_28-112 + + + + + + + + + + + + + + PS122/3_28-113 + + + + + + + + + + + + + + PS122/3_28-114 + + + + + + + + + + + + + + PS122/3_28-115 + + + + + + + + + + + + + + PS122/3_28-116 + + + + + + + + + + + + + + PS122/3_28-118 + + + + + + + + + + + + + + PS122/3_28-119 + + + + + + + + + + + + + + PS122/3_28-12 + + + + + + + + + + + + + + PS122/3_28-120 + + + + + + + + + + + + + + PS122/3_28-121 + + + + + + + + + + + + + + PS122/3_28-122 + + + + + + + + + + + + + + PS122/3_28-123 + + + + + + + + + + + + + + PS122/3_28-124 + + + + + + + + + + + + + + PS122/3_28-125 + + + + + + + + + + + + + + PS122/3_28-126 + + + + + + + + + + + + + + PS122/3_28-127 + + + + + + + + + + + + + + PS122/3_28-128 + + + + + + + + + + + + + + PS122/3_28-129 + + + + + + + + + + + + + + PS122/3_28-13 + + + + + + + + + + + + + + PS122/3_28-130 + + + + + + + + + + + + + + PS122/3_28-131 + + + + + + + + + + + + + + PS122/3_28-132 + + + + + + + + + + + + + + PS122/3_28-135 + + + + + + + + + + + + + + PS122/3_28-137 + + + + + + + + + + + + + + PS122/3_28-138 + + + + + + + + + + + + + + PS122/3_28-139 + + + + + + + + + + + + + + PS122/3_28-14 + + + + + + + + + + + + + + PS122/3_28-141 + + + + + + + + + + + + + + PS122/3_28-142 + + + + + + + + + + + + + + PS122/3_28-143 + + + + + + + + + + + + + + PS122/3_28-144 + + + + + + + + + + + + + + PS122/3_28-145 + + + + + + + + + + + + + + PS122/3_28-146 + + + + + + + + + + + + + + PS122/3_28-147 + + + + + + + + + + + + + + PS122/3_28-148 + + + + + + + + + + + + + + PS122/3_28-149 + + + + + + + + + + + + + + PS122/3_28-15 + + + + + + + + + + + + + + PS122/3_28-150 + + + + + + + + + + + + + + PS122/3_28-151 + + + + + + + + + + + + + + PS122/3_28-152 + + + + + + + + + + + + + + PS122/3_28-153 + + + + + + + + + + + + + + PS122/3_28-154 + + + + + + + + + + + + + + PS122/3_28-155 + + + + + + + + + + + + + + PS122/3_28-156 + + + + + + + + + + + + + + PS122/3_28-157 + + + + + + + + + + + + + + PS122/3_28-16 + + + + + + + + + + + + + + PS122/3_28-160 + + + + + + + + + + + + + + PS122/3_28-161 + + + + + + + + + + + + + + PS122/3_28-162 + + + + + + + + + + + + + + PS122/3_28-17 + + + + + + + + + + + + + + PS122/3_28-18 + + + + + + + + + + + + + + PS122/3_28-19 + + + + + + + + + + + + + + PS122/3_28-2 + + + + + + + + + + + + + + PS122/3_28-20 + + + + + + + + + + + + + + PS122/3_28-21 + + + + + + + + + + + + + + PS122/3_28-22 + + + + + + + + + + + + + + PS122/3_28-23 + + + + + + + + + + + + + + PS122/3_28-24 + + + + + + + + + + + + + + PS122/3_28-25 + + + + + + + + + + + + + + PS122/3_28-26 + + + + + + + + + + + + + + PS122/3_28-27 + + + + + + + + + + + + + + PS122/3_28-28 + + + + + + + + + + + + + + PS122/3_28-29 + + + + + + + + + + + + + + PS122/3_28-3 + + + + + + + + + + + + + + PS122/3_28-30 + + + + + + + + + + + + + + PS122/3_28-31 + + + + + + + + + + + + + + PS122/3_28-32 + + + + + + + + + + + + + + PS122/3_28-33 + + + + + + + + + + + + + + PS122/3_28-34 + + + + + + + + + + + + + + PS122/3_28-35 + + + + + + + + + + + + + + PS122/3_28-36 + + + + + + + + + + + + + + PS122/3_28-37 + + + + + + + + + + + + + + PS122/3_28-38 + + + + + + + + + + + + + + PS122/3_28-39 + + + + + + + + + + + + + + PS122/3_28-4 + + + + + + + + + + + + + + PS122/3_28-40 + + + + + + + + + + + + + + PS122/3_28-41 + + + + + + + + + + + + + + PS122/3_28-42 + + + + + + + + + + + + + + PS122/3_28-43 + + + + + + + + + + + + + + PS122/3_28-44 + + + + + + + + + + + + + + PS122/3_28-45 + + + + + + + + + + + + + + PS122/3_28-46 + + + + + + + + + + + + + + PS122/3_28-47 + + + + + + + + + + + + + + PS122/3_28-48 + + + + + + + + + + + + + + PS122/3_28-49 + + + + + + + + + + + + + + PS122/3_28-5 + + + + + + + + + + + + + + PS122/3_28-51 + + + + + + + + + + + + + + PS122/3_28-52 + + + + + + + + + + + + + + PS122/3_28-53 + + + + + + + + + + + + + + PS122/3_28-55 + + + + + + + + + + + + + + PS122/3_28-56 + + + + + + + + + + + + + + PS122/3_28-57 + + + + + + + + + + + + + + PS122/3_28-58 + + + + + + + + + + + + + + PS122/3_28-59 + + + + + + + + + + + + + + PS122/3_28-6 + + + + + + + + + + + + + + PS122/3_28-60 + + + + + + + + + + + + + + PS122/3_28-61 + + + + + + + + + + + + + + PS122/3_28-62 + + + + + + + + + + + + + + PS122/3_28-63 + + + + + + + + + + + + + + PS122/3_28-64 + + + + + + + + + + + + + + PS122/3_28-65 + + + + + + + + + + + + + + PS122/3_28-66 + + + + + + + + + + + + + + PS122/3_28-67 + + + + + + + + + + + + + + PS122/3_28-68 + + + + + + + + + + + + + + PS122/3_28-69 + + + + + + + + + + + + + + PS122/3_28-7 + + + + + + + + + + + + + + PS122/3_28-70 + + + + + + + + + + + + + + PS122/3_28-71 + + + + + + + + + + + + + + PS122/3_28-72 + + + + + + + + + + + + + + PS122/3_28-73 + + + + + + + + + + + + + + PS122/3_28-74 + + + + + + + + + + + + + + PS122/3_28-75 + + + + + + + + + + + + + + PS122/3_28-76 + + + + + + + + + + + + + + PS122/3_28-78 + + + + + + + + + + + + + + PS122/3_28-79 + + + + + + + + + + + + + + PS122/3_28-8 + + + + + + + + + + + + + + PS122/3_28-80 + + + + + + + + + + + + + + PS122/3_28-82 + + + + + + + + + + + + + + PS122/3_28-83 + + + + + + + + + + + + + + PS122/3_28-84 + + + + + + + + + + + + + + PS122/3_28-85 + + + + + + + + + + + + + + PS122/3_28-9 + + + + + + + + + + + + + + PS122/3_28-90 + + + + + + + + + + + + + + PS122/3_28-91 + + + + + + + + + + + + + + PS122/3_28-92 + + + + + + + + + + + + + + PS122/3_28-93 + + + + + + + + + + + + + + PS122/3_28-94 + + + + + + + + + + + + + + PS122/3_28-95 + + + + + + + + + + + + + + PS122/3_28-96 + + + + + + + + + + + + + + PS122/3_28-97 + + + + + + + + + + + + + + PS122/3_28-98 + + + + + + + + + + + + + + PS122/3_28-99 + + + + + + + + + + + + + + PS122/3_29-1 + + + + + + + + + + + + + + PS122/3_29-10 + + + + + + + + + + + + + + PS122/3_29-11 + + + + + + + + + + + + + + PS122/3_29-12 + + + + + + + + + + + + + + PS122/3_29-13 + + + + + + + + + + + + + + PS122/3_29-14 + + + + + + + + + + + + + + PS122/3_29-15 + + + + + + + + + + + + + + PS122/3_29-16 + + + + + + + + + + + + + + PS122/3_29-17 + + + + + + + + + + + + + + PS122/3_29-18 + + + + + + + + + + + + + + PS122/3_29-19 + + + + + + + + + + + + + + PS122/3_29-20 + + + + + + + + + + + + + + PS122/3_29-21 + + + + + + + + + + + + + + PS122/3_29-26 + + + + + + + + + + + + + + PS122/3_29-27 + + + + + + + + + + + + + + PS122/3_29-28 + + + + + + + + + + + + + + PS122/3_29-29 + + + + + + + + + + + + + + PS122/3_29-3 + + + + + + + + + + + + + + PS122/3_29-30 + + + + + + + + + + + + + + PS122/3_29-31 + + + + + + + + + + + + + + PS122/3_29-32 + + + + + + + + + + + + + + PS122/3_29-33 + + + + + + + + + + + + + + PS122/3_29-34 + + + + + + + + + + + + + + PS122/3_29-35 + + + + + + + + + + + + + + PS122/3_29-36 + + + + + + + + + + + + + + PS122/3_29-37 + + + + + + + + + + + + + + PS122/3_29-38 + + + + + + + + + + + + + + PS122/3_29-39 + + + + + + + + + + + + + + PS122/3_29-4 + + + + + + + + + + + + + + PS122/3_29-40 + + + + + + + + + + + + + + PS122/3_29-41 + + + + + + + + + + + + + + PS122/3_29-42 + + + + + + + + + + + + + + PS122/3_29-43 + + + + + + + + + + + + + + PS122/3_29-44 + + + + + + + + + + + + + + PS122/3_29-45 + + + + + + + + + + + + + + PS122/3_29-46 + + + + + + + + + + + + + + PS122/3_29-47 + + + + + + + + + + + + + + PS122/3_29-48 + + + + + + + + + + + + + + PS122/3_29-49 + + + + + + + + + + + + + + PS122/3_29-5 + + + + + + + + + + + + + + PS122/3_29-50 + + + + + + + + + + + + + + PS122/3_29-51 + + + + + + + + + + + + + + PS122/3_29-52 + + + + + + + + + + + + + + PS122/3_29-53 + + + + + + + + + + + + + + PS122/3_29-55 + + + + + + + + + + + + + + PS122/3_29-56 + + + + + + + + + + + + + + PS122/3_29-57 + + + + + + + + + + + + + + PS122/3_29-58 + + + + + + + + + + + + + + PS122/3_29-59 + + + + + + + + + + + + + + PS122/3_29-6 + + + + + + + + + + + + + + PS122/3_29-60 + + + + + + + + + + + + + + PS122/3_29-61 + + + + + + + + + + + + + + PS122/3_29-62 + + + + + + + + + + + + + + PS122/3_29-63 + + + + + + + + + + + + + + PS122/3_29-64 + + + + + + + + + + + + + + PS122/3_29-65 + + + + + + + + + + + + + + PS122/3_29-66 + + + + + + + + + + + + + + PS122/3_29-67 + + + + + + + + + + + + + + PS122/3_29-68 + + + + + + + + + + + + + + PS122/3_29-69 + + + + + + + + + + + + + + PS122/3_29-7 + + + + + + + + + + + + + + PS122/3_29-70 + + + + + + + + + + + + + + PS122/3_29-71 + + + + + + + + + + + + + + PS122/3_29-72 + + + + + + + + + + + + + + PS122/3_29-73 + + + + + + + + + + + + + + PS122/3_29-74 + + + + + + + + + + + + + + PS122/3_29-75 + + + + + + + + + + + + + + PS122/3_29-76 + + + + + + + + + + + + + + PS122/3_29-77 + + + + + + + + + + + + + + PS122/3_29-78 + + + + + + + + + + + + + + PS122/3_29-79 + + + + + + + + + + + + + + PS122/3_29-8 + + + + + + + + + + + + + + PS122/3_29-80 + + + + + + + + + + + + + + PS122/3_29-81 + + + + + + + + + + + + + + PS122/3_29-82 + + + + + + + + + + + + + + PS122/3_29-83 + + + + + + + + + + + + + + PS122/3_29-84 + + + + + + + + + + + + + + PS122/3_29-85 + + + + + + + + + + + + + + PS122/3_29-86 + + + + + + + + + + + + + + PS122/3_29-87 + + + + + + + + + + + + + + PS122/3_29-88 + + + + + + + + + + + + + + PS122/3_29-89 + + + + + + + + + + + + + + PS122/3_29-9 + + + + + + + + + + + + + + PS122/3_29-90 + + + + + + + + + + + + + + PS122/3_29-91 + + + + + + + + + + + + + + PS122/3_29-92 + + + + + + + + + + + + + + PS122/3_29-93 + + + + + + + + + + + + + + PS122/3_30-10 + + + + + + + + + + + + + + PS122/3_30-100 + + + + + + + + + + + + + + PS122/3_30-101 + + + + + + + + + + + + + + PS122/3_30-102 + + + + + + + + + + + + + + PS122/3_30-103 + + + + + + + + + + + + + + PS122/3_30-104 + + + + + + + + + + + + + + PS122/3_30-105 + + + + + + + + + + + + + + PS122/3_30-108 + + + + + + + + + + + + + + PS122/3_30-109 + + + + + + + + + + + + + + PS122/3_30-11 + + + + + + + + + + + + + + PS122/3_30-110 + + + + + + + + + + + + + + PS122/3_30-111 + + + + + + + + + + + + + + PS122/3_30-112 + + + + + + + + + + + + + + PS122/3_30-113 + + + + + + + + + + + + + + PS122/3_30-12 + + + + + + + + + + + + + + PS122/3_30-13 + + + + + + + + + + + + + + PS122/3_30-14 + + + + + + + + + + + + + + PS122/3_30-15 + + + + + + + + + + + + + + PS122/3_30-16 + + + + + + + + + + + + + + PS122/3_30-17 + + + + + + + + + + + + + + PS122/3_30-18 + + + + + + + + + + + + + + PS122/3_30-19 + + + + + + + + + + + + + + PS122/3_30-2 + + + + + + + + + + + + + + PS122/3_30-20 + + + + + + + + + + + + + + PS122/3_30-21 + + + + + + + + + + + + + + PS122/3_30-22 + + + + + + + + + + + + + + PS122/3_30-23 + + + + + + + + + + + + + + PS122/3_30-24 + + + + + + + + + + + + + + PS122/3_30-25 + + + + + + + + + + + + + + PS122/3_30-26 + + + + + + + + + + + + + + PS122/3_30-27 + + + + + + + + + + + + + + PS122/3_30-28 + + + + + + + + + + + + + + PS122/3_30-29 + + + + + + + + + + + + + + PS122/3_30-3 + + + + + + + + + + + + + + PS122/3_30-30 + + + + + + + + + + + + + + PS122/3_30-31 + + + + + + + + + + + + + + PS122/3_30-32 + + + + + + + + + + + + + + PS122/3_30-33 + + + + + + + + + + + + + + PS122/3_30-34 + + + + + + + + + + + + + + PS122/3_30-35 + + + + + + + + + + + + + + PS122/3_30-37 + + + + + + + + + + + + + + PS122/3_30-38 + + + + + + + + + + + + + + PS122/3_30-39 + + + + + + + + + + + + + + PS122/3_30-4 + + + + + + + + + + + + + + PS122/3_30-40 + + + + + + + + + + + + + + PS122/3_30-41 + + + + + + + + + + + + + + PS122/3_30-42 + + + + + + + + + + + + + + PS122/3_30-43 + + + + + + + + + + + + + + PS122/3_30-44 + + + + + + + + + + + + + + PS122/3_30-45 + + + + + + + + + + + + + + PS122/3_30-46 + + + + + + + + + + + + + + PS122/3_30-47 + + + + + + + + + + + + + + PS122/3_30-48 + + + + + + + + + + + + + + PS122/3_30-49 + + + + + + + + + + + + + + PS122/3_30-5 + + + + + + + + + + + + + + PS122/3_30-50 + + + + + + + + + + + + + + PS122/3_30-51 + + + + + + + + + + + + + + PS122/3_30-52 + + + + + + + + + + + + + + PS122/3_30-53 + + + + + + + + + + + + + + PS122/3_30-54 + + + + + + + + + + + + + + PS122/3_30-56 + + + + + + + + + + + + + + PS122/3_30-57 + + + + + + + + + + + + + + PS122/3_30-58 + + + + + + + + + + + + + + PS122/3_30-59 + + + + + + + + + + + + + + PS122/3_30-6 + + + + + + + + + + + + + + PS122/3_30-60 + + + + + + + + + + + + + + PS122/3_30-61 + + + + + + + + + + + + + + PS122/3_30-63 + + + + + + + + + + + + + + PS122/3_30-64 + + + + + + + + + + + + + + PS122/3_30-65 + + + + + + + + + + + + + + PS122/3_30-66 + + + + + + + + + + + + + + PS122/3_30-67 + + + + + + + + + + + + + + PS122/3_30-68 + + + + + + + + + + + + + + PS122/3_30-69 + + + + + + + + + + + + + + PS122/3_30-7 + + + + + + + + + + + + + + PS122/3_30-70 + + + + + + + + + + + + + + PS122/3_30-71 + + + + + + + + + + + + + + PS122/3_30-72 + + + + + + + + + + + + + + PS122/3_30-74 + + + + + + + + + + + + + + PS122/3_30-75 + + + + + + + + + + + + + + PS122/3_30-76 + + + + + + + + + + + + + + PS122/3_30-77 + + + + + + + + + + + + + + PS122/3_30-78 + + + + + + + + + + + + + + PS122/3_30-79 + + + + + + + + + + + + + + PS122/3_30-8 + + + + + + + + + + + + + + PS122/3_30-80 + + + + + + + + + + + + + + PS122/3_30-81 + + + + + + + + + + + + + + PS122/3_30-82 + + + + + + + + + + + + + + PS122/3_30-83 + + + + + + + + + + + + + + PS122/3_30-85 + + + + + + + + + + + + + + PS122/3_30-87 + + + + + + + + + + + + + + PS122/3_30-88 + + + + + + + + + + + + + + PS122/3_30-89 + + + + + + + + + + + + + + PS122/3_30-9 + + + + + + + + + + + + + + PS122/3_30-90 + + + + + + + + + + + + + + PS122/3_30-91 + + + + + + + + + + + + + + PS122/3_30-92 + + + + + + + + + + + + + + PS122/3_30-93 + + + + + + + + + + + + + + PS122/3_30-94 + + + + + + + + + + + + + + PS122/3_30-95 + + + + + + + + + + + + + + PS122/3_30-96 + + + + + + + + + + + + + + PS122/3_30-97 + + + + + + + + + + + + + + PS122/3_31-10 + + + + + + + + + + + + + + PS122/3_31-101 + + + + + + + + + + + + + + PS122/3_31-102 + + + + + + + + + + + + + + PS122/3_31-103 + + + + + + + + + + + + + + PS122/3_31-104 + + + + + + + + + + + + + + PS122/3_31-11 + + + + + + + + + + + + + + PS122/3_31-12 + + + + + + + + + + + + + + PS122/3_31-13 + + + + + + + + + + + + + + PS122/3_31-14 + + + + + + + + + + + + + + PS122/3_31-15 + + + + + + + + + + + + + + PS122/3_31-16 + + + + + + + + + + + + + + PS122/3_31-17 + + + + + + + + + + + + + + PS122/3_31-18 + + + + + + + + + + + + + + PS122/3_31-19 + + + + + + + + + + + + + + PS122/3_31-2 + + + + + + + + + + + + + + PS122/3_31-20 + + + + + + + + + + + + + + PS122/3_31-21 + + + + + + + + + + + + + + PS122/3_31-22 + + + + + + + + + + + + + + PS122/3_31-23 + + + + + + + + + + + + + + PS122/3_31-24 + + + + + + + + + + + + + + PS122/3_31-25 + + + + + + + + + + + + + + PS122/3_31-27 + + + + + + + + + + + + + + PS122/3_31-28 + + + + + + + + + + + + + + PS122/3_31-29 + + + + + + + + + + + + + + PS122/3_31-3 + + + + + + + + + + + + + + PS122/3_31-30 + + + + + + + + + + + + + + PS122/3_31-32 + + + + + + + + + + + + + + PS122/3_31-33 + + + + + + + + + + + + + + PS122/3_31-34 + + + + + + + + + + + + + + PS122/3_31-35 + + + + + + + + + + + + + + PS122/3_31-36 + + + + + + + + + + + + + + PS122/3_31-37 + + + + + + + + + + + + + + PS122/3_31-38 + + + + + + + + + + + + + + PS122/3_31-39 + + + + + + + + + + + + + + PS122/3_31-4 + + + + + + + + + + + + + + PS122/3_31-40 + + + + + + + + + + + + + + PS122/3_31-41 + + + + + + + + + + + + + + PS122/3_31-42 + + + + + + + + + + + + + + PS122/3_31-43 + + + + + + + + + + + + + + PS122/3_31-44 + + + + + + + + + + + + + + PS122/3_31-45 + + + + + + + + + + + + + + PS122/3_31-46 + + + + + + + + + + + + + + PS122/3_31-47 + + + + + + + + + + + + + + PS122/3_31-48 + + + + + + + + + + + + + + PS122/3_31-49 + + + + + + + + + + + + + + PS122/3_31-5 + + + + + + + + + + + + + + PS122/3_31-50 + + + + + + + + + + + + + + PS122/3_31-51 + + + + + + + + + + + + + + PS122/3_31-52 + + + + + + + + + + + + + + PS122/3_31-53 + + + + + + + + + + + + + + PS122/3_31-54 + + + + + + + + + + + + + + PS122/3_31-55 + + + + + + + + + + + + + + PS122/3_31-56 + + + + + + + + + + + + + + PS122/3_31-57 + + + + + + + + + + + + + + PS122/3_31-58 + + + + + + + + + + + + + + PS122/3_31-59 + + + + + + + + + + + + + + PS122/3_31-60 + + + + + + + + + + + + + + PS122/3_31-61 + + + + + + + + + + + + + + PS122/3_31-62 + + + + + + + + + + + + + + PS122/3_31-63 + + + + + + + + + + + + + + PS122/3_31-64 + + + + + + + + + + + + + + PS122/3_31-65 + + + + + + + + + + + + + + PS122/3_31-66 + + + + + + + + + + + + + + PS122/3_31-67 + + + + + + + + + + + + + + PS122/3_31-68 + + + + + + + + + + + + + + PS122/3_31-69 + + + + + + + + + + + + + + PS122/3_31-70 + + + + + + + + + + + + + + PS122/3_31-71 + + + + + + + + + + + + + + PS122/3_31-72 + + + + + + + + + + + + + + PS122/3_31-73 + + + + + + + + + + + + + + PS122/3_31-74 + + + + + + + + + + + + + + PS122/3_31-75 + + + + + + + + + + + + + + PS122/3_31-76 + + + + + + + + + + + + + + PS122/3_31-77 + + + + + + + + + + + + + + PS122/3_31-78 + + + + + + + + + + + + + + PS122/3_31-79 + + + + + + + + + + + + + + PS122/3_31-8 + + + + + + + + + + + + + + PS122/3_31-80 + + + + + + + + + + + + + + PS122/3_31-81 + + + + + + + + + + + + + + PS122/3_31-82 + + + + + + + + + + + + + + PS122/3_31-83 + + + + + + + + + + + + + + PS122/3_31-84 + + + + + + + + + + + + + + PS122/3_31-85 + + + + + + + + + + + + + + PS122/3_31-86 + + + + + + + + + + + + + + PS122/3_31-87 + + + + + + + + + + + + + + PS122/3_31-89 + + + + + + + + + + + + + + PS122/3_31-9 + + + + + + + + + + + + + + PS122/3_31-90 + + + + + + + + + + + + + + PS122/3_31-91 + + + + + + + + + + + + + + PS122/3_31-92 + + + + + + + + + + + + + + PS122/3_31-93 + + + + + + + + + + + + + + PS122/3_31-94 + + + + + + + + + + + + + + PS122/3_31-95 + + + + + + + + + + + + + + PS122/3_31-96 + + + + + + + + + + + + + + PS122/3_31-97 + + + + + + + + + + + + + + PS122/3_31-98 + + + + + + + + + + + + + + PS122/3_32-1 + + + + + + + + + + + + + + PS122/3_32-10 + + + + + + + + + + + + + + PS122/3_32-100 + + + + + + + + + + + + + + PS122/3_32-101 + + + + + + + + + + + + + + PS122/3_32-103 + + + + + + + + + + + + + + PS122/3_32-104 + + + + + + + + + + + + + + PS122/3_32-105 + + + + + + + + + + + + + + PS122/3_32-106 + + + + + + + + + + + + + + PS122/3_32-107 + + + + + + + + + + + + + + PS122/3_32-108 + + + + + + + + + + + + + + PS122/3_32-11 + + + + + + + + + + + + + + PS122/3_32-12 + + + + + + + + + + + + + + PS122/3_32-13 + + + + + + + + + + + + + + PS122/3_32-14 + + + + + + + + + + + + + + PS122/3_32-15 + + + + + + + + + + + + + + PS122/3_32-16 + + + + + + + + + + + + + + PS122/3_32-17 + + + + + + + + + + + + + + PS122/3_32-19 + + + + + + + + + + + + + + PS122/3_32-2 + + + + + + + + + + + + + + PS122/3_32-20 + + + + + + + + + + + + + + PS122/3_32-21 + + + + + + + + + + + + + + PS122/3_32-22 + + + + + + + + + + + + + + PS122/3_32-23 + + + + + + + + + + + + + + PS122/3_32-24 + + + + + + + + + + + + + + PS122/3_32-25 + + + + + + + + + + + + + + PS122/3_32-26 + + + + + + + + + + + + + + PS122/3_32-27 + + + + + + + + + + + + + + PS122/3_32-28 + + + + + + + + + + + + + + PS122/3_32-29 + + + + + + + + + + + + + + PS122/3_32-3 + + + + + + + + + + + + + + PS122/3_32-30 + + + + + + + + + + + + + + PS122/3_32-31 + + + + + + + + + + + + + + PS122/3_32-32 + + + + + + + + + + + + + + PS122/3_32-33 + + + + + + + + + + + + + + PS122/3_32-34 + + + + + + + + + + + + + + PS122/3_32-35 + + + + + + + + + + + + + + PS122/3_32-37 + + + + + + + + + + + + + + PS122/3_32-38 + + + + + + + + + + + + + + PS122/3_32-4 + + + + + + + + + + + + + + PS122/3_32-40 + + + + + + + + + + + + + + PS122/3_32-41 + + + + + + + + + + + + + + PS122/3_32-42 + + + + + + + + + + + + + + PS122/3_32-43 + + + + + + + + + + + + + + PS122/3_32-44 + + + + + + + + + + + + + + PS122/3_32-45 + + + + + + + + + + + + + + PS122/3_32-46 + + + + + + + + + + + + + + PS122/3_32-47 + + + + + + + + + + + + + + PS122/3_32-48 + + + + + + + + + + + + + + PS122/3_32-49 + + + + + + + + + + + + + + PS122/3_32-5 + + + + + + + + + + + + + + PS122/3_32-50 + + + + + + + + + + + + + + PS122/3_32-51 + + + + + + + + + + + + + + PS122/3_32-52 + + + + + + + + + + + + + + PS122/3_32-53 + + + + + + + + + + + + + + PS122/3_32-54 + + + + + + + + + + + + + + PS122/3_32-55 + + + + + + + + + + + + + + PS122/3_32-56 + + + + + + + + + + + + + + PS122/3_32-57 + + + + + + + + + + + + + + PS122/3_32-58 + + + + + + + + + + + + + + PS122/3_32-59 + + + + + + + + + + + + + + PS122/3_32-6 + + + + + + + + + + + + + + PS122/3_32-60 + + + + + + + + + + + + + + PS122/3_32-61 + + + + + + + + + + + + + + PS122/3_32-62 + + + + + + + + + + + + + + PS122/3_32-63 + + + + + + + + + + + + + + PS122/3_32-64 + + + + + + + + + + + + + + PS122/3_32-65 + + + + + + + + + + + + + + PS122/3_32-66 + + + + + + + + + + + + + + PS122/3_32-67 + + + + + + + + + + + + + + PS122/3_32-68 + + + + + + + + + + + + + + PS122/3_32-69 + + + + + + + + + + + + + + PS122/3_32-7 + + + + + + + + + + + + + + PS122/3_32-70 + + + + + + + + + + + + + + PS122/3_32-71 + + + + + + + + + + + + + + PS122/3_32-72 + + + + + + + + + + + + + + PS122/3_32-73 + + + + + + + + + + + + + + PS122/3_32-74 + + + + + + + + + + + + + + PS122/3_32-75 + + + + + + + + + + + + + + PS122/3_32-76 + + + + + + + + + + + + + + PS122/3_32-77 + + + + + + + + + + + + + + PS122/3_32-78 + + + + + + + + + + + + + + PS122/3_32-79 + + + + + + + + + + + + + + PS122/3_32-8 + + + + + + + + + + + + + + PS122/3_32-80 + + + + + + + + + + + + + + PS122/3_32-81 + + + + + + + + + + + + + + PS122/3_32-82 + + + + + + + + + + + + + + PS122/3_32-83 + + + + + + + + + + + + + + PS122/3_32-84 + + + + + + + + + + + + + + PS122/3_32-85 + + + + + + + + + + + + + + PS122/3_32-86 + + + + + + + + + + + + + + PS122/3_32-87 + + + + + + + + + + + + + + PS122/3_32-88 + + + + + + + + + + + + + + PS122/3_32-89 + + + + + + + + + + + + + + PS122/3_32-9 + + + + + + + + + + + + + + PS122/3_32-90 + + + + + + + + + + + + + + PS122/3_32-91 + + + + + + + + + + + + + + PS122/3_32-92 + + + + + + + + + + + + + + PS122/3_32-93 + + + + + + + + + + + + + + PS122/3_32-94 + + + + + + + + + + + + + + PS122/3_32-95 + + + + + + + + + + + + + + PS122/3_32-97 + + + + + + + + + + + + + + PS122/3_32-98 + + + + + + + + + + + + + + PS122/3_32-99 + + + + + + + + + + + + + + PS122/3_33-1 + + + + + + + + + + + + + + PS122/3_33-10 + + + + + + + + + + + + + + PS122/3_33-100 + + + + + + + + + + + + + + PS122/3_33-102 + + + + + + + + + + + + + + PS122/3_33-103 + + + + + + + + + + + + + + PS122/3_33-104 + + + + + + + + + + + + + + PS122/3_33-106 + + + + + + + + + + + + + + PS122/3_33-107 + + + + + + + + + + + + + + PS122/3_33-108 + + + + + + + + + + + + + + PS122/3_33-109 + + + + + + + + + + + + + + PS122/3_33-11 + + + + + + + + + + + + + + PS122/3_33-110 + + + + + + + + + + + + + + PS122/3_33-111 + + + + + + + + + + + + + + PS122/3_33-112 + + + + + + + + + + + + + + PS122/3_33-113 + + + + + + + + + + + + + + PS122/3_33-114 + + + + + + + + + + + + + + PS122/3_33-115 + + + + + + + + + + + + + + PS122/3_33-116 + + + + + + + + + + + + + + PS122/3_33-117 + + + + + + + + + + + + + + PS122/3_33-118 + + + + + + + + + + + + + + PS122/3_33-119 + + + + + + + + + + + + + + PS122/3_33-12 + + + + + + + + + + + + + + PS122/3_33-120 + + + + + + + + + + + + + + PS122/3_33-121 + + + + + + + + + + + + + + PS122/3_33-122 + + + + + + + + + + + + + + PS122/3_33-13 + + + + + + + + + + + + + + PS122/3_33-15 + + + + + + + + + + + + + + PS122/3_33-16 + + + + + + + + + + + + + + PS122/3_33-17 + + + + + + + + + + + + + + PS122/3_33-18 + + + + + + + + + + + + + + PS122/3_33-19 + + + + + + + + + + + + + + PS122/3_33-2 + + + + + + + + + + + + + + PS122/3_33-20 + + + + + + + + + + + + + + PS122/3_33-21 + + + + + + + + + + + + + + PS122/3_33-22 + + + + + + + + + + + + + + PS122/3_33-23 + + + + + + + + + + + + + + PS122/3_33-24 + + + + + + + + + + + + + + PS122/3_33-25 + + + + + + + + + + + + + + PS122/3_33-26 + + + + + + + + + + + + + + PS122/3_33-27 + + + + + + + + + + + + + + PS122/3_33-28 + + + + + + + + + + + + + + PS122/3_33-29 + + + + + + + + + + + + + + PS122/3_33-3 + + + + + + + + + + + + + + PS122/3_33-30 + + + + + + + + + + + + + + PS122/3_33-31 + + + + + + + + + + + + + + PS122/3_33-32 + + + + + + + + + + + + + + PS122/3_33-33 + + + + + + + + + + + + + + PS122/3_33-34 + + + + + + + + + + + + + + PS122/3_33-35 + + + + + + + + + + + + + + PS122/3_33-36 + + + + + + + + + + + + + + PS122/3_33-37 + + + + + + + + + + + + + + PS122/3_33-39 + + + + + + + + + + + + + + PS122/3_33-4 + + + + + + + + + + + + + + PS122/3_33-40 + + + + + + + + + + + + + + PS122/3_33-41 + + + + + + + + + + + + + + PS122/3_33-42 + + + + + + + + + + + + + + PS122/3_33-43 + + + + + + + + + + + + + + PS122/3_33-44 + + + + + + + + + + + + + + PS122/3_33-45 + + + + + + + + + + + + + + PS122/3_33-46 + + + + + + + + + + + + + + PS122/3_33-47 + + + + + + + + + + + + + + PS122/3_33-48 + + + + + + + + + + + + + + PS122/3_33-49 + + + + + + + + + + + + + + PS122/3_33-5 + + + + + + + + + + + + + + PS122/3_33-50 + + + + + + + + + + + + + + PS122/3_33-51 + + + + + + + + + + + + + + PS122/3_33-53 + + + + + + + + + + + + + + PS122/3_33-54 + + + + + + + + + + + + + + PS122/3_33-55 + + + + + + + + + + + + + + PS122/3_33-56 + + + + + + + + + + + + + + PS122/3_33-57 + + + + + + + + + + + + + + PS122/3_33-58 + + + + + + + + + + + + + + PS122/3_33-59 + + + + + + + + + + + + + + PS122/3_33-6 + + + + + + + + + + + + + + PS122/3_33-60 + + + + + + + + + + + + + + PS122/3_33-61 + + + + + + + + + + + + + + PS122/3_33-62 + + + + + + + + + + + + + + PS122/3_33-63 + + + + + + + + + + + + + + PS122/3_33-64 + + + + + + + + + + + + + + PS122/3_33-65 + + + + + + + + + + + + + + PS122/3_33-66 + + + + + + + + + + + + + + PS122/3_33-67 + + + + + + + + + + + + + + PS122/3_33-68 + + + + + + + + + + + + + + PS122/3_33-69 + + + + + + + + + + + + + + PS122/3_33-7 + + + + + + + + + + + + + + PS122/3_33-70 + + + + + + + + + + + + + + PS122/3_33-71 + + + + + + + + + + + + + + PS122/3_33-72 + + + + + + + + + + + + + + PS122/3_33-73 + + + + + + + + + + + + + + PS122/3_33-74 + + + + + + + + + + + + + + PS122/3_33-75 + + + + + + + + + + + + + + PS122/3_33-76 + + + + + + + + + + + + + + PS122/3_33-77 + + + + + + + + + + + + + + PS122/3_33-78 + + + + + + + + + + + + + + PS122/3_33-79 + + + + + + + + + + + + + + PS122/3_33-8 + + + + + + + + + + + + + + PS122/3_33-80 + + + + + + + + + + + + + + PS122/3_33-81 + + + + + + + + + + + + + + PS122/3_33-82 + + + + + + + + + + + + + + PS122/3_33-83 + + + + + + + + + + + + + + PS122/3_33-84 + + + + + + + + + + + + + + PS122/3_33-85 + + + + + + + + + + + + + + PS122/3_33-86 + + + + + + + + + + + + + + PS122/3_33-87 + + + + + + + + + + + + + + PS122/3_33-88 + + + + + + + + + + + + + + PS122/3_33-91 + + + + + + + + + + + + + + PS122/3_33-92 + + + + + + + + + + + + + + PS122/3_33-93 + + + + + + + + + + + + + + PS122/3_33-94 + + + + + + + + + + + + + + PS122/3_33-95 + + + + + + + + + + + + + + PS122/3_33-96 + + + + + + + + + + + + + + PS122/3_33-98 + + + + + + + + + + + + + + PS122/3_33-99 + + + + + + + + + + + + + + PS122/3_34-1 + + + + + + + + + + + + + + PS122/3_34-10 + + + + + + + + + + + + + + PS122/3_34-100 + + + + + + + + + + + + + + PS122/3_34-101 + + + + + + + + + + + + + + PS122/3_34-102 + + + + + + + + + + + + + + PS122/3_34-103 + + + + + + + + + + + + + + PS122/3_34-104 + + + + + + + + + + + + + + PS122/3_34-105 + + + + + + + + + + + + + + PS122/3_34-106 + + + + + + + + + + + + + + PS122/3_34-107 + + + + + + + + + + + + + + PS122/3_34-108 + + + + + + + + + + + + + + PS122/3_34-110 + + + + + + + + + + + + + + PS122/3_34-111 + + + + + + + + + + + + + + PS122/3_34-112 + + + + + + + + + + + + + + PS122/3_34-113 + + + + + + + + + + + + + + PS122/3_34-12 + + + + + + + + + + + + + + PS122/3_34-13 + + + + + + + + + + + + + + PS122/3_34-14 + + + + + + + + + + + + + + PS122/3_34-15 + + + + + + + + + + + + + + PS122/3_34-16 + + + + + + + + + + + + + + PS122/3_34-17 + + + + + + + + + + + + + + PS122/3_34-18 + + + + + + + + + + + + + + PS122/3_34-19 + + + + + + + + + + + + + + PS122/3_34-2 + + + + + + + + + + + + + + PS122/3_34-20 + + + + + + + + + + + + + + PS122/3_34-21 + + + + + + + + + + + + + + PS122/3_34-22 + + + + + + + + + + + + + + PS122/3_34-23 + + + + + + + + + + + + + + PS122/3_34-24 + + + + + + + + + + + + + + PS122/3_34-25 + + + + + + + + + + + + + + PS122/3_34-26 + + + + + + + + + + + + + + PS122/3_34-27 + + + + + + + + + + + + + + PS122/3_34-28 + + + + + + + + + + + + + + PS122/3_34-29 + + + + + + + + + + + + + + PS122/3_34-3 + + + + + + + + + + + + + + PS122/3_34-30 + + + + + + + + + + + + + + PS122/3_34-31 + + + + + + + + + + + + + + PS122/3_34-32 + + + + + + + + + + + + + + PS122/3_34-33 + + + + + + + + + + + + + + PS122/3_34-34 + + + + + + + + + + + + + + PS122/3_34-35 + + + + + + + + + + + + + + PS122/3_34-36 + + + + + + + + + + + + + + PS122/3_34-37 + + + + + + + + + + + + + + PS122/3_34-38 + + + + + + + + + + + + + + PS122/3_34-39 + + + + + + + + + + + + + + PS122/3_34-4 + + + + + + + + + + + + + + PS122/3_34-40 + + + + + + + + + + + + + + PS122/3_34-41 + + + + + + + + + + + + + + PS122/3_34-42 + + + + + + + + + + + + + + PS122/3_34-43 + + + + + + + + + + + + + + PS122/3_34-44 + + + + + + + + + + + + + + PS122/3_34-45 + + + + + + + + + + + + + + PS122/3_34-46 + + + + + + + + + + + + + + PS122/3_34-47 + + + + + + + + + + + + + + PS122/3_34-48 + + + + + + + + + + + + + + PS122/3_34-49 + + + + + + + + + + + + + + PS122/3_34-5 + + + + + + + + + + + + + + PS122/3_34-50 + + + + + + + + + + + + + + PS122/3_34-51 + + + + + + + + + + + + + + PS122/3_34-52 + + + + + + + + + + + + + + PS122/3_34-53 + + + + + + + + + + + + + + PS122/3_34-54 + + + + + + + + + + + + + + PS122/3_34-55 + + + + + + + + + + + + + + PS122/3_34-56 + + + + + + + + + + + + + + PS122/3_34-57 + + + + + + + + + + + + + + PS122/3_34-58 + + + + + + + + + + + + + + PS122/3_34-59 + + + + + + + + + + + + + + PS122/3_34-6 + + + + + + + + + + + + + + PS122/3_34-60 + + + + + + + + + + + + + + PS122/3_34-61 + + + + + + + + + + + + + + PS122/3_34-62 + + + + + + + + + + + + + + PS122/3_34-63 + + + + + + + + + + + + + + PS122/3_34-64 + + + + + + + + + + + + + + PS122/3_34-65 + + + + + + + + + + + + + + PS122/3_34-66 + + + + + + + + + + + + + + PS122/3_34-67 + + + + + + + + + + + + + + PS122/3_34-68 + + + + + + + + + + + + + + PS122/3_34-69 + + + + + + + + + + + + + + PS122/3_34-7 + + + + + + + + + + + + + + PS122/3_34-70 + + + + + + + + + + + + + + PS122/3_34-71 + + + + + + + + + + + + + + PS122/3_34-72 + + + + + + + + + + + + + + PS122/3_34-73 + + + + + + + + + + + + + + PS122/3_34-74 + + + + + + + + + + + + + + PS122/3_34-76 + + + + + + + + + + + + + + PS122/3_34-77 + + + + + + + + + + + + + + PS122/3_34-78 + + + + + + + + + + + + + + PS122/3_34-79 + + + + + + + + + + + + + + PS122/3_34-8 + + + + + + + + + + + + + + PS122/3_34-80 + + + + + + + + + + + + + + PS122/3_34-81 + + + + + + + + + + + + + + PS122/3_34-82 + + + + + + + + + + + + + + PS122/3_34-84 + + + + + + + + + + + + + + PS122/3_34-85 + + + + + + + + + + + + + + PS122/3_34-86 + + + + + + + + + + + + + + PS122/3_34-87 + + + + + + + + + + + + + + PS122/3_34-88 + + + + + + + + + + + + + + PS122/3_34-89 + + + + + + + + + + + + + + PS122/3_34-9 + + + + + + + + + + + + + + PS122/3_34-90 + + + + + + + + + + + + + + PS122/3_34-91 + + + + + + + + + + + + + + PS122/3_34-92 + + + + + + + + + + + + + + PS122/3_34-93 + + + + + + + + + + + + + + PS122/3_34-94 + + + + + + + + + + + + + + PS122/3_34-95 + + + + + + + + + + + + + + PS122/3_34-96 + + + + + + + + + + + + + + PS122/3_34-97 + + + + + + + + + + + + + + PS122/3_34-98 + + + + + + + + + + + + + + PS122/3_34-99 + + + + + + + + + + + + + + PS122/3_35-1 + + + + + + + + + + + + + + PS122/3_35-10 + + + + + + + + + + + + + + PS122/3_35-100 + + + + + + + + + + + + + + PS122/3_35-101 + + + + + + + + + + + + + + PS122/3_35-102 + + + + + + + + + + + + + + PS122/3_35-103 + + + + + + + + + + + + + + PS122/3_35-104 + + + + + + + + + + + + + + PS122/3_35-105 + + + + + + + + + + + + + + PS122/3_35-106 + + + + + + + + + + + + + + PS122/3_35-107 + + + + + + + + + + + + + + PS122/3_35-108 + + + + + + + + + + + + + + PS122/3_35-109 + + + + + + + + + + + + + + PS122/3_35-11 + + + + + + + + + + + + + + PS122/3_35-110 + + + + + + + + + + + + + + PS122/3_35-111 + + + + + + + + + + + + + + PS122/3_35-112 + + + + + + + + + + + + + + PS122/3_35-114 + + + + + + + + + + + + + + PS122/3_35-115 + + + + + + + + + + + + + + PS122/3_35-116 + + + + + + + + + + + + + + PS122/3_35-117 + + + + + + + + + + + + + + PS122/3_35-118 + + + + + + + + + + + + + + PS122/3_35-119 + + + + + + + + + + + + + + PS122/3_35-12 + + + + + + + + + + + + + + PS122/3_35-120 + + + + + + + + + + + + + + PS122/3_35-121 + + + + + + + + + + + + + + PS122/3_35-122 + + + + + + + + + + + + + + PS122/3_35-123 + + + + + + + + + + + + + + PS122/3_35-124 + + + + + + + + + + + + + + PS122/3_35-125 + + + + + + + + + + + + + + PS122/3_35-126 + + + + + + + + + + + + + + PS122/3_35-127 + + + + + + + + + + + + + + PS122/3_35-128 + + + + + + + + + + + + + + PS122/3_35-129 + + + + + + + + + + + + + + PS122/3_35-13 + + + + + + + + + + + + + + PS122/3_35-130 + + + + + + + + + + + + + + PS122/3_35-131 + + + + + + + + + + + + + + PS122/3_35-132 + + + + + + + + + + + + + + PS122/3_35-133 + + + + + + + + + + + + + + PS122/3_35-134 + + + + + + + + + + + + + + PS122/3_35-135 + + + + + + + + + + + + + + PS122/3_35-136 + + + + + + + + + + + + + + PS122/3_35-137 + + + + + + + + + + + + + + PS122/3_35-138 + + + + + + + + + + + + + + PS122/3_35-139 + + + + + + + + + + + + + + PS122/3_35-14 + + + + + + + + + + + + + + PS122/3_35-140 + + + + + + + + + + + + + + PS122/3_35-141 + + + + + + + + + + + + + + PS122/3_35-142 + + + + + + + + + + + + + + PS122/3_35-144 + + + + + + + + + + + + + + PS122/3_35-145 + + + + + + + + + + + + + + PS122/3_35-146 + + + + + + + + + + + + + + PS122/3_35-147 + + + + + + + + + + + + + + PS122/3_35-149 + + + + + + + + + + + + + + PS122/3_35-15 + + + + + + + + + + + + + + PS122/3_35-151 + + + + + + + + + + + + + + PS122/3_35-152 + + + + + + + + + + + + + + PS122/3_35-153 + + + + + + + + + + + + + + PS122/3_35-154 + + + + + + + + + + + + + + PS122/3_35-155 + + + + + + + + + + + + + + PS122/3_35-156 + + + + + + + + + + + + + + PS122/3_35-157 + + + + + + + + + + + + + + PS122/3_35-158 + + + + + + + + + + + + + + PS122/3_35-16 + + + + + + + + + + + + + + PS122/3_35-17 + + + + + + + + + + + + + + PS122/3_35-18 + + + + + + + + + + + + + + PS122/3_35-19 + + + + + + + + + + + + + + PS122/3_35-2 + + + + + + + + + + + + + + PS122/3_35-20 + + + + + + + + + + + + + + PS122/3_35-21 + + + + + + + + + + + + + + PS122/3_35-22 + + + + + + + + + + + + + + PS122/3_35-23 + + + + + + + + + + + + + + PS122/3_35-24 + + + + + + + + + + + + + + PS122/3_35-25 + + + + + + + + + + + + + + PS122/3_35-26 + + + + + + + + + + + + + + PS122/3_35-27 + + + + + + + + + + + + + + PS122/3_35-28 + + + + + + + + + + + + + + PS122/3_35-29 + + + + + + + + + + + + + + PS122/3_35-3 + + + + + + + + + + + + + + PS122/3_35-30 + + + + + + + + + + + + + + PS122/3_35-31 + + + + + + + + + + + + + + PS122/3_35-32 + + + + + + + + + + + + + + PS122/3_35-33 + + + + + + + + + + + + + + PS122/3_35-34 + + + + + + + + + + + + + + PS122/3_35-35 + + + + + + + + + + + + + + PS122/3_35-36 + + + + + + + + + + + + + + PS122/3_35-37 + + + + + + + + + + + + + + PS122/3_35-38 + + + + + + + + + + + + + + PS122/3_35-39 + + + + + + + + + + + + + + PS122/3_35-4 + + + + + + + + + + + + + + PS122/3_35-40 + + + + + + + + + + + + + + PS122/3_35-41 + + + + + + + + + + + + + + PS122/3_35-42 + + + + + + + + + + + + + + PS122/3_35-43 + + + + + + + + + + + + + + PS122/3_35-44 + + + + + + + + + + + + + + PS122/3_35-45 + + + + + + + + + + + + + + PS122/3_35-46 + + + + + + + + + + + + + + PS122/3_35-48 + + + + + + + + + + + + + + PS122/3_35-49 + + + + + + + + + + + + + + PS122/3_35-5 + + + + + + + + + + + + + + PS122/3_35-50 + + + + + + + + + + + + + + PS122/3_35-51 + + + + + + + + + + + + + + PS122/3_35-52 + + + + + + + + + + + + + + PS122/3_35-53 + + + + + + + + + + + + + + PS122/3_35-54 + + + + + + + + + + + + + + PS122/3_35-55 + + + + + + + + + + + + + + PS122/3_35-56 + + + + + + + + + + + + + + PS122/3_35-57 + + + + + + + + + + + + + + PS122/3_35-58 + + + + + + + + + + + + + + PS122/3_35-59 + + + + + + + + + + + + + + PS122/3_35-6 + + + + + + + + + + + + + + PS122/3_35-60 + + + + + + + + + + + + + + PS122/3_35-61 + + + + + + + + + + + + + + PS122/3_35-62 + + + + + + + + + + + + + + PS122/3_35-63 + + + + + + + + + + + + + + PS122/3_35-64 + + + + + + + + + + + + + + PS122/3_35-65 + + + + + + + + + + + + + + PS122/3_35-66 + + + + + + + + + + + + + + PS122/3_35-67 + + + + + + + + + + + + + + PS122/3_35-68 + + + + + + + + + + + + + + PS122/3_35-69 + + + + + + + + + + + + + + PS122/3_35-7 + + + + + + + + + + + + + + PS122/3_35-70 + + + + + + + + + + + + + + PS122/3_35-71 + + + + + + + + + + + + + + PS122/3_35-72 + + + + + + + + + + + + + + PS122/3_35-73 + + + + + + + + + + + + + + PS122/3_35-75 + + + + + + + + + + + + + + PS122/3_35-76 + + + + + + + + + + + + + + PS122/3_35-77 + + + + + + + + + + + + + + PS122/3_35-78 + + + + + + + + + + + + + + PS122/3_35-79 + + + + + + + + + + + + + + PS122/3_35-8 + + + + + + + + + + + + + + PS122/3_35-80 + + + + + + + + + + + + + + PS122/3_35-81 + + + + + + + + + + + + + + PS122/3_35-82 + + + + + + + + + + + + + + PS122/3_35-83 + + + + + + + + + + + + + + PS122/3_35-84 + + + + + + + + + + + + + + PS122/3_35-85 + + + + + + + + + + + + + + PS122/3_35-86 + + + + + + + + + + + + + + PS122/3_35-87 + + + + + + + + + + + + + + PS122/3_35-88 + + + + + + + + + + + + + + PS122/3_35-89 + + + + + + + + + + + + + + PS122/3_35-9 + + + + + + + + + + + + + + PS122/3_35-91 + + + + + + + + + + + + + + PS122/3_35-92 + + + + + + + + + + + + + + PS122/3_35-93 + + + + + + + + + + + + + + PS122/3_35-94 + + + + + + + + + + + + + + PS122/3_35-95 + + + + + + + + + + + + + + PS122/3_35-96 + + + + + + + + + + + + + + PS122/3_35-97 + + + + + + + + + + + + + + PS122/3_35-98 + + + + + + + + + + + + + + PS122/3_35-99 + + + + + + + + + + + + + + PS122/3_36-1 + + + + + + + + + + + + + + PS122/3_36-10 + + + + + + + + + + + + + + PS122/3_36-100 + + + + + + + + + + + + + + PS122/3_36-101 + + + + + + + + + + + + + + PS122/3_36-102 + + + + + + + + + + + + + + PS122/3_36-103 + + + + + + + + + + + + + + PS122/3_36-104 + + + + + + + + + + + + + + PS122/3_36-105 + + + + + + + + + + + + + + PS122/3_36-106 + + + + + + + + + + + + + + PS122/3_36-107 + + + + + + + + + + + + + + PS122/3_36-109 + + + + + + + + + + + + + + PS122/3_36-110 + + + + + + + + + + + + + + PS122/3_36-111 + + + + + + + + + + + + + + PS122/3_36-112 + + + + + + + + + + + + + + PS122/3_36-113 + + + + + + + + + + + + + + PS122/3_36-114 + + + + + + + + + + + + + + PS122/3_36-115 + + + + + + + + + + + + + + PS122/3_36-116 + + + + + + + + + + + + + + PS122/3_36-117 + + + + + + + + + + + + + + PS122/3_36-118 + + + + + + + + + + + + + + PS122/3_36-119 + + + + + + + + + + + + + + PS122/3_36-12 + + + + + + + + + + + + + + PS122/3_36-120 + + + + + + + + + + + + + + PS122/3_36-121 + + + + + + + + + + + + + + PS122/3_36-122 + + + + + + + + + + + + + + PS122/3_36-123 + + + + + + + + + + + + + + PS122/3_36-124 + + + + + + + + + + + + + + PS122/3_36-125 + + + + + + + + + + + + + + PS122/3_36-126 + + + + + + + + + + + + + + PS122/3_36-127 + + + + + + + + + + + + + + PS122/3_36-128 + + + + + + + + + + + + + + PS122/3_36-129 + + + + + + + + + + + + + + PS122/3_36-13 + + + + + + + + + + + + + + PS122/3_36-130 + + + + + + + + + + + + + + PS122/3_36-131 + + + + + + + + + + + + + + PS122/3_36-132 + + + + + + + + + + + + + + PS122/3_36-133 + + + + + + + + + + + + + + PS122/3_36-134 + + + + + + + + + + + + + + PS122/3_36-135 + + + + + + + + + + + + + + PS122/3_36-136 + + + + + + + + + + + + + + PS122/3_36-137 + + + + + + + + + + + + + + PS122/3_36-138 + + + + + + + + + + + + + + PS122/3_36-139 + + + + + + + + + + + + + + PS122/3_36-14 + + + + + + + + + + + + + + PS122/3_36-140 + + + + + + + + + + + + + + PS122/3_36-141 + + + + + + + + + + + + + + PS122/3_36-142 + + + + + + + + + + + + + + PS122/3_36-145 + + + + + + + + + + + + + + PS122/3_36-146 + + + + + + + + + + + + + + PS122/3_36-147 + + + + + + + + + + + + + + PS122/3_36-148 + + + + + + + + + + + + + + PS122/3_36-149 + + + + + + + + + + + + + + PS122/3_36-15 + + + + + + + + + + + + + + PS122/3_36-150 + + + + + + + + + + + + + + PS122/3_36-151 + + + + + + + + + + + + + + PS122/3_36-153 + + + + + + + + + + + + + + PS122/3_36-156 + + + + + + + + + + + + + + PS122/3_36-157 + + + + + + + + + + + + + + PS122/3_36-158 + + + + + + + + + + + + + + PS122/3_36-159 + + + + + + + + + + + + + + PS122/3_36-16 + + + + + + + + + + + + + + PS122/3_36-160 + + + + + + + + + + + + + + PS122/3_36-161 + + + + + + + + + + + + + + PS122/3_36-162 + + + + + + + + + + + + + + PS122/3_36-163 + + + + + + + + + + + + + + PS122/3_36-164 + + + + + + + + + + + + + + PS122/3_36-165 + + + + + + + + + + + + + + PS122/3_36-166 + + + + + + + + + + + + + + PS122/3_36-169 + + + + + + + + + + + + + + PS122/3_36-17 + + + + + + + + + + + + + + PS122/3_36-170 + + + + + + + + + + + + + + PS122/3_36-171 + + + + + + + + + + + + + + PS122/3_36-172 + + + + + + + + + + + + + + PS122/3_36-173 + + + + + + + + + + + + + + PS122/3_36-174 + + + + + + + + + + + + + + PS122/3_36-175 + + + + + + + + + + + + + + PS122/3_36-176 + + + + + + + + + + + + + + PS122/3_36-177 + + + + + + + + + + + + + + PS122/3_36-178 + + + + + + + + + + + + + + PS122/3_36-179 + + + + + + + + + + + + + + PS122/3_36-18 + + + + + + + + + + + + + + PS122/3_36-180 + + + + + + + + + + + + + + PS122/3_36-181 + + + + + + + + + + + + + + PS122/3_36-182 + + + + + + + + + + + + + + PS122/3_36-183 + + + + + + + + + + + + + + PS122/3_36-184 + + + + + + + + + + + + + + PS122/3_36-187 + + + + + + + + + + + + + + PS122/3_36-188 + + + + + + + + + + + + + + PS122/3_36-189 + + + + + + + + + + + + + + PS122/3_36-19 + + + + + + + + + + + + + + PS122/3_36-190 + + + + + + + + + + + + + + PS122/3_36-191 + + + + + + + + + + + + + + PS122/3_36-192 + + + + + + + + + + + + + + PS122/3_36-193 + + + + + + + + + + + + + + PS122/3_36-195 + + + + + + + + + + + + + + PS122/3_36-196 + + + + + + + + + + + + + + PS122/3_36-197 + + + + + + + + + + + + + + PS122/3_36-198 + + + + + + + + + + + + + + PS122/3_36-199 + + + + + + + + + + + + + + PS122/3_36-2 + + + + + + + + + + + + + + PS122/3_36-20 + + + + + + + + + + + + + + PS122/3_36-21 + + + + + + + + + + + + + + PS122/3_36-22 + + + + + + + + + + + + + + PS122/3_36-23 + + + + + + + + + + + + + + PS122/3_36-24 + + + + + + + + + + + + + + PS122/3_36-25 + + + + + + + + + + + + + + PS122/3_36-26 + + + + + + + + + + + + + + PS122/3_36-27 + + + + + + + + + + + + + + PS122/3_36-28 + + + + + + + + + + + + + + PS122/3_36-29 + + + + + + + + + + + + + + PS122/3_36-3 + + + + + + + + + + + + + + PS122/3_36-30 + + + + + + + + + + + + + + PS122/3_36-31 + + + + + + + + + + + + + + PS122/3_36-33 + + + + + + + + + + + + + + PS122/3_36-34 + + + + + + + + + + + + + + PS122/3_36-35 + + + + + + + + + + + + + + PS122/3_36-36 + + + + + + + + + + + + + + PS122/3_36-37 + + + + + + + + + + + + + + PS122/3_36-38 + + + + + + + + + + + + + + PS122/3_36-39 + + + + + + + + + + + + + + PS122/3_36-4 + + + + + + + + + + + + + + PS122/3_36-40 + + + + + + + + + + + + + + PS122/3_36-41 + + + + + + + + + + + + + + PS122/3_36-42 + + + + + + + + + + + + + + PS122/3_36-43 + + + + + + + + + + + + + + PS122/3_36-44 + + + + + + + + + + + + + + PS122/3_36-45 + + + + + + + + + + + + + + PS122/3_36-46 + + + + + + + + + + + + + + PS122/3_36-47 + + + + + + + + + + + + + + PS122/3_36-48 + + + + + + + + + + + + + + PS122/3_36-49 + + + + + + + + + + + + + + PS122/3_36-5 + + + + + + + + + + + + + + PS122/3_36-50 + + + + + + + + + + + + + + PS122/3_36-51 + + + + + + + + + + + + + + PS122/3_36-52 + + + + + + + + + + + + + + PS122/3_36-54 + + + + + + + + + + + + + + PS122/3_36-55 + + + + + + + + + + + + + + PS122/3_36-56 + + + + + + + + + + + + + + PS122/3_36-58 + + + + + + + + + + + + + + PS122/3_36-59 + + + + + + + + + + + + + + PS122/3_36-6 + + + + + + + + + + + + + + PS122/3_36-60 + + + + + + + + + + + + + + PS122/3_36-61 + + + + + + + + + + + + + + PS122/3_36-62 + + + + + + + + + + + + + + PS122/3_36-63 + + + + + + + + + + + + + + PS122/3_36-64 + + + + + + + + + + + + + + PS122/3_36-65 + + + + + + + + + + + + + + PS122/3_36-66 + + + + + + + + + + + + + + PS122/3_36-67 + + + + + + + + + + + + + + PS122/3_36-68 + + + + + + + + + + + + + + PS122/3_36-69 + + + + + + + + + + + + + + PS122/3_36-7 + + + + + + + + + + + + + + PS122/3_36-70 + + + + + + + + + + + + + + PS122/3_36-71 + + + + + + + + + + + + + + PS122/3_36-72 + + + + + + + + + + + + + + PS122/3_36-73 + + + + + + + + + + + + + + PS122/3_36-74 + + + + + + + + + + + + + + PS122/3_36-75 + + + + + + + + + + + + + + PS122/3_36-76 + + + + + + + + + + + + + + PS122/3_36-77 + + + + + + + + + + + + + + PS122/3_36-78 + + + + + + + + + + + + + + PS122/3_36-79 + + + + + + + + + + + + + + PS122/3_36-8 + + + + + + + + + + + + + + PS122/3_36-80 + + + + + + + + + + + + + + PS122/3_36-81 + + + + + + + + + + + + + + PS122/3_36-82 + + + + + + + + + + + + + + PS122/3_36-83 + + + + + + + + + + + + + + PS122/3_36-84 + + + + + + + + + + + + + + PS122/3_36-85 + + + + + + + + + + + + + + PS122/3_36-86 + + + + + + + + + + + + + + PS122/3_36-87 + + + + + + + + + + + + + + PS122/3_36-88 + + + + + + + + + + + + + + PS122/3_36-89 + + + + + + + + + + + + + + PS122/3_36-9 + + + + + + + + + + + + + + PS122/3_36-90 + + + + + + + + + + + + + + PS122/3_36-91 + + + + + + + + + + + + + + PS122/3_36-92 + + + + + + + + + + + + + + PS122/3_36-93 + + + + + + + + + + + + + + PS122/3_36-94 + + + + + + + + + + + + + + PS122/3_36-95 + + + + + + + + + + + + + + PS122/3_36-96 + + + + + + + + + + + + + + PS122/3_36-97 + + + + + + + + + + + + + + PS122/3_36-98 + + + + + + + + + + + + + + PS122/3_36-99 + + + + + + + + + + + + + + PS122/3_37-1 + + + + + + + + + + + + + + PS122/3_37-10 + + + + + + + + + + + + + + PS122/3_37-100 + + + + + + + + + + + + + + PS122/3_37-101 + + + + + + + + + + + + + + PS122/3_37-102 + + + + + + + + + + + + + + PS122/3_37-103 + + + + + + + + + + + + + + PS122/3_37-104 + + + + + + + + + + + + + + PS122/3_37-105 + + + + + + + + + + + + + + PS122/3_37-106 + + + + + + + + + + + + + + PS122/3_37-107 + + + + + + + + + + + + + + PS122/3_37-108 + + + + + + + + + + + + + + PS122/3_37-109 + + + + + + + + + + + + + + PS122/3_37-11 + + + + + + + + + + + + + + PS122/3_37-110 + + + + + + + + + + + + + + PS122/3_37-111 + + + + + + + + + + + + + + PS122/3_37-112 + + + + + + + + + + + + + + PS122/3_37-113 + + + + + + + + + + + + + + PS122/3_37-114 + + + + + + + + + + + + + + PS122/3_37-115 + + + + + + + + + + + + + + PS122/3_37-116 + + + + + + + + + + + + + + PS122/3_37-117 + + + + + + + + + + + + + + PS122/3_37-118 + + + + + + + + + + + + + + PS122/3_37-119 + + + + + + + + + + + + + + PS122/3_37-12 + + + + + + + + + + + + + + PS122/3_37-120 + + + + + + + + + + + + + + PS122/3_37-121 + + + + + + + + + + + + + + PS122/3_37-122 + + + + + + + + + + + + + + PS122/3_37-123 + + + + + + + + + + + + + + PS122/3_37-124 + + + + + + + + + + + + + + PS122/3_37-125 + + + + + + + + + + + + + + PS122/3_37-126 + + + + + + + + + + + + + + PS122/3_37-127 + + + + + + + + + + + + + + PS122/3_37-129 + + + + + + + + + + + + + + PS122/3_37-13 + + + + + + + + + + + + + + PS122/3_37-130 + + + + + + + + + + + + + + PS122/3_37-131 + + + + + + + + + + + + + + PS122/3_37-132 + + + + + + + + + + + + + + PS122/3_37-133 + + + + + + + + + + + + + + PS122/3_37-134 + + + + + + + + + + + + + + PS122/3_37-135 + + + + + + + + + + + + + + PS122/3_37-137 + + + + + + + + + + + + + + PS122/3_37-138 + + + + + + + + + + + + + + PS122/3_37-139 + + + + + + + + + + + + + + PS122/3_37-14 + + + + + + + + + + + + + + PS122/3_37-140 + + + + + + + + + + + + + + PS122/3_37-141 + + + + + + + + + + + + + + PS122/3_37-142 + + + + + + + + + + + + + + PS122/3_37-143 + + + + + + + + + + + + + + PS122/3_37-144 + + + + + + + + + + + + + + PS122/3_37-145 + + + + + + + + + + + + + + PS122/3_37-146 + + + + + + + + + + + + + + PS122/3_37-147 + + + + + + + + + + + + + + PS122/3_37-148 + + + + + + + + + + + + + + PS122/3_37-149 + + + + + + + + + + + + + + PS122/3_37-15 + + + + + + + + + + + + + + PS122/3_37-150 + + + + + + + + + + + + + + PS122/3_37-151 + + + + + + + + + + + + + + PS122/3_37-152 + + + + + + + + + + + + + + PS122/3_37-153 + + + + + + + + + + + + + + PS122/3_37-155 + + + + + + + + + + + + + + PS122/3_37-156 + + + + + + + + + + + + + + PS122/3_37-157 + + + + + + + + + + + + + + PS122/3_37-158 + + + + + + + + + + + + + + PS122/3_37-159 + + + + + + + + + + + + + + PS122/3_37-16 + + + + + + + + + + + + + + PS122/3_37-160 + + + + + + + + + + + + + + PS122/3_37-162 + + + + + + + + + + + + + + PS122/3_37-163 + + + + + + + + + + + + + + PS122/3_37-164 + + + + + + + + + + + + + + PS122/3_37-165 + + + + + + + + + + + + + + PS122/3_37-169 + + + + + + + + + + + + + + PS122/3_37-17 + + + + + + + + + + + + + + PS122/3_37-170 + + + + + + + + + + + + + + PS122/3_37-171 + + + + + + + + + + + + + + PS122/3_37-172 + + + + + + + + + + + + + + PS122/3_37-173 + + + + + + + + + + + + + + PS122/3_37-174 + + + + + + + + + + + + + + PS122/3_37-175 + + + + + + + + + + + + + + PS122/3_37-18 + + + + + + + + + + + + + + PS122/3_37-19 + + + + + + + + + + + + + + PS122/3_37-2 + + + + + + + + + + + + + + PS122/3_37-20 + + + + + + + + + + + + + + PS122/3_37-21 + + + + + + + + + + + + + + PS122/3_37-22 + + + + + + + + + + + + + + PS122/3_37-23 + + + + + + + + + + + + + + PS122/3_37-24 + + + + + + + + + + + + + + PS122/3_37-25 + + + + + + + + + + + + + + PS122/3_37-26 + + + + + + + + + + + + + + PS122/3_37-27 + + + + + + + + + + + + + + PS122/3_37-28 + + + + + + + + + + + + + + PS122/3_37-29 + + + + + + + + + + + + + + PS122/3_37-3 + + + + + + + + + + + + + + PS122/3_37-30 + + + + + + + + + + + + + + PS122/3_37-31 + + + + + + + + + + + + + + PS122/3_37-32 + + + + + + + + + + + + + + PS122/3_37-33 + + + + + + + + + + + + + + PS122/3_37-34 + + + + + + + + + + + + + + PS122/3_37-35 + + + + + + + + + + + + + + PS122/3_37-36 + + + + + + + + + + + + + + PS122/3_37-37 + + + + + + + + + + + + + + PS122/3_37-38 + + + + + + + + + + + + + + PS122/3_37-39 + + + + + + + + + + + + + + PS122/3_37-4 + + + + + + + + + + + + + + PS122/3_37-40 + + + + + + + + + + + + + + PS122/3_37-41 + + + + + + + + + + + + + + PS122/3_37-42 + + + + + + + + + + + + + + PS122/3_37-43 + + + + + + + + + + + + + + PS122/3_37-44 + + + + + + + + + + + + + + PS122/3_37-45 + + + + + + + + + + + + + + PS122/3_37-46 + + + + + + + + + + + + + + PS122/3_37-47 + + + + + + + + + + + + + + PS122/3_37-49 + + + + + + + + + + + + + + PS122/3_37-5 + + + + + + + + + + + + + + PS122/3_37-50 + + + + + + + + + + + + + + PS122/3_37-51 + + + + + + + + + + + + + + PS122/3_37-52 + + + + + + + + + + + + + + PS122/3_37-53 + + + + + + + + + + + + + + PS122/3_37-54 + + + + + + + + + + + + + + PS122/3_37-55 + + + + + + + + + + + + + + PS122/3_37-56 + + + + + + + + + + + + + + PS122/3_37-57 + + + + + + + + + + + + + + PS122/3_37-58 + + + + + + + + + + + + + + PS122/3_37-59 + + + + + + + + + + + + + + PS122/3_37-6 + + + + + + + + + + + + + + PS122/3_37-60 + + + + + + + + + + + + + + PS122/3_37-61 + + + + + + + + + + + + + + PS122/3_37-62 + + + + + + + + + + + + + + PS122/3_37-63 + + + + + + + + + + + + + + PS122/3_37-65 + + + + + + + + + + + + + + PS122/3_37-66 + + + + + + + + + + + + + + PS122/3_37-67 + + + + + + + + + + + + + + PS122/3_37-68 + + + + + + + + + + + + + + PS122/3_37-69 + + + + + + + + + + + + + + PS122/3_37-7 + + + + + + + + + + + + + + PS122/3_37-70 + + + + + + + + + + + + + + PS122/3_37-71 + + + + + + + + + + + + + + PS122/3_37-72 + + + + + + + + + + + + + + PS122/3_37-73 + + + + + + + + + + + + + + PS122/3_37-74 + + + + + + + + + + + + + + PS122/3_37-75 + + + + + + + + + + + + + + PS122/3_37-76 + + + + + + + + + + + + + + PS122/3_37-77 + + + + + + + + + + + + + + PS122/3_37-78 + + + + + + + + + + + + + + PS122/3_37-79 + + + + + + + + + + + + + + PS122/3_37-8 + + + + + + + + + + + + + + PS122/3_37-80 + + + + + + + + + + + + + + PS122/3_37-81 + + + + + + + + + + + + + + PS122/3_37-82 + + + + + + + + + + + + + + PS122/3_37-83 + + + + + + + + + + + + + + PS122/3_37-84 + + + + + + + + + + + + + + PS122/3_37-85 + + + + + + + + + + + + + + PS122/3_37-86 + + + + + + + + + + + + + + PS122/3_37-87 + + + + + + + + + + + + + + PS122/3_37-88 + + + + + + + + + + + + + + PS122/3_37-89 + + + + + + + + + + + + + + PS122/3_37-9 + + + + + + + + + + + + + + PS122/3_37-90 + + + + + + + + + + + + + + PS122/3_37-91 + + + + + + + + + + + + + + PS122/3_37-92 + + + + + + + + + + + + + + PS122/3_37-93 + + + + + + + + + + + + + + PS122/3_37-94 + + + + + + + + + + + + + + PS122/3_37-95 + + + + + + + + + + + + + + PS122/3_37-97 + + + + + + + + + + + + + + PS122/3_37-98 + + + + + + + + + + + + + + PS122/3_37-99 + + + + + + + + + + + + + + PS122/3_38-1 + + + + + + + + + + + + + + PS122/3_38-10 + + + + + + + + + + + + + + PS122/3_38-100 + + + + + + + + + + + + + + PS122/3_38-101 + + + + + + + + + + + + + + PS122/3_38-102 + + + + + + + + + + + + + + PS122/3_38-103 + + + + + + + + + + + + + + PS122/3_38-104 + + + + + + + + + + + + + + PS122/3_38-105 + + + + + + + + + + + + + + PS122/3_38-106 + + + + + + + + + + + + + + PS122/3_38-107 + + + + + + + + + + + + + + PS122/3_38-108 + + + + + + + + + + + + + + PS122/3_38-109 + + + + + + + + + + + + + + PS122/3_38-11 + + + + + + + + + + + + + + PS122/3_38-110 + + + + + + + + + + + + + + PS122/3_38-111 + + + + + + + + + + + + + + PS122/3_38-112 + + + + + + + + + + + + + + PS122/3_38-113 + + + + + + + + + + + + + + PS122/3_38-114 + + + + + + + + + + + + + + PS122/3_38-115 + + + + + + + + + + + + + + PS122/3_38-116 + + + + + + + + + + + + + + PS122/3_38-117 + + + + + + + + + + + + + + PS122/3_38-118 + + + + + + + + + + + + + + PS122/3_38-119 + + + + + + + + + + + + + + PS122/3_38-12 + + + + + + + + + + + + + + PS122/3_38-120 + + + + + + + + + + + + + + PS122/3_38-121 + + + + + + + + + + + + + + PS122/3_38-122 + + + + + + + + + + + + + + PS122/3_38-123 + + + + + + + + + + + + + + PS122/3_38-124 + + + + + + + + + + + + + + PS122/3_38-125 + + + + + + + + + + + + + + PS122/3_38-126 + + + + + + + + + + + + + + PS122/3_38-127 + + + + + + + + + + + + + + PS122/3_38-128 + + + + + + + + + + + + + + PS122/3_38-129 + + + + + + + + + + + + + + PS122/3_38-13 + + + + + + + + + + + + + + PS122/3_38-130 + + + + + + + + + + + + + + PS122/3_38-131 + + + + + + + + + + + + + + PS122/3_38-132 + + + + + + + + + + + + + + PS122/3_38-133 + + + + + + + + + + + + + + PS122/3_38-134 + + + + + + + + + + + + + + PS122/3_38-135 + + + + + + + + + + + + + + PS122/3_38-136 + + + + + + + + + + + + + + PS122/3_38-137 + + + + + + + + + + + + + + PS122/3_38-138 + + + + + + + + + + + + + + PS122/3_38-139 + + + + + + + + + + + + + + PS122/3_38-14 + + + + + + + + + + + + + + PS122/3_38-140 + + + + + + + + + + + + + + PS122/3_38-141 + + + + + + + + + + + + + + PS122/3_38-142 + + + + + + + + + + + + + + PS122/3_38-143 + + + + + + + + + + + + + + PS122/3_38-144 + + + + + + + + + + + + + + PS122/3_38-146 + + + + + + + + + + + + + + PS122/3_38-147 + + + + + + + + + + + + + + PS122/3_38-149 + + + + + + + + + + + + + + PS122/3_38-15 + + + + + + + + + + + + + + PS122/3_38-150 + + + + + + + + + + + + + + PS122/3_38-151 + + + + + + + + + + + + + + PS122/3_38-152 + + + + + + + + + + + + + + PS122/3_38-153 + + + + + + + + + + + + + + PS122/3_38-154 + + + + + + + + + + + + + + PS122/3_38-156 + + + + + + + + + + + + + + PS122/3_38-157 + + + + + + + + + + + + + + PS122/3_38-158 + + + + + + + + + + + + + + PS122/3_38-159 + + + + + + + + + + + + + + PS122/3_38-16 + + + + + + + + + + + + + + PS122/3_38-160 + + + + + + + + + + + + + + PS122/3_38-161 + + + + + + + + + + + + + + PS122/3_38-162 + + + + + + + + + + + + + + PS122/3_38-163 + + + + + + + + + + + + + + PS122/3_38-164 + + + + + + + + + + + + + + PS122/3_38-165 + + + + + + + + + + + + + + PS122/3_38-166 + + + + + + + + + + + + + + PS122/3_38-17 + + + + + + + + + + + + + + PS122/3_38-19 + + + + + + + + + + + + + + PS122/3_38-2 + + + + + + + + + + + + + + PS122/3_38-20 + + + + + + + + + + + + + + PS122/3_38-21 + + + + + + + + + + + + + + PS122/3_38-22 + + + + + + + + + + + + + + PS122/3_38-23 + + + + + + + + + + + + + + PS122/3_38-24 + + + + + + + + + + + + + + PS122/3_38-25 + + + + + + + + + + + + + + PS122/3_38-26 + + + + + + + + + + + + + + PS122/3_38-27 + + + + + + + + + + + + + + PS122/3_38-28 + + + + + + + + + + + + + + PS122/3_38-29 + + + + + + + + + + + + + + PS122/3_38-3 + + + + + + + + + + + + + + PS122/3_38-30 + + + + + + + + + + + + + + PS122/3_38-31 + + + + + + + + + + + + + + PS122/3_38-32 + + + + + + + + + + + + + + PS122/3_38-33 + + + + + + + + + + + + + + PS122/3_38-34 + + + + + + + + + + + + + + PS122/3_38-35 + + + + + + + + + + + + + + PS122/3_38-36 + + + + + + + + + + + + + + PS122/3_38-37 + + + + + + + + + + + + + + PS122/3_38-38 + + + + + + + + + + + + + + PS122/3_38-39 + + + + + + + + + + + + + + PS122/3_38-4 + + + + + + + + + + + + + + PS122/3_38-40 + + + + + + + + + + + + + + PS122/3_38-41 + + + + + + + + + + + + + + PS122/3_38-42 + + + + + + + + + + + + + + PS122/3_38-43 + + + + + + + + + + + + + + PS122/3_38-44 + + + + + + + + + + + + + + PS122/3_38-45 + + + + + + + + + + + + + + PS122/3_38-46 + + + + + + + + + + + + + + PS122/3_38-47 + + + + + + + + + + + + + + PS122/3_38-48 + + + + + + + + + + + + + + PS122/3_38-49 + + + + + + + + + + + + + + PS122/3_38-5 + + + + + + + + + + + + + + PS122/3_38-50 + + + + + + + + + + + + + + PS122/3_38-51 + + + + + + + + + + + + + + PS122/3_38-52 + + + + + + + + + + + + + + PS122/3_38-53 + + + + + + + + + + + + + + PS122/3_38-54 + + + + + + + + + + + + + + PS122/3_38-55 + + + + + + + + + + + + + + PS122/3_38-56 + + + + + + + + + + + + + + PS122/3_38-57 + + + + + + + + + + + + + + PS122/3_38-58 + + + + + + + + + + + + + + PS122/3_38-59 + + + + + + + + + + + + + + PS122/3_38-6 + + + + + + + + + + + + + + PS122/3_38-60 + + + + + + + + + + + + + + PS122/3_38-61 + + + + + + + + + + + + + + PS122/3_38-62 + + + + + + + + + + + + + + PS122/3_38-63 + + + + + + + + + + + + + + PS122/3_38-64 + + + + + + + + + + + + + + PS122/3_38-65 + + + + + + + + + + + + + + PS122/3_38-66 + + + + + + + + + + + + + + PS122/3_38-67 + + + + + + + + + + + + + + PS122/3_38-68 + + + + + + + + + + + + + + PS122/3_38-69 + + + + + + + + + + + + + + PS122/3_38-70 + + + + + + + + + + + + + + PS122/3_38-71 + + + + + + + + + + + + + + PS122/3_38-72 + + + + + + + + + + + + + + PS122/3_38-73 + + + + + + + + + + + + + + PS122/3_38-74 + + + + + + + + + + + + + + PS122/3_38-75 + + + + + + + + + + + + + + PS122/3_38-76 + + + + + + + + + + + + + + PS122/3_38-77 + + + + + + + + + + + + + + PS122/3_38-78 + + + + + + + + + + + + + + PS122/3_38-79 + + + + + + + + + + + + + + PS122/3_38-80 + + + + + + + + + + + + + + PS122/3_38-81 + + + + + + + + + + + + + + PS122/3_38-82 + + + + + + + + + + + + + + PS122/3_38-83 + + + + + + + + + + + + + + PS122/3_38-84 + + + + + + + + + + + + + + PS122/3_38-85 + + + + + + + + + + + + + + PS122/3_38-86 + + + + + + + + + + + + + + PS122/3_38-87 + + + + + + + + + + + + + + PS122/3_38-88 + + + + + + + + + + + + + + PS122/3_38-89 + + + + + + + + + + + + + + PS122/3_38-9 + + + + + + + + + + + + + + PS122/3_38-90 + + + + + + + + + + + + + + PS122/3_38-91 + + + + + + + + + + + + + + PS122/3_38-92 + + + + + + + + + + + + + + PS122/3_38-93 + + + + + + + + + + + + + + PS122/3_38-94 + + + + + + + + + + + + + + PS122/3_38-95 + + + + + + + + + + + + + + PS122/3_38-96 + + + + + + + + + + + + + + PS122/3_38-97 + + + + + + + + + + + + + + PS122/3_38-98 + + + + + + + + + + + + + + PS122/3_38-99 + + + + + + + + + + + + + + PS122/3_39-1 + + + + + + + + + + + + + + PS122/3_39-10 + + + + + + + + + + + + + + PS122/3_39-100 + + + + + + + + + + + + + + PS122/3_39-101 + + + + + + + + + + + + + + PS122/3_39-102 + + + + + + + + + + + + + + PS122/3_39-103 + + + + + + + + + + + + + + PS122/3_39-104 + + + + + + + + + + + + + + PS122/3_39-105 + + + + + + + + + + + + + + PS122/3_39-106 + + + + + + + + + + + + + + PS122/3_39-107 + + + + + + + + + + + + + + PS122/3_39-108 + + + + + + + + + + + + + + PS122/3_39-109 + + + + + + + + + + + + + + PS122/3_39-11 + + + + + + + + + + + + + + PS122/3_39-110 + + + + + + + + + + + + + + PS122/3_39-111 + + + + + + + + + + + + + + PS122/3_39-112 + + + + + + + + + + + + + + PS122/3_39-113 + + + + + + + + + + + + + + PS122/3_39-114 + + + + + + + + + + + + + + PS122/3_39-115 + + + + + + + + + + + + + + PS122/3_39-116 + + + + + + + + + + + + + + PS122/3_39-117 + + + + + + + + + + + + + + PS122/3_39-119 + + + + + + + + + + + + + + PS122/3_39-12 + + + + + + + + + + + + + + PS122/3_39-120 + + + + + + + + + + + + + + PS122/3_39-121 + + + + + + + + + + + + + + PS122/3_39-122 + + + + + + + + + + + + + + PS122/3_39-123 + + + + + + + + + + + + + + PS122/3_39-124 + + + + + + + + + + + + + + PS122/3_39-125 + + + + + + + + + + + + + + PS122/3_39-126 + + + + + + + + + + + + + + PS122/3_39-127 + + + + + + + + + + + + + + PS122/3_39-128 + + + + + + + + + + + + + + PS122/3_39-129 + + + + + + + + + + + + + + PS122/3_39-13 + + + + + + + + + + + + + + PS122/3_39-130 + + + + + + + + + + + + + + PS122/3_39-131 + + + + + + + + + + + + + + PS122/3_39-132 + + + + + + + + + + + + + + PS122/3_39-133 + + + + + + + + + + + + + + PS122/3_39-134 + + + + + + + + + + + + + + PS122/3_39-135 + + + + + + + + + + + + + + PS122/3_39-137 + + + + + + + + + + + + + + PS122/3_39-138 + + + + + + + + + + + + + + PS122/3_39-139 + + + + + + + + + + + + + + PS122/3_39-14 + + + + + + + + + + + + + + PS122/3_39-142 + + + + + + + + + + + + + + PS122/3_39-144 + + + + + + + + + + + + + + PS122/3_39-145 + + + + + + + + + + + + + + PS122/3_39-146 + + + + + + + + + + + + + + PS122/3_39-147 + + + + + + + + + + + + + + PS122/3_39-149 + + + + + + + + + + + + + + PS122/3_39-15 + + + + + + + + + + + + + + PS122/3_39-150 + + + + + + + + + + + + + + PS122/3_39-151 + + + + + + + + + + + + + + PS122/3_39-152 + + + + + + + + + + + + + + PS122/3_39-16 + + + + + + + + + + + + + + PS122/3_39-17 + + + + + + + + + + + + + + PS122/3_39-18 + + + + + + + + + + + + + + PS122/3_39-19 + + + + + + + + + + + + + + PS122/3_39-2 + + + + + + + + + + + + + + PS122/3_39-20 + + + + + + + + + + + + + + PS122/3_39-21 + + + + + + + + + + + + + + PS122/3_39-22 + + + + + + + + + + + + + + PS122/3_39-23 + + + + + + + + + + + + + + PS122/3_39-24 + + + + + + + + + + + + + + PS122/3_39-25 + + + + + + + + + + + + + + PS122/3_39-26 + + + + + + + + + + + + + + PS122/3_39-28 + + + + + + + + + + + + + + PS122/3_39-29 + + + + + + + + + + + + + + PS122/3_39-3 + + + + + + + + + + + + + + PS122/3_39-30 + + + + + + + + + + + + + + PS122/3_39-31 + + + + + + + + + + + + + + PS122/3_39-32 + + + + + + + + + + + + + + PS122/3_39-33 + + + + + + + + + + + + + + PS122/3_39-34 + + + + + + + + + + + + + + PS122/3_39-35 + + + + + + + + + + + + + + PS122/3_39-36 + + + + + + + + + + + + + + PS122/3_39-37 + + + + + + + + + + + + + + PS122/3_39-38 + + + + + + + + + + + + + + PS122/3_39-39 + + + + + + + + + + + + + + PS122/3_39-4 + + + + + + + + + + + + + + PS122/3_39-40 + + + + + + + + + + + + + + PS122/3_39-41 + + + + + + + + + + + + + + PS122/3_39-42 + + + + + + + + + + + + + + PS122/3_39-43 + + + + + + + + + + + + + + PS122/3_39-44 + + + + + + + + + + + + + + PS122/3_39-45 + + + + + + + + + + + + + + PS122/3_39-46 + + + + + + + + + + + + + + PS122/3_39-47 + + + + + + + + + + + + + + PS122/3_39-48 + + + + + + + + + + + + + + PS122/3_39-49 + + + + + + + + + + + + + + PS122/3_39-5 + + + + + + + + + + + + + + PS122/3_39-50 + + + + + + + + + + + + + + PS122/3_39-51 + + + + + + + + + + + + + + PS122/3_39-52 + + + + + + + + + + + + + + PS122/3_39-53 + + + + + + + + + + + + + + PS122/3_39-54 + + + + + + + + + + + + + + PS122/3_39-55 + + + + + + + + + + + + + + PS122/3_39-56 + + + + + + + + + + + + + + PS122/3_39-57 + + + + + + + + + + + + + + PS122/3_39-58 + + + + + + + + + + + + + + PS122/3_39-59 + + + + + + + + + + + + + + PS122/3_39-6 + + + + + + + + + + + + + + PS122/3_39-60 + + + + + + + + + + + + + + PS122/3_39-61 + + + + + + + + + + + + + + PS122/3_39-62 + + + + + + + + + + + + + + PS122/3_39-63 + + + + + + + + + + + + + + PS122/3_39-64 + + + + + + + + + + + + + + PS122/3_39-65 + + + + + + + + + + + + + + PS122/3_39-66 + + + + + + + + + + + + + + PS122/3_39-67 + + + + + + + + + + + + + + PS122/3_39-68 + + + + + + + + + + + + + + PS122/3_39-69 + + + + + + + + + + + + + + PS122/3_39-7 + + + + + + + + + + + + + + PS122/3_39-70 + + + + + + + + + + + + + + PS122/3_39-71 + + + + + + + + + + + + + + PS122/3_39-72 + + + + + + + + + + + + + + PS122/3_39-73 + + + + + + + + + + + + + + PS122/3_39-74 + + + + + + + + + + + + + + PS122/3_39-75 + + + + + + + + + + + + + + PS122/3_39-76 + + + + + + + + + + + + + + PS122/3_39-77 + + + + + + + + + + + + + + PS122/3_39-78 + + + + + + + + + + + + + + PS122/3_39-79 + + + + + + + + + + + + + + PS122/3_39-8 + + + + + + + + + + + + + + PS122/3_39-80 + + + + + + + + + + + + + + PS122/3_39-81 + + + + + + + + + + + + + + PS122/3_39-82 + + + + + + + + + + + + + + PS122/3_39-83 + + + + + + + + + + + + + + PS122/3_39-84 + + + + + + + + + + + + + + PS122/3_39-85 + + + + + + + + + + + + + + PS122/3_39-86 + + + + + + + + + + + + + + PS122/3_39-87 + + + + + + + + + + + + + + PS122/3_39-88 + + + + + + + + + + + + + + PS122/3_39-89 + + + + + + + + + + + + + + PS122/3_39-9 + + + + + + + + + + + + + + PS122/3_39-90 + + + + + + + + + + + + + + PS122/3_39-91 + + + + + + + + + + + + + + PS122/3_39-92 + + + + + + + + + + + + + + PS122/3_39-93 + + + + + + + + + + + + + + PS122/3_39-94 + + + + + + + + + + + + + + PS122/3_39-95 + + + + + + + + + + + + + + PS122/3_39-96 + + + + + + + + + + + + + + PS122/3_39-97 + + + + + + + + + + + + + + PS122/3_39-98 + + + + + + + + + + + + + + PS122/3_39-99 + + + + + + + + + + + + + + PS122/3_40-1 + + + + + + + + + + + + + + PS122/3_40-10 + + + + + + + + + + + + + + PS122/3_40-11 + + + + + + + + + + + + + + PS122/3_40-12 + + + + + + + + + + + + + + PS122/3_40-13 + + + + + + + + + + + + + + PS122/3_40-14 + + + + + + + + + + + + + + PS122/3_40-15 + + + + + + + + + + + + + + PS122/3_40-16 + + + + + + + + + + + + + + PS122/3_40-17 + + + + + + + + + + + + + + PS122/3_40-18 + + + + + + + + + + + + + + PS122/3_40-19 + + + + + + + + + + + + + + PS122/3_40-2 + + + + + + + + + + + + + + PS122/3_40-20 + + + + + + + + + + + + + + PS122/3_40-21 + + + + + + + + + + + + + + PS122/3_40-22 + + + + + + + + + + + + + + PS122/3_40-23 + + + + + + + + + + + + + + PS122/3_40-24 + + + + + + + + + + + + + + PS122/3_40-25 + + + + + + + + + + + + + + PS122/3_40-26 + + + + + + + + + + + + + + PS122/3_40-27 + + + + + + + + + + + + + + PS122/3_40-28 + + + + + + + + + + + + + + PS122/3_40-29 + + + + + + + + + + + + + + PS122/3_40-3 + + + + + + + + + + + + + + PS122/3_40-30 + + + + + + + + + + + + + + PS122/3_40-31 + + + + + + + + + + + + + + PS122/3_40-32 + + + + + + + + + + + + + + PS122/3_40-33 + + + + + + + + + + + + + + PS122/3_40-34 + + + + + + + + + + + + + + PS122/3_40-35 + + + + + + + + + + + + + + PS122/3_40-36 + + + + + + + + + + + + + + PS122/3_40-37 + + + + + + + + + + + + + + PS122/3_40-38 + + + + + + + + + + + + + + PS122/3_40-39 + + + + + + + + + + + + + + PS122/3_40-4 + + + + + + + + + + + + + + PS122/3_40-40 + + + + + + + + + + + + + + PS122/3_40-41 + + + + + + + + + + + + + + PS122/3_40-42 + + + + + + + + + + + + + + PS122/3_40-43 + + + + + + + + + + + + + + PS122/3_40-44 + + + + + + + + + + + + + + PS122/3_40-45 + + + + + + + + + + + + + + PS122/3_40-46 + + + + + + + + + + + + + + PS122/3_40-47 + + + + + + + + + + + + + + PS122/3_40-48 + + + + + + + + + + + + + + PS122/3_40-49 + + + + + + + + + + + + + + PS122/3_40-5 + + + + + + + + + + + + + + PS122/3_40-50 + + + + + + + + + + + + + + PS122/3_40-51 + + + + + + + + + + + + + + PS122/3_40-52 + + + + + + + + + + + + + + PS122/3_40-53 + + + + + + + + + + + + + + PS122/3_40-54 + + + + + + + + + + + + + + PS122/3_40-55 + + + + + + + + + + + + + + PS122/3_40-56 + + + + + + + + + + + + + + PS122/3_40-57 + + + + + + + + + + + + + + PS122/3_40-58 + + + + + + + + + + + + + + PS122/3_40-59 + + + + + + + + + + + + + + PS122/3_40-6 + + + + + + + + + + + + + + PS122/3_40-60 + + + + + + + + + + + + + + PS122/3_40-61 + + + + + + + + + + + + + + PS122/3_40-62 + + + + + + + + + + + + + + PS122/3_40-7 + + + + + + + + + + + + + + PS122/3_40-8 + + + + + + + + + + + + + + PS122/3_40-9 + + + + + + + + + + + + + + PS122/3_41-1 + + + + + + + + + + + + + + PS122/3_41-10 + + + + + + + + + + + + + + PS122/3_41-11 + + + + + + + + + + + + + + PS122/3_41-12 + + + + + + + + + + + + + + PS122/3_41-13 + + + + + + + + + + + + + + PS122/3_41-14 + + + + + + + + + + + + + + PS122/3_41-15 + + + + + + + + + + + + + + PS122/3_41-16 + + + + + + + + + + + + + + PS122/3_41-17 + + + + + + + + + + + + + + PS122/3_41-18 + + + + + + + + + + + + + + PS122/3_41-19 + + + + + + + + + + + + + + PS122/3_41-2 + + + + + + + + + + + + + + PS122/3_41-20 + + + + + + + + + + + + + + PS122/3_41-21 + + + + + + + + + + + + + + PS122/3_41-22 + + + + + + + + + + + + + + PS122/3_41-23 + + + + + + + + + + + + + + PS122/3_41-24 + + + + + + + + + + + + + + PS122/3_41-25 + + + + + + + + + + + + + + PS122/3_41-26 + + + + + + + + + + + + + + PS122/3_41-27 + + + + + + + + + + + + + + PS122/3_41-28 + + + + + + + + + + + + + + PS122/3_41-29 + + + + + + + + + + + + + + PS122/3_41-3 + + + + + + + + + + + + + + PS122/3_41-30 + + + + + + + + + + + + + + PS122/3_41-31 + + + + + + + + + + + + + + PS122/3_41-32 + + + + + + + + + + + + + + PS122/3_41-33 + + + + + + + + + + + + + + PS122/3_41-34 + + + + + + + + + + + + + + PS122/3_41-35 + + + + + + + + + + + + + + PS122/3_41-36 + + + + + + + + + + + + + + PS122/3_41-37 + + + + + + + + + + + + + + PS122/3_41-38 + + + + + + + + + + + + + + PS122/3_41-4 + + + + + + + + + + + + + + PS122/3_41-40 + + + + + + + + + + + + + + PS122/3_41-41 + + + + + + + + + + + + + + PS122/3_41-42 + + + + + + + + + + + + + + PS122/3_41-43 + + + + + + + + + + + + + + PS122/3_41-44 + + + + + + + + + + + + + + PS122/3_41-45 + + + + + + + + + + + + + + PS122/3_41-46 + + + + + + + + + + + + + + PS122/3_41-47 + + + + + + + + + + + + + + PS122/3_41-48 + + + + + + + + + + + + + + PS122/3_41-49 + + + + + + + + + + + + + + PS122/3_41-50 + + + + + + + + + + + + + + PS122/3_41-51 + + + + + + + + + + + + + + PS122/3_41-52 + + + + + + + + + + + + + + PS122/3_41-53 + + + + + + + + + + + + + + PS122/3_41-54 + + + + + + + + + + + + + + PS122/3_41-6 + + + + + + + + + + + + + + PS122/3_41-7 + + + + + + + + + + + + + + PS122/3_41-8 + + + + + + + + + + + + + + PS122/3_41-9 + + + + + + + + + + + + + + PS122/3_42-1 + + + + + + + + + + + + + + PS122/3_42-10 + + + + + + + + + + + + + + PS122/3_42-11 + + + + + + + + + + + + + + PS122/3_42-12 + + + + + + + + + + + + + + PS122/3_42-13 + + + + + + + + + + + + + + PS122/3_42-14 + + + + + + + + + + + + + + PS122/3_42-15 + + + + + + + + + + + + + + PS122/3_42-16 + + + + + + + + + + + + + + PS122/3_42-17 + + + + + + + + + + + + + + PS122/3_42-18 + + + + + + + + + + + + + + PS122/3_42-19 + + + + + + + + + + + + + + PS122/3_42-2 + + + + + + + + + + + + + + PS122/3_42-20 + + + + + + + + + + + + + + PS122/3_42-21 + + + + + + + + + + + + + + PS122/3_42-22 + + + + + + + + + + + + + + PS122/3_42-23 + + + + + + + + + + + + + + PS122/3_42-24 + + + + + + + + + + + + + + PS122/3_42-25 + + + + + + + + + + + + + + PS122/3_42-26 + + + + + + + + + + + + + + PS122/3_42-27 + + + + + + + + + + + + + + PS122/3_42-28 + + + + + + + + + + + + + + PS122/3_42-29 + + + + + + + + + + + + + + PS122/3_42-3 + + + + + + + + + + + + + + PS122/3_42-30 + + + + + + + + + + + + + + PS122/3_42-31 + + + + + + + + + + + + + + PS122/3_42-32 + + + + + + + + + + + + + + PS122/3_42-33 + + + + + + + + + + + + + + PS122/3_42-34 + + + + + + + + + + + + + + PS122/3_42-35 + + + + + + + + + + + + + + PS122/3_42-36 + + + + + + + + + + + + + + PS122/3_42-37 + + + + + + + + + + + + + + PS122/3_42-38 + + + + + + + + + + + + + + PS122/3_42-39 + + + + + + + + + + + + + + PS122/3_42-4 + + + + + + + + + + + + + + PS122/3_42-40 + + + + + + + + + + + + + + PS122/3_42-41 + + + + + + + + + + + + + + PS122/3_42-42 + + + + + + + + + + + + + + PS122/3_42-43 + + + + + + + + + + + + + + PS122/3_42-44 + + + + + + + + + + + + + + PS122/3_42-45 + + + + + + + + + + + + + + PS122/3_42-46 + + + + + + + + + + + + + + PS122/3_42-47 + + + + + + + + + + + + + + PS122/3_42-48 + + + + + + + + + + + + + + PS122/3_42-49 + + + + + + + + + + + + + + PS122/3_42-5 + + + + + + + + + + + + + + PS122/3_42-50 + + + + + + + + + + + + + + PS122/3_42-51 + + + + + + + + + + + + + + PS122/3_42-52 + + + + + + + + + + + + + + PS122/3_42-53 + + + + + + + + + + + + + + PS122/3_42-54 + + + + + + + + + + + + + + PS122/3_42-55 + + + + + + + + + + + + + + PS122/3_42-56 + + + + + + + + + + + + + + PS122/3_42-57 + + + + + + + + + + + + + + PS122/3_42-58 + + + + + + + + + + + + + + PS122/3_42-59 + + + + + + + + + + + + + + PS122/3_42-6 + + + + + + + + + + + + + + PS122/3_42-60 + + + + + + + + + + + + + + PS122/3_42-61 + + + + + + + + + + + + + + PS122/3_42-62 + + + + + + + + + + + + + + PS122/3_42-63 + + + + + + + + + + + + + + PS122/3_42-64 + + + + + + + + + + + + + + PS122/3_42-65 + + + + + + + + + + + + + + PS122/3_42-66 + + + + + + + + + + + + + + PS122/3_42-67 + + + + + + + + + + + + + + PS122/3_42-68 + + + + + + + + + + + + + + PS122/3_42-69 + + + + + + + + + + + + + + PS122/3_42-7 + + + + + + + + + + + + + + PS122/3_42-70 + + + + + + + + + + + + + + PS122/3_42-71 + + + + + + + + + + + + + + PS122/3_42-72 + + + + + + + + + + + + + + PS122/3_42-8 + + + + + + + + + + + + + + PS122/3_42-9 + + + + + + + + + + + + + + PS122/4_0_Underway-10 + + + + + + + + + + + + + + PS122/4_0_Underway-11 + + + + + + + + + + + + + + PS122/4_0_Underway-17 + + + + + + + + + + + + + + PS122/4_0_Underway-20 + + + + + + + + + + + + + + PS122/4_0_Underway-25 + + + + + + + + + + + + + + PS122/4_0_Underway-28 + + + + + + + + + + + + + + PS122/4_0_Underway-29 + + + + + + + + + + + + + + PS122/4_0_Underway-3 + + + + + + + + + + + + + + PS122/4_0_Underway-34 + + + + + + + + + + + + + + PS122/4_0_Underway-35 + + + + + + + + + + + + + + PS122/4_0_Underway-36 + + + + + + + + + + + + + + PS122/4_0_Underway-41 + + + + + + + + + + + + + + PS122/4_0_Underway-42 + + + + + + + + + + + + + + PS122/4_0_Underway-6 + + + + + + + + + + + + + + PS122/4_0_Underway-9 + + + + + + + + + + + + + + PS122/4_43-10 + + + + + + + + + + + + + + PS122/4_43-100 + + + + + + + + + + + + + + PS122/4_43-101 + + + + + + + + + + + + + + PS122/4_43-103 + + + + + + + + + + + + + + PS122/4_43-104 + + + + + + + + + + + + + + PS122/4_43-106 + + + + + + + + + + + + + + PS122/4_43-107 + + + + + + + + + + + + + + PS122/4_43-108 + + + + + + + + + + + + + + PS122/4_43-109 + + + + + + + + + + + + + + PS122/4_43-11 + + + + + + + + + + + + + + PS122/4_43-110 + + + + + + + + + + + + + + PS122/4_43-111 + + + + + + + + + + + + + + PS122/4_43-112 + + + + + + + + + + + + + + PS122/4_43-113 + + + + + + + + + + + + + + PS122/4_43-114 + + + + + + + + + + + + + + PS122/4_43-115 + + + + + + + + + + + + + + PS122/4_43-116 + + + + + + + + + + + + + + PS122/4_43-117 + + + + + + + + + + + + + + PS122/4_43-118 + + + + + + + + + + + + + + PS122/4_43-119 + + + + + + + + + + + + + + PS122/4_43-12 + + + + + + + + + + + + + + PS122/4_43-120 + + + + + + + + + + + + + + PS122/4_43-121 + + + + + + + + + + + + + + PS122/4_43-122 + + + + + + + + + + + + + + PS122/4_43-123 + + + + + + + + + + + + + + PS122/4_43-124 + + + + + + + + + + + + + + PS122/4_43-125 + + + + + + + + + + + + + + PS122/4_43-127 + + + + + + + + + + + + + + PS122/4_43-128 + + + + + + + + + + + + + + PS122/4_43-13 + + + + + + + + + + + + + + PS122/4_43-130 + + + + + + + + + + + + + + PS122/4_43-131 + + + + + + + + + + + + + + PS122/4_43-132 + + + + + + + + + + + + + + PS122/4_43-133 + + + + + + + + + + + + + + PS122/4_43-134 + + + + + + + + + + + + + + PS122/4_43-135 + + + + + + + + + + + + + + PS122/4_43-136 + + + + + + + + + + + + + + PS122/4_43-137 + + + + + + + + + + + + + + PS122/4_43-138 + + + + + + + + + + + + + + PS122/4_43-14 + + + + + + + + + + + + + + PS122/4_43-141 + + + + + + + + + + + + + + PS122/4_43-142 + + + + + + + + + + + + + + PS122/4_43-143 + + + + + + + + + + + + + + PS122/4_43-144 + + + + + + + + + + + + + + PS122/4_43-145 + + + + + + + + + + + + + + PS122/4_43-146 + + + + + + + + + + + + + + PS122/4_43-147 + + + + + + + + + + + + + + PS122/4_43-148 + + + + + + + + + + + + + + PS122/4_43-149 + + + + + + + + + + + + + + PS122/4_43-15 + + + + + + + + + + + + + + PS122/4_43-150 + + + + + + + + + + + + + + PS122/4_43-153 + + + + + + + + + + + + + + PS122/4_43-154 + + + + + + + + + + + + + + PS122/4_43-155 + + + + + + + + + + + + + + PS122/4_43-156 + + + + + + + + + + + + + + PS122/4_43-157 + + + + + + + + + + + + + + PS122/4_43-158 + + + + + + + + + + + + + + PS122/4_43-159 + + + + + + + + + + + + + + PS122/4_43-16 + + + + + + + + + + + + + + PS122/4_43-160 + + + + + + + + + + + + + + PS122/4_43-161 + + + + + + + + + + + + + + PS122/4_43-162 + + + + + + + + + + + + + + PS122/4_43-163 + + + + + + + + + + + + + + PS122/4_43-164 + + + + + + + + + + + + + + PS122/4_43-165 + + + + + + + + + + + + + + PS122/4_43-166 + + + + + + + + + + + + + + PS122/4_43-167 + + + + + + + + + + + + + + PS122/4_43-168 + + + + + + + + + + + + + + PS122/4_43-169 + + + + + + + + + + + + + + PS122/4_43-17 + + + + + + + + + + + + + + PS122/4_43-170 + + + + + + + + + + + + + + PS122/4_43-171 + + + + + + + + + + + + + + PS122/4_43-172 + + + + + + + + + + + + + + PS122/4_43-173 + + + + + + + + + + + + + + PS122/4_43-174 + + + + + + + + + + + + + + PS122/4_43-175 + + + + + + + + + + + + + + PS122/4_43-176 + + + + + + + + + + + + + + PS122/4_43-177 + + + + + + + + + + + + + + PS122/4_43-178 + + + + + + + + + + + + + + PS122/4_43-18 + + + + + + + + + + + + + + PS122/4_43-19 + + + + + + + + + + + + + + PS122/4_43-2 + + + + + + + + + + + + + + PS122/4_43-20 + + + + + + + + + + + + + + PS122/4_43-21 + + + + + + + + + + + + + + PS122/4_43-22 + + + + + + + + + + + + + + PS122/4_43-23 + + + + + + + + + + + + + + PS122/4_43-24 + + + + + + + + + + + + + + PS122/4_43-25 + + + + + + + + + + + + + + PS122/4_43-26 + + + + + + + + + + + + + + PS122/4_43-27 + + + + + + + + + + + + + + PS122/4_43-28 + + + + + + + + + + + + + + PS122/4_43-29 + + + + + + + + + + + + + + PS122/4_43-3 + + + + + + + + + + + + + + PS122/4_43-30 + + + + + + + + + + + + + + PS122/4_43-31 + + + + + + + + + + + + + + PS122/4_43-32 + + + + + + + + + + + + + + PS122/4_43-33 + + + + + + + + + + + + + + PS122/4_43-34 + + + + + + + + + + + + + + PS122/4_43-35 + + + + + + + + + + + + + + PS122/4_43-36 + + + + + + + + + + + + + + PS122/4_43-37 + + + + + + + + + + + + + + PS122/4_43-38 + + + + + + + + + + + + + + PS122/4_43-4 + + + + + + + + + + + + + + PS122/4_43-41 + + + + + + + + + + + + + + PS122/4_43-42 + + + + + + + + + + + + + + PS122/4_43-44 + + + + + + + + + + + + + + PS122/4_43-47 + + + + + + + + + + + + + + PS122/4_43-48 + + + + + + + + + + + + + + PS122/4_43-49 + + + + + + + + + + + + + + PS122/4_43-50 + + + + + + + + + + + + + + PS122/4_43-51 + + + + + + + + + + + + + + PS122/4_43-52 + + + + + + + + + + + + + + PS122/4_43-53 + + + + + + + + + + + + + + PS122/4_43-56 + + + + + + + + + + + + + + PS122/4_43-57 + + + + + + + + + + + + + + PS122/4_43-58 + + + + + + + + + + + + + + PS122/4_43-59 + + + + + + + + + + + + + + PS122/4_43-6 + + + + + + + + + + + + + + PS122/4_43-60 + + + + + + + + + + + + + + PS122/4_43-61 + + + + + + + + + + + + + + PS122/4_43-62 + + + + + + + + + + + + + + PS122/4_43-63 + + + + + + + + + + + + + + PS122/4_43-64 + + + + + + + + + + + + + + PS122/4_43-65 + + + + + + + + + + + + + + PS122/4_43-66 + + + + + + + + + + + + + + PS122/4_43-67 + + + + + + + + + + + + + + PS122/4_43-68 + + + + + + + + + + + + + + PS122/4_43-7 + + + + + + + + + + + + + + PS122/4_43-71 + + + + + + + + + + + + + + PS122/4_43-72 + + + + + + + + + + + + + + PS122/4_43-73 + + + + + + + + + + + + + + PS122/4_43-74 + + + + + + + + + + + + + + PS122/4_43-75 + + + + + + + + + + + + + + PS122/4_43-76 + + + + + + + + + + + + + + PS122/4_43-77 + + + + + + + + + + + + + + PS122/4_43-78 + + + + + + + + + + + + + + PS122/4_43-79 + + + + + + + + + + + + + + PS122/4_43-8 + + + + + + + + + + + + + + PS122/4_43-80 + + + + + + + + + + + + + + PS122/4_43-81 + + + + + + + + + + + + + + PS122/4_43-82 + + + + + + + + + + + + + + PS122/4_43-83 + + + + + + + + + + + + + + PS122/4_43-84 + + + + + + + + + + + + + + PS122/4_43-85 + + + + + + + + + + + + + + PS122/4_43-86 + + + + + + + + + + + + + + PS122/4_43-89 + + + + + + + + + + + + + + PS122/4_43-9 + + + + + + + + + + + + + + PS122/4_43-90 + + + + + + + + + + + + + + PS122/4_43-99 + + + + + + + + + + + + + + PS122/4_44-10 + + + + + + + + + + + + + + PS122/4_44-100 + + + + + + + + + + + + + + PS122/4_44-101 + + + + + + + + + + + + + + PS122/4_44-102 + + + + + + + + + + + + + + PS122/4_44-103 + + + + + + + + + + + + + + PS122/4_44-104 + + + + + + + + + + + + + + PS122/4_44-105 + + + + + + + + + + + + + + PS122/4_44-106 + + + + + + + + + + + + + + PS122/4_44-107 + + + + + + + + + + + + + + PS122/4_44-108 + + + + + + + + + + + + + + PS122/4_44-109 + + + + + + + + + + + + + + PS122/4_44-11 + + + + + + + + + + + + + + PS122/4_44-110 + + + + + + + + + + + + + + PS122/4_44-111 + + + + + + + + + + + + + + PS122/4_44-112 + + + + + + + + + + + + + + PS122/4_44-113 + + + + + + + + + + + + + + PS122/4_44-114 + + + + + + + + + + + + + + PS122/4_44-115 + + + + + + + + + + + + + + PS122/4_44-116 + + + + + + + + + + + + + + PS122/4_44-117 + + + + + + + + + + + + + + PS122/4_44-118 + + + + + + + + + + + + + + PS122/4_44-119 + + + + + + + + + + + + + + PS122/4_44-12 + + + + + + + + + + + + + + PS122/4_44-120 + + + + + + + + + + + + + + PS122/4_44-121 + + + + + + + + + + + + + + PS122/4_44-122 + + + + + + + + + + + + + + PS122/4_44-123 + + + + + + + + + + + + + + PS122/4_44-124 + + + + + + + + + + + + + + PS122/4_44-125 + + + + + + + + + + + + + + PS122/4_44-126 + + + + + + + + + + + + + + PS122/4_44-127 + + + + + + + + + + + + + + PS122/4_44-128 + + + + + + + + + + + + + + PS122/4_44-129 + + + + + + + + + + + + + + PS122/4_44-13 + + + + + + + + + + + + + + PS122/4_44-130 + + + + + + + + + + + + + + PS122/4_44-131 + + + + + + + + + + + + + + PS122/4_44-132 + + + + + + + + + + + + + + PS122/4_44-133 + + + + + + + + + + + + + + PS122/4_44-134 + + + + + + + + + + + + + + PS122/4_44-135 + + + + + + + + + + + + + + PS122/4_44-136 + + + + + + + + + + + + + + PS122/4_44-137 + + + + + + + + + + + + + + PS122/4_44-138 + + + + + + + + + + + + + + PS122/4_44-139 + + + + + + + + + + + + + + PS122/4_44-14 + + + + + + + + + + + + + + PS122/4_44-140 + + + + + + + + + + + + + + PS122/4_44-141 + + + + + + + + + + + + + + PS122/4_44-142 + + + + + + + + + + + + + + PS122/4_44-143 + + + + + + + + + + + + + + PS122/4_44-144 + + + + + + + + + + + + + + PS122/4_44-145 + + + + + + + + + + + + + + PS122/4_44-146 + + + + + + + + + + + + + + PS122/4_44-147 + + + + + + + + + + + + + + PS122/4_44-148 + + + + + + + + + + + + + + PS122/4_44-149 + + + + + + + + + + + + + + PS122/4_44-15 + + + + + + + + + + + + + + PS122/4_44-150 + + + + + + + + + + + + + + PS122/4_44-151 + + + + + + + + + + + + + + PS122/4_44-152 + + + + + + + + + + + + + + PS122/4_44-153 + + + + + + + + + + + + + + PS122/4_44-154 + + + + + + + + + + + + + + PS122/4_44-155 + + + + + + + + + + + + + + PS122/4_44-156 + + + + + + + + + + + + + + PS122/4_44-157 + + + + + + + + + + + + + + PS122/4_44-158 + + + + + + + + + + + + + + PS122/4_44-159 + + + + + + + + + + + + + + PS122/4_44-16 + + + + + + + + + + + + + + PS122/4_44-160 + + + + + + + + + + + + + + PS122/4_44-161 + + + + + + + + + + + + + + PS122/4_44-162 + + + + + + + + + + + + + + PS122/4_44-163 + + + + + + + + + + + + + + PS122/4_44-164 + + + + + + + + + + + + + + PS122/4_44-165 + + + + + + + + + + + + + + PS122/4_44-166 + + + + + + + + + + + + + + PS122/4_44-167 + + + + + + + + + + + + + + PS122/4_44-168 + + + + + + + + + + + + + + PS122/4_44-17 + + + + + + + + + + + + + + PS122/4_44-170 + + + + + + + + + + + + + + PS122/4_44-171 + + + + + + + + + + + + + + PS122/4_44-172 + + + + + + + + + + + + + + PS122/4_44-173 + + + + + + + + + + + + + + PS122/4_44-174 + + + + + + + + + + + + + + PS122/4_44-175 + + + + + + + + + + + + + + PS122/4_44-176 + + + + + + + + + + + + + + PS122/4_44-177 + + + + + + + + + + + + + + PS122/4_44-178 + + + + + + + + + + + + + + PS122/4_44-179 + + + + + + + + + + + + + + PS122/4_44-18 + + + + + + + + + + + + + + PS122/4_44-180 + + + + + + + + + + + + + + PS122/4_44-181 + + + + + + + + + + + + + + PS122/4_44-182 + + + + + + + + + + + + + + PS122/4_44-183 + + + + + + + + + + + + + + PS122/4_44-184 + + + + + + + + + + + + + + PS122/4_44-185 + + + + + + + + + + + + + + PS122/4_44-186 + + + + + + + + + + + + + + PS122/4_44-187 + + + + + + + + + + + + + + PS122/4_44-188 + + + + + + + + + + + + + + PS122/4_44-189 + + + + + + + + + + + + + + PS122/4_44-19 + + + + + + + + + + + + + + PS122/4_44-190 + + + + + + + + + + + + + + PS122/4_44-191 + + + + + + + + + + + + + + PS122/4_44-192 + + + + + + + + + + + + + + PS122/4_44-193 + + + + + + + + + + + + + + PS122/4_44-194 + + + + + + + + + + + + + + PS122/4_44-195 + + + + + + + + + + + + + + PS122/4_44-196 + + + + + + + + + + + + + + PS122/4_44-197 + + + + + + + + + + + + + + PS122/4_44-198 + + + + + + + + + + + + + + PS122/4_44-199 + + + + + + + + + + + + + + PS122/4_44-20 + + + + + + + + + + + + + + PS122/4_44-200 + + + + + + + + + + + + + + PS122/4_44-201 + + + + + + + + + + + + + + PS122/4_44-202 + + + + + + + + + + + + + + PS122/4_44-203 + + + + + + + + + + + + + + PS122/4_44-204 + + + + + + + + + + + + + + PS122/4_44-205 + + + + + + + + + + + + + + PS122/4_44-206 + + + + + + + + + + + + + + PS122/4_44-207 + + + + + + + + + + + + + + PS122/4_44-208 + + + + + + + + + + + + + + PS122/4_44-209 + + + + + + + + + + + + + + PS122/4_44-21 + + + + + + + + + + + + + + PS122/4_44-210 + + + + + + + + + + + + + + PS122/4_44-211 + + + + + + + + + + + + + + PS122/4_44-212 + + + + + + + + + + + + + + PS122/4_44-213 + + + + + + + + + + + + + + PS122/4_44-214 + + + + + + + + + + + + + + PS122/4_44-215 + + + + + + + + + + + + + + PS122/4_44-216 + + + + + + + + + + + + + + PS122/4_44-217 + + + + + + + + + + + + + + PS122/4_44-218 + + + + + + + + + + + + + + PS122/4_44-219 + + + + + + + + + + + + + + PS122/4_44-22 + + + + + + + + + + + + + + PS122/4_44-220 + + + + + + + + + + + + + + PS122/4_44-221 + + + + + + + + + + + + + + PS122/4_44-222 + + + + + + + + + + + + + + PS122/4_44-223 + + + + + + + + + + + + + + PS122/4_44-224 + + + + + + + + + + + + + + PS122/4_44-225 + + + + + + + + + + + + + + PS122/4_44-226 + + + + + + + + + + + + + + PS122/4_44-227 + + + + + + + + + + + + + + PS122/4_44-228 + + + + + + + + + + + + + + PS122/4_44-229 + + + + + + + + + + + + + + PS122/4_44-23 + + + + + + + + + + + + + + PS122/4_44-230 + + + + + + + + + + + + + + PS122/4_44-231 + + + + + + + + + + + + + + PS122/4_44-232 + + + + + + + + + + + + + + PS122/4_44-233 + + + + + + + + + + + + + + PS122/4_44-234 + + + + + + + + + + + + + + PS122/4_44-235 + + + + + + + + + + + + + + PS122/4_44-236 + + + + + + + + + + + + + + PS122/4_44-237 + + + + + + + + + + + + + + PS122/4_44-238 + + + + + + + + + + + + + + PS122/4_44-239 + + + + + + + + + + + + + + PS122/4_44-24 + + + + + + + + + + + + + + PS122/4_44-241 + + + + + + + + + + + + + + PS122/4_44-244 + + + + + + + + + + + + + + PS122/4_44-245 + + + + + + + + + + + + + + PS122/4_44-247 + + + + + + + + + + + + + + PS122/4_44-249 + + + + + + + + + + + + + + PS122/4_44-25 + + + + + + + + + + + + + + PS122/4_44-251 + + + + + + + + + + + + + + PS122/4_44-252 + + + + + + + + + + + + + + PS122/4_44-253 + + + + + + + + + + + + + + PS122/4_44-254 + + + + + + + + + + + + + + PS122/4_44-255 + + + + + + + + + + + + + + PS122/4_44-256 + + + + + + + + + + + + + + PS122/4_44-257 + + + + + + + + + + + + + + PS122/4_44-260 + + + + + + + + + + + + + + PS122/4_44-261 + + + + + + + + + + + + + + PS122/4_44-263 + + + + + + + + + + + + + + PS122/4_44-264 + + + + + + + + + + + + + + PS122/4_44-265 + + + + + + + + + + + + + + PS122/4_44-266 + + + + + + + + + + + + + + PS122/4_44-267 + + + + + + + + + + + + + + PS122/4_44-268 + + + + + + + + + + + + + + PS122/4_44-269 + + + + + + + + + + + + + + PS122/4_44-27 + + + + + + + + + + + + + + PS122/4_44-270 + + + + + + + + + + + + + + PS122/4_44-271 + + + + + + + + + + + + + + PS122/4_44-272 + + + + + + + + + + + + + + PS122/4_44-273 + + + + + + + + + + + + + + PS122/4_44-274 + + + + + + + + + + + + + + PS122/4_44-275 + + + + + + + + + + + + + + PS122/4_44-276 + + + + + + + + + + + + + + PS122/4_44-278 + + + + + + + + + + + + + + PS122/4_44-28 + + + + + + + + + + + + + + PS122/4_44-29 + + + + + + + + + + + + + + PS122/4_44-3 + + + + + + + + + + + + + + PS122/4_44-30 + + + + + + + + + + + + + + PS122/4_44-31 + + + + + + + + + + + + + + PS122/4_44-32 + + + + + + + + + + + + + + PS122/4_44-33 + + + + + + + + + + + + + + PS122/4_44-34 + + + + + + + + + + + + + + PS122/4_44-35 + + + + + + + + + + + + + + PS122/4_44-36 + + + + + + + + + + + + + + PS122/4_44-37 + + + + + + + + + + + + + + PS122/4_44-38 + + + + + + + + + + + + + + PS122/4_44-39 + + + + + + + + + + + + + + PS122/4_44-4 + + + + + + + + + + + + + + PS122/4_44-40 + + + + + + + + + + + + + + PS122/4_44-41 + + + + + + + + + + + + + + PS122/4_44-42 + + + + + + + + + + + + + + PS122/4_44-43 + + + + + + + + + + + + + + PS122/4_44-44 + + + + + + + + + + + + + + PS122/4_44-45 + + + + + + + + + + + + + + PS122/4_44-46 + + + + + + + + + + + + + + PS122/4_44-47 + + + + + + + + + + + + + + PS122/4_44-49 + + + + + + + + + + + + + + PS122/4_44-5 + + + + + + + + + + + + + + PS122/4_44-50 + + + + + + + + + + + + + + PS122/4_44-51 + + + + + + + + + + + + + + PS122/4_44-52 + + + + + + + + + + + + + + PS122/4_44-53 + + + + + + + + + + + + + + PS122/4_44-54 + + + + + + + + + + + + + + PS122/4_44-55 + + + + + + + + + + + + + + PS122/4_44-56 + + + + + + + + + + + + + + PS122/4_44-57 + + + + + + + + + + + + + + PS122/4_44-58 + + + + + + + + + + + + + + PS122/4_44-59 + + + + + + + + + + + + + + PS122/4_44-6 + + + + + + + + + + + + + + PS122/4_44-61 + + + + + + + + + + + + + + PS122/4_44-62 + + + + + + + + + + + + + + PS122/4_44-63 + + + + + + + + + + + + + + PS122/4_44-64 + + + + + + + + + + + + + + PS122/4_44-65 + + + + + + + + + + + + + + PS122/4_44-66 + + + + + + + + + + + + + + PS122/4_44-67 + + + + + + + + + + + + + + PS122/4_44-69 + + + + + + + + + + + + + + PS122/4_44-7 + + + + + + + + + + + + + + PS122/4_44-70 + + + + + + + + + + + + + + PS122/4_44-71 + + + + + + + + + + + + + + PS122/4_44-72 + + + + + + + + + + + + + + PS122/4_44-74 + + + + + + + + + + + + + + PS122/4_44-75 + + + + + + + + + + + + + + PS122/4_44-76 + + + + + + + + + + + + + + PS122/4_44-77 + + + + + + + + + + + + + + PS122/4_44-78 + + + + + + + + + + + + + + PS122/4_44-79 + + + + + + + + + + + + + + PS122/4_44-8 + + + + + + + + + + + + + + PS122/4_44-80 + + + + + + + + + + + + + + PS122/4_44-81 + + + + + + + + + + + + + + PS122/4_44-82 + + + + + + + + + + + + + + PS122/4_44-83 + + + + + + + + + + + + + + PS122/4_44-84 + + + + + + + + + + + + + + PS122/4_44-85 + + + + + + + + + + + + + + PS122/4_44-86 + + + + + + + + + + + + + + PS122/4_44-87 + + + + + + + + + + + + + + PS122/4_44-88 + + + + + + + + + + + + + + PS122/4_44-89 + + + + + + + + + + + + + + PS122/4_44-9 + + + + + + + + + + + + + + PS122/4_44-90 + + + + + + + + + + + + + + PS122/4_44-91 + + + + + + + + + + + + + + PS122/4_44-92 + + + + + + + + + + + + + + PS122/4_44-93 + + + + + + + + + + + + + + PS122/4_44-94 + + + + + + + + + + + + + + PS122/4_44-95 + + + + + + + + + + + + + + PS122/4_44-96 + + + + + + + + + + + + + + PS122/4_44-97 + + + + + + + + + + + + + + PS122/4_44-98 + + + + + + + + + + + + + + PS122/4_44-99 + + + + + + + + + + + + + + PS122/4_45-10 + + + + + + + + + + + + + + PS122/4_45-100 + + + + + + + + + + + + + + PS122/4_45-101 + + + + + + + + + + + + + + PS122/4_45-102 + + + + + + + + + + + + + + PS122/4_45-103 + + + + + + + + + + + + + + PS122/4_45-104 + + + + + + + + + + + + + + PS122/4_45-105 + + + + + + + + + + + + + + PS122/4_45-106 + + + + + + + + + + + + + + PS122/4_45-107 + + + + + + + + + + + + + + PS122/4_45-108 + + + + + + + + + + + + + + PS122/4_45-109 + + + + + + + + + + + + + + PS122/4_45-11 + + + + + + + + + + + + + + PS122/4_45-110 + + + + + + + + + + + + + + PS122/4_45-111 + + + + + + + + + + + + + + PS122/4_45-112 + + + + + + + + + + + + + + PS122/4_45-113 + + + + + + + + + + + + + + PS122/4_45-12 + + + + + + + + + + + + + + PS122/4_45-120 + + + + + + + + + + + + + + PS122/4_45-121 + + + + + + + + + + + + + + PS122/4_45-122 + + + + + + + + + + + + + + PS122/4_45-123 + + + + + + + + + + + + + + PS122/4_45-124 + + + + + + + + + + + + + + PS122/4_45-125 + + + + + + + + + + + + + + PS122/4_45-126 + + + + + + + + + + + + + + PS122/4_45-127 + + + + + + + + + + + + + + PS122/4_45-128 + + + + + + + + + + + + + + PS122/4_45-129 + + + + + + + + + + + + + + PS122/4_45-13 + + + + + + + + + + + + + + PS122/4_45-130 + + + + + + + + + + + + + + PS122/4_45-131 + + + + + + + + + + + + + + PS122/4_45-132 + + + + + + + + + + + + + + PS122/4_45-133 + + + + + + + + + + + + + + PS122/4_45-134 + + + + + + + + + + + + + + PS122/4_45-135 + + + + + + + + + + + + + + PS122/4_45-136 + + + + + + + + + + + + + + PS122/4_45-137 + + + + + + + + + + + + + + PS122/4_45-138 + + + + + + + + + + + + + + PS122/4_45-139 + + + + + + + + + + + + + + PS122/4_45-14 + + + + + + + + + + + + + + PS122/4_45-140 + + + + + + + + + + + + + + PS122/4_45-141 + + + + + + + + + + + + + + PS122/4_45-142 + + + + + + + + + + + + + + PS122/4_45-143 + + + + + + + + + + + + + + PS122/4_45-144 + + + + + + + + + + + + + + PS122/4_45-145 + + + + + + + + + + + + + + PS122/4_45-146 + + + + + + + + + + + + + + PS122/4_45-147 + + + + + + + + + + + + + + PS122/4_45-149 + + + + + + + + + + + + + + PS122/4_45-15 + + + + + + + + + + + + + + PS122/4_45-150 + + + + + + + + + + + + + + PS122/4_45-155 + + + + + + + + + + + + + + PS122/4_45-156 + + + + + + + + + + + + + + PS122/4_45-157 + + + + + + + + + + + + + + PS122/4_45-158 + + + + + + + + + + + + + + PS122/4_45-159 + + + + + + + + + + + + + + PS122/4_45-16 + + + + + + + + + + + + + + PS122/4_45-160 + + + + + + + + + + + + + + PS122/4_45-161 + + + + + + + + + + + + + + PS122/4_45-162 + + + + + + + + + + + + + + PS122/4_45-163 + + + + + + + + + + + + + + PS122/4_45-164 + + + + + + + + + + + + + + PS122/4_45-165 + + + + + + + + + + + + + + PS122/4_45-166 + + + + + + + + + + + + + + PS122/4_45-167 + + + + + + + + + + + + + + PS122/4_45-168 + + + + + + + + + + + + + + PS122/4_45-17 + + + + + + + + + + + + + + PS122/4_45-171 + + + + + + + + + + + + + + PS122/4_45-172 + + + + + + + + + + + + + + PS122/4_45-173 + + + + + + + + + + + + + + PS122/4_45-174 + + + + + + + + + + + + + + PS122/4_45-176 + + + + + + + + + + + + + + PS122/4_45-177 + + + + + + + + + + + + + + PS122/4_45-179 + + + + + + + + + + + + + + PS122/4_45-18 + + + + + + + + + + + + + + PS122/4_45-180 + + + + + + + + + + + + + + PS122/4_45-181 + + + + + + + + + + + + + + PS122/4_45-182 + + + + + + + + + + + + + + PS122/4_45-184 + + + + + + + + + + + + + + PS122/4_45-185 + + + + + + + + + + + + + + PS122/4_45-186 + + + + + + + + + + + + + + PS122/4_45-187 + + + + + + + + + + + + + + PS122/4_45-188 + + + + + + + + + + + + + + PS122/4_45-189 + + + + + + + + + + + + + + PS122/4_45-190 + + + + + + + + + + + + + + PS122/4_45-191 + + + + + + + + + + + + + + PS122/4_45-192 + + + + + + + + + + + + + + PS122/4_45-193 + + + + + + + + + + + + + + PS122/4_45-194 + + + + + + + + + + + + + + PS122/4_45-195 + + + + + + + + + + + + + + PS122/4_45-196 + + + + + + + + + + + + + + PS122/4_45-197 + + + + + + + + + + + + + + PS122/4_45-198 + + + + + + + + + + + + + + PS122/4_45-199 + + + + + + + + + + + + + + PS122/4_45-2 + + + + + + + + + + + + + + PS122/4_45-20 + + + + + + + + + + + + + + PS122/4_45-200 + + + + + + + + + + + + + + PS122/4_45-201 + + + + + + + + + + + + + + PS122/4_45-202 + + + + + + + + + + + + + + PS122/4_45-203 + + + + + + + + + + + + + + PS122/4_45-204 + + + + + + + + + + + + + + PS122/4_45-205 + + + + + + + + + + + + + + PS122/4_45-206 + + + + + + + + + + + + + + PS122/4_45-207 + + + + + + + + + + + + + + PS122/4_45-208 + + + + + + + + + + + + + + PS122/4_45-209 + + + + + + + + + + + + + + PS122/4_45-21 + + + + + + + + + + + + + + PS122/4_45-210 + + + + + + + + + + + + + + PS122/4_45-211 + + + + + + + + + + + + + + PS122/4_45-213 + + + + + + + + + + + + + + PS122/4_45-214 + + + + + + + + + + + + + + PS122/4_45-215 + + + + + + + + + + + + + + PS122/4_45-216 + + + + + + + + + + + + + + PS122/4_45-22 + + + + + + + + + + + + + + PS122/4_45-23 + + + + + + + + + + + + + + PS122/4_45-24 + + + + + + + + + + + + + + PS122/4_45-25 + + + + + + + + + + + + + + PS122/4_45-26 + + + + + + + + + + + + + + PS122/4_45-27 + + + + + + + + + + + + + + PS122/4_45-28 + + + + + + + + + + + + + + PS122/4_45-29 + + + + + + + + + + + + + + PS122/4_45-3 + + + + + + + + + + + + + + PS122/4_45-30 + + + + + + + + + + + + + + PS122/4_45-31 + + + + + + + + + + + + + + PS122/4_45-32 + + + + + + + + + + + + + + PS122/4_45-33 + + + + + + + + + + + + + + PS122/4_45-36 + + + + + + + + + + + + + + PS122/4_45-37 + + + + + + + + + + + + + + PS122/4_45-38 + + + + + + + + + + + + + + PS122/4_45-39 + + + + + + + + + + + + + + PS122/4_45-4 + + + + + + + + + + + + + + PS122/4_45-40 + + + + + + + + + + + + + + PS122/4_45-41 + + + + + + + + + + + + + + PS122/4_45-42 + + + + + + + + + + + + + + PS122/4_45-43 + + + + + + + + + + + + + + PS122/4_45-44 + + + + + + + + + + + + + + PS122/4_45-45 + + + + + + + + + + + + + + PS122/4_45-46 + + + + + + + + + + + + + + PS122/4_45-47 + + + + + + + + + + + + + + PS122/4_45-48 + + + + + + + + + + + + + + PS122/4_45-49 + + + + + + + + + + + + + + PS122/4_45-5 + + + + + + + + + + + + + + PS122/4_45-50 + + + + + + + + + + + + + + PS122/4_45-51 + + + + + + + + + + + + + + PS122/4_45-52 + + + + + + + + + + + + + + PS122/4_45-53 + + + + + + + + + + + + + + PS122/4_45-54 + + + + + + + + + + + + + + PS122/4_45-55 + + + + + + + + + + + + + + PS122/4_45-56 + + + + + + + + + + + + + + PS122/4_45-57 + + + + + + + + + + + + + + PS122/4_45-58 + + + + + + + + + + + + + + PS122/4_45-59 + + + + + + + + + + + + + + PS122/4_45-6 + + + + + + + + + + + + + + PS122/4_45-60 + + + + + + + + + + + + + + PS122/4_45-61 + + + + + + + + + + + + + + PS122/4_45-62 + + + + + + + + + + + + + + PS122/4_45-63 + + + + + + + + + + + + + + PS122/4_45-64 + + + + + + + + + + + + + + PS122/4_45-65 + + + + + + + + + + + + + + PS122/4_45-66 + + + + + + + + + + + + + + PS122/4_45-67 + + + + + + + + + + + + + + PS122/4_45-68 + + + + + + + + + + + + + + PS122/4_45-69 + + + + + + + + + + + + + + PS122/4_45-7 + + + + + + + + + + + + + + PS122/4_45-70 + + + + + + + + + + + + + + PS122/4_45-71 + + + + + + + + + + + + + + PS122/4_45-72 + + + + + + + + + + + + + + PS122/4_45-73 + + + + + + + + + + + + + + PS122/4_45-74 + + + + + + + + + + + + + + PS122/4_45-75 + + + + + + + + + + + + + + PS122/4_45-76 + + + + + + + + + + + + + + PS122/4_45-77 + + + + + + + + + + + + + + PS122/4_45-78 + + + + + + + + + + + + + + PS122/4_45-79 + + + + + + + + + + + + + + PS122/4_45-8 + + + + + + + + + + + + + + PS122/4_45-80 + + + + + + + + + + + + + + PS122/4_45-81 + + + + + + + + + + + + + + PS122/4_45-82 + + + + + + + + + + + + + + PS122/4_45-83 + + + + + + + + + + + + + + PS122/4_45-84 + + + + + + + + + + + + + + PS122/4_45-85 + + + + + + + + + + + + + + PS122/4_45-86 + + + + + + + + + + + + + + PS122/4_45-87 + + + + + + + + + + + + + + PS122/4_45-88 + + + + + + + + + + + + + + PS122/4_45-89 + + + + + + + + + + + + + + PS122/4_45-9 + + + + + + + + + + + + + + PS122/4_45-90 + + + + + + + + + + + + + + PS122/4_45-91 + + + + + + + + + + + + + + PS122/4_45-92 + + + + + + + + + + + + + + PS122/4_45-93 + + + + + + + + + + + + + + PS122/4_45-94 + + + + + + + + + + + + + + PS122/4_45-95 + + + + + + + + + + + + + + PS122/4_45-96 + + + + + + + + + + + + + + PS122/4_45-97 + + + + + + + + + + + + + + PS122/4_45-98 + + + + + + + + + + + + + + PS122/4_45-99 + + + + + + + + + + + + + + PS122/4_46-10 + + + + + + + + + + + + + + PS122/4_46-100 + + + + + + + + + + + + + + PS122/4_46-101 + + + + + + + + + + + + + + PS122/4_46-102 + + + + + + + + + + + + + + PS122/4_46-103 + + + + + + + + + + + + + + PS122/4_46-104 + + + + + + + + + + + + + + PS122/4_46-105 + + + + + + + + + + + + + + PS122/4_46-106 + + + + + + + + + + + + + + PS122/4_46-107 + + + + + + + + + + + + + + PS122/4_46-108 + + + + + + + + + + + + + + PS122/4_46-109 + + + + + + + + + + + + + + PS122/4_46-11 + + + + + + + + + + + + + + PS122/4_46-110 + + + + + + + + + + + + + + PS122/4_46-111 + + + + + + + + + + + + + + PS122/4_46-112 + + + + + + + + + + + + + + PS122/4_46-113 + + + + + + + + + + + + + + PS122/4_46-114 + + + + + + + + + + + + + + PS122/4_46-115 + + + + + + + + + + + + + + PS122/4_46-116 + + + + + + + + + + + + + + PS122/4_46-117 + + + + + + + + + + + + + + PS122/4_46-118 + + + + + + + + + + + + + + PS122/4_46-119 + + + + + + + + + + + + + + PS122/4_46-12 + + + + + + + + + + + + + + PS122/4_46-120 + + + + + + + + + + + + + + PS122/4_46-121 + + + + + + + + + + + + + + PS122/4_46-122 + + + + + + + + + + + + + + PS122/4_46-123 + + + + + + + + + + + + + + PS122/4_46-124 + + + + + + + + + + + + + + PS122/4_46-125 + + + + + + + + + + + + + + PS122/4_46-126 + + + + + + + + + + + + + + PS122/4_46-127 + + + + + + + + + + + + + + PS122/4_46-128 + + + + + + + + + + + + + + PS122/4_46-129 + + + + + + + + + + + + + + PS122/4_46-13 + + + + + + + + + + + + + + PS122/4_46-130 + + + + + + + + + + + + + + PS122/4_46-131 + + + + + + + + + + + + + + PS122/4_46-132 + + + + + + + + + + + + + + PS122/4_46-133 + + + + + + + + + + + + + + PS122/4_46-134 + + + + + + + + + + + + + + PS122/4_46-135 + + + + + + + + + + + + + + PS122/4_46-136 + + + + + + + + + + + + + + PS122/4_46-137 + + + + + + + + + + + + + + PS122/4_46-138 + + + + + + + + + + + + + + PS122/4_46-139 + + + + + + + + + + + + + + PS122/4_46-14 + + + + + + + + + + + + + + PS122/4_46-140 + + + + + + + + + + + + + + PS122/4_46-141 + + + + + + + + + + + + + + PS122/4_46-142 + + + + + + + + + + + + + + PS122/4_46-143 + + + + + + + + + + + + + + PS122/4_46-144 + + + + + + + + + + + + + + PS122/4_46-145 + + + + + + + + + + + + + + PS122/4_46-146 + + + + + + + + + + + + + + PS122/4_46-147 + + + + + + + + + + + + + + PS122/4_46-148 + + + + + + + + + + + + + + PS122/4_46-149 + + + + + + + + + + + + + + PS122/4_46-15 + + + + + + + + + + + + + + PS122/4_46-150 + + + + + + + + + + + + + + PS122/4_46-151 + + + + + + + + + + + + + + PS122/4_46-155 + + + + + + + + + + + + + + PS122/4_46-156 + + + + + + + + + + + + + + PS122/4_46-157 + + + + + + + + + + + + + + PS122/4_46-158 + + + + + + + + + + + + + + PS122/4_46-159 + + + + + + + + + + + + + + PS122/4_46-16 + + + + + + + + + + + + + + PS122/4_46-160 + + + + + + + + + + + + + + PS122/4_46-161 + + + + + + + + + + + + + + PS122/4_46-162 + + + + + + + + + + + + + + PS122/4_46-163 + + + + + + + + + + + + + + PS122/4_46-164 + + + + + + + + + + + + + + PS122/4_46-165 + + + + + + + + + + + + + + PS122/4_46-166 + + + + + + + + + + + + + + PS122/4_46-167 + + + + + + + + + + + + + + PS122/4_46-168 + + + + + + + + + + + + + + PS122/4_46-169 + + + + + + + + + + + + + + PS122/4_46-170 + + + + + + + + + + + + + + PS122/4_46-171 + + + + + + + + + + + + + + PS122/4_46-172 + + + + + + + + + + + + + + PS122/4_46-174 + + + + + + + + + + + + + + PS122/4_46-175 + + + + + + + + + + + + + + PS122/4_46-176 + + + + + + + + + + + + + + PS122/4_46-177 + + + + + + + + + + + + + + PS122/4_46-178 + + + + + + + + + + + + + + PS122/4_46-179 + + + + + + + + + + + + + + PS122/4_46-18 + + + + + + + + + + + + + + PS122/4_46-180 + + + + + + + + + + + + + + PS122/4_46-181 + + + + + + + + + + + + + + PS122/4_46-182 + + + + + + + + + + + + + + PS122/4_46-183 + + + + + + + + + + + + + + PS122/4_46-184 + + + + + + + + + + + + + + PS122/4_46-185 + + + + + + + + + + + + + + PS122/4_46-186 + + + + + + + + + + + + + + PS122/4_46-187 + + + + + + + + + + + + + + PS122/4_46-188 + + + + + + + + + + + + + + PS122/4_46-19 + + + + + + + + + + + + + + PS122/4_46-190 + + + + + + + + + + + + + + PS122/4_46-191 + + + + + + + + + + + + + + PS122/4_46-192 + + + + + + + + + + + + + + PS122/4_46-193 + + + + + + + + + + + + + + PS122/4_46-194 + + + + + + + + + + + + + + PS122/4_46-195 + + + + + + + + + + + + + + PS122/4_46-196 + + + + + + + + + + + + + + PS122/4_46-197 + + + + + + + + + + + + + + PS122/4_46-198 + + + + + + + + + + + + + + PS122/4_46-199 + + + + + + + + + + + + + + PS122/4_46-2 + + + + + + + + + + + + + + PS122/4_46-20 + + + + + + + + + + + + + + PS122/4_46-200 + + + + + + + + + + + + + + PS122/4_46-201 + + + + + + + + + + + + + + PS122/4_46-202 + + + + + + + + + + + + + + PS122/4_46-203 + + + + + + + + + + + + + + PS122/4_46-204 + + + + + + + + + + + + + + PS122/4_46-205 + + + + + + + + + + + + + + PS122/4_46-206 + + + + + + + + + + + + + + PS122/4_46-207 + + + + + + + + + + + + + + PS122/4_46-208 + + + + + + + + + + + + + + PS122/4_46-209 + + + + + + + + + + + + + + PS122/4_46-21 + + + + + + + + + + + + + + PS122/4_46-210 + + + + + + + + + + + + + + PS122/4_46-211 + + + + + + + + + + + + + + PS122/4_46-212 + + + + + + + + + + + + + + PS122/4_46-214 + + + + + + + + + + + + + + PS122/4_46-215 + + + + + + + + + + + + + + PS122/4_46-216 + + + + + + + + + + + + + + PS122/4_46-217 + + + + + + + + + + + + + + PS122/4_46-218 + + + + + + + + + + + + + + PS122/4_46-219 + + + + + + + + + + + + + + PS122/4_46-22 + + + + + + + + + + + + + + PS122/4_46-220 + + + + + + + + + + + + + + PS122/4_46-221 + + + + + + + + + + + + + + PS122/4_46-222 + + + + + + + + + + + + + + PS122/4_46-223 + + + + + + + + + + + + + + PS122/4_46-224 + + + + + + + + + + + + + + PS122/4_46-225 + + + + + + + + + + + + + + PS122/4_46-226 + + + + + + + + + + + + + + PS122/4_46-227 + + + + + + + + + + + + + + PS122/4_46-228 + + + + + + + + + + + + + + PS122/4_46-229 + + + + + + + + + + + + + + PS122/4_46-23 + + + + + + + + + + + + + + PS122/4_46-230 + + + + + + + + + + + + + + PS122/4_46-231 + + + + + + + + + + + + + + PS122/4_46-232 + + + + + + + + + + + + + + PS122/4_46-233 + + + + + + + + + + + + + + PS122/4_46-234 + + + + + + + + + + + + + + PS122/4_46-235 + + + + + + + + + + + + + + PS122/4_46-236 + + + + + + + + + + + + + + PS122/4_46-237 + + + + + + + + + + + + + + PS122/4_46-238 + + + + + + + + + + + + + + PS122/4_46-239 + + + + + + + + + + + + + + PS122/4_46-24 + + + + + + + + + + + + + + PS122/4_46-240 + + + + + + + + + + + + + + PS122/4_46-241 + + + + + + + + + + + + + + PS122/4_46-242 + + + + + + + + + + + + + + PS122/4_46-243 + + + + + + + + + + + + + + PS122/4_46-244 + + + + + + + + + + + + + + PS122/4_46-245 + + + + + + + + + + + + + + PS122/4_46-246 + + + + + + + + + + + + + + PS122/4_46-247 + + + + + + + + + + + + + + PS122/4_46-248 + + + + + + + + + + + + + + PS122/4_46-249 + + + + + + + + + + + + + + PS122/4_46-25 + + + + + + + + + + + + + + PS122/4_46-250 + + + + + + + + + + + + + + PS122/4_46-251 + + + + + + + + + + + + + + PS122/4_46-252 + + + + + + + + + + + + + + PS122/4_46-253 + + + + + + + + + + + + + + PS122/4_46-254 + + + + + + + + + + + + + + PS122/4_46-255 + + + + + + + + + + + + + + PS122/4_46-256 + + + + + + + + + + + + + + PS122/4_46-257 + + + + + + + + + + + + + + PS122/4_46-258 + + + + + + + + + + + + + + PS122/4_46-259 + + + + + + + + + + + + + + PS122/4_46-26 + + + + + + + + + + + + + + PS122/4_46-260 + + + + + + + + + + + + + + PS122/4_46-261 + + + + + + + + + + + + + + PS122/4_46-262 + + + + + + + + + + + + + + PS122/4_46-263 + + + + + + + + + + + + + + PS122/4_46-265 + + + + + + + + + + + + + + PS122/4_46-266 + + + + + + + + + + + + + + PS122/4_46-267 + + + + + + + + + + + + + + PS122/4_46-268 + + + + + + + + + + + + + + PS122/4_46-269 + + + + + + + + + + + + + + PS122/4_46-27 + + + + + + + + + + + + + + PS122/4_46-270 + + + + + + + + + + + + + + PS122/4_46-271 + + + + + + + + + + + + + + PS122/4_46-272 + + + + + + + + + + + + + + PS122/4_46-273 + + + + + + + + + + + + + + PS122/4_46-274 + + + + + + + + + + + + + + PS122/4_46-275 + + + + + + + + + + + + + + PS122/4_46-276 + + + + + + + + + + + + + + PS122/4_46-277 + + + + + + + + + + + + + + PS122/4_46-278 + + + + + + + + + + + + + + PS122/4_46-279 + + + + + + + + + + + + + + PS122/4_46-28 + + + + + + + + + + + + + + PS122/4_46-280 + + + + + + + + + + + + + + PS122/4_46-281 + + + + + + + + + + + + + + PS122/4_46-282 + + + + + + + + + + + + + + PS122/4_46-283 + + + + + + + + + + + + + + PS122/4_46-284 + + + + + + + + + + + + + + PS122/4_46-285 + + + + + + + + + + + + + + PS122/4_46-286 + + + + + + + + + + + + + + PS122/4_46-287 + + + + + + + + + + + + + + PS122/4_46-288 + + + + + + + + + + + + + + PS122/4_46-289 + + + + + + + + + + + + + + PS122/4_46-29 + + + + + + + + + + + + + + PS122/4_46-290 + + + + + + + + + + + + + + PS122/4_46-3 + + + + + + + + + + + + + + PS122/4_46-30 + + + + + + + + + + + + + + PS122/4_46-31 + + + + + + + + + + + + + + PS122/4_46-32 + + + + + + + + + + + + + + PS122/4_46-33 + + + + + + + + + + + + + + PS122/4_46-34 + + + + + + + + + + + + + + PS122/4_46-35 + + + + + + + + + + + + + + PS122/4_46-36 + + + + + + + + + + + + + + PS122/4_46-37 + + + + + + + + + + + + + + PS122/4_46-38 + + + + + + + + + + + + + + PS122/4_46-39 + + + + + + + + + + + + + + PS122/4_46-4 + + + + + + + + + + + + + + PS122/4_46-40 + + + + + + + + + + + + + + PS122/4_46-41 + + + + + + + + + + + + + + PS122/4_46-42 + + + + + + + + + + + + + + PS122/4_46-43 + + + + + + + + + + + + + + PS122/4_46-44 + + + + + + + + + + + + + + PS122/4_46-45 + + + + + + + + + + + + + + PS122/4_46-46 + + + + + + + + + + + + + + PS122/4_46-47 + + + + + + + + + + + + + + PS122/4_46-48 + + + + + + + + + + + + + + PS122/4_46-49 + + + + + + + + + + + + + + PS122/4_46-5 + + + + + + + + + + + + + + PS122/4_46-50 + + + + + + + + + + + + + + PS122/4_46-51 + + + + + + + + + + + + + + PS122/4_46-52 + + + + + + + + + + + + + + PS122/4_46-53 + + + + + + + + + + + + + + PS122/4_46-54 + + + + + + + + + + + + + + PS122/4_46-55 + + + + + + + + + + + + + + PS122/4_46-56 + + + + + + + + + + + + + + PS122/4_46-57 + + + + + + + + + + + + + + PS122/4_46-58 + + + + + + + + + + + + + + PS122/4_46-59 + + + + + + + + + + + + + + PS122/4_46-6 + + + + + + + + + + + + + + PS122/4_46-60 + + + + + + + + + + + + + + PS122/4_46-62 + + + + + + + + + + + + + + PS122/4_46-63 + + + + + + + + + + + + + + PS122/4_46-64 + + + + + + + + + + + + + + PS122/4_46-65 + + + + + + + + + + + + + + PS122/4_46-66 + + + + + + + + + + + + + + PS122/4_46-67 + + + + + + + + + + + + + + PS122/4_46-68 + + + + + + + + + + + + + + PS122/4_46-69 + + + + + + + + + + + + + + PS122/4_46-7 + + + + + + + + + + + + + + PS122/4_46-70 + + + + + + + + + + + + + + PS122/4_46-71 + + + + + + + + + + + + + + PS122/4_46-72 + + + + + + + + + + + + + + PS122/4_46-73 + + + + + + + + + + + + + + PS122/4_46-74 + + + + + + + + + + + + + + PS122/4_46-75 + + + + + + + + + + + + + + PS122/4_46-76 + + + + + + + + + + + + + + PS122/4_46-77 + + + + + + + + + + + + + + PS122/4_46-78 + + + + + + + + + + + + + + PS122/4_46-79 + + + + + + + + + + + + + + PS122/4_46-8 + + + + + + + + + + + + + + PS122/4_46-80 + + + + + + + + + + + + + + PS122/4_46-81 + + + + + + + + + + + + + + PS122/4_46-82 + + + + + + + + + + + + + + PS122/4_46-83 + + + + + + + + + + + + + + PS122/4_46-84 + + + + + + + + + + + + + + PS122/4_46-85 + + + + + + + + + + + + + + PS122/4_46-86 + + + + + + + + + + + + + + PS122/4_46-87 + + + + + + + + + + + + + + PS122/4_46-89 + + + + + + + + + + + + + + PS122/4_46-9 + + + + + + + + + + + + + + PS122/4_46-90 + + + + + + + + + + + + + + PS122/4_46-91 + + + + + + + + + + + + + + PS122/4_46-92 + + + + + + + + + + + + + + PS122/4_46-93 + + + + + + + + + + + + + + PS122/4_46-94 + + + + + + + + + + + + + + PS122/4_46-95 + + + + + + + + + + + + + + PS122/4_46-96 + + + + + + + + + + + + + + PS122/4_46-97 + + + + + + + + + + + + + + PS122/4_46-98 + + + + + + + + + + + + + + PS122/4_46-99 + + + + + + + + + + + + + + PS122/4_47-10 + + + + + + + + + + + + + + PS122/4_47-100 + + + + + + + + + + + + + + PS122/4_47-101 + + + + + + + + + + + + + + PS122/4_47-102 + + + + + + + + + + + + + + PS122/4_47-103 + + + + + + + + + + + + + + PS122/4_47-104 + + + + + + + + + + + + + + PS122/4_47-105 + + + + + + + + + + + + + + PS122/4_47-106 + + + + + + + + + + + + + + PS122/4_47-107 + + + + + + + + + + + + + + PS122/4_47-108 + + + + + + + + + + + + + + PS122/4_47-109 + + + + + + + + + + + + + + PS122/4_47-11 + + + + + + + + + + + + + + PS122/4_47-110 + + + + + + + + + + + + + + PS122/4_47-111 + + + + + + + + + + + + + + PS122/4_47-112 + + + + + + + + + + + + + + PS122/4_47-113 + + + + + + + + + + + + + + PS122/4_47-114 + + + + + + + + + + + + + + PS122/4_47-115 + + + + + + + + + + + + + + PS122/4_47-116 + + + + + + + + + + + + + + PS122/4_47-117 + + + + + + + + + + + + + + PS122/4_47-118 + + + + + + + + + + + + + + PS122/4_47-119 + + + + + + + + + + + + + + PS122/4_47-12 + + + + + + + + + + + + + + PS122/4_47-120 + + + + + + + + + + + + + + PS122/4_47-121 + + + + + + + + + + + + + + PS122/4_47-122 + + + + + + + + + + + + + + PS122/4_47-123 + + + + + + + + + + + + + + PS122/4_47-124 + + + + + + + + + + + + + + PS122/4_47-125 + + + + + + + + + + + + + + PS122/4_47-126 + + + + + + + + + + + + + + PS122/4_47-127 + + + + + + + + + + + + + + PS122/4_47-128 + + + + + + + + + + + + + + PS122/4_47-129 + + + + + + + + + + + + + + PS122/4_47-13 + + + + + + + + + + + + + + PS122/4_47-130 + + + + + + + + + + + + + + PS122/4_47-131 + + + + + + + + + + + + + + PS122/4_47-132 + + + + + + + + + + + + + + PS122/4_47-133 + + + + + + + + + + + + + + PS122/4_47-134 + + + + + + + + + + + + + + PS122/4_47-135 + + + + + + + + + + + + + + PS122/4_47-136 + + + + + + + + + + + + + + PS122/4_47-137 + + + + + + + + + + + + + + PS122/4_47-138 + + + + + + + + + + + + + + PS122/4_47-139 + + + + + + + + + + + + + + PS122/4_47-14 + + + + + + + + + + + + + + PS122/4_47-140 + + + + + + + + + + + + + + PS122/4_47-141 + + + + + + + + + + + + + + PS122/4_47-142 + + + + + + + + + + + + + + PS122/4_47-144 + + + + + + + + + + + + + + PS122/4_47-145 + + + + + + + + + + + + + + PS122/4_47-146 + + + + + + + + + + + + + + PS122/4_47-147 + + + + + + + + + + + + + + PS122/4_47-148 + + + + + + + + + + + + + + PS122/4_47-149 + + + + + + + + + + + + + + PS122/4_47-15 + + + + + + + + + + + + + + PS122/4_47-150 + + + + + + + + + + + + + + PS122/4_47-151 + + + + + + + + + + + + + + PS122/4_47-153 + + + + + + + + + + + + + + PS122/4_47-154 + + + + + + + + + + + + + + PS122/4_47-155 + + + + + + + + + + + + + + PS122/4_47-156 + + + + + + + + + + + + + + PS122/4_47-157 + + + + + + + + + + + + + + PS122/4_47-158 + + + + + + + + + + + + + + PS122/4_47-159 + + + + + + + + + + + + + + PS122/4_47-16 + + + + + + + + + + + + + + PS122/4_47-160 + + + + + + + + + + + + + + PS122/4_47-161 + + + + + + + + + + + + + + PS122/4_47-163 + + + + + + + + + + + + + + PS122/4_47-164 + + + + + + + + + + + + + + PS122/4_47-165 + + + + + + + + + + + + + + PS122/4_47-166 + + + + + + + + + + + + + + PS122/4_47-167 + + + + + + + + + + + + + + PS122/4_47-168 + + + + + + + + + + + + + + PS122/4_47-169 + + + + + + + + + + + + + + PS122/4_47-17 + + + + + + + + + + + + + + PS122/4_47-170 + + + + + + + + + + + + + + PS122/4_47-171 + + + + + + + + + + + + + + PS122/4_47-172 + + + + + + + + + + + + + + PS122/4_47-173 + + + + + + + + + + + + + + PS122/4_47-174 + + + + + + + + + + + + + + PS122/4_47-175 + + + + + + + + + + + + + + PS122/4_47-176 + + + + + + + + + + + + + + PS122/4_47-177 + + + + + + + + + + + + + + PS122/4_47-178 + + + + + + + + + + + + + + PS122/4_47-179 + + + + + + + + + + + + + + PS122/4_47-18 + + + + + + + + + + + + + + PS122/4_47-180 + + + + + + + + + + + + + + PS122/4_47-181 + + + + + + + + + + + + + + PS122/4_47-182 + + + + + + + + + + + + + + PS122/4_47-183 + + + + + + + + + + + + + + PS122/4_47-184 + + + + + + + + + + + + + + PS122/4_47-185 + + + + + + + + + + + + + + PS122/4_47-186 + + + + + + + + + + + + + + PS122/4_47-187 + + + + + + + + + + + + + + PS122/4_47-188 + + + + + + + + + + + + + + PS122/4_47-189 + + + + + + + + + + + + + + PS122/4_47-19 + + + + + + + + + + + + + + PS122/4_47-190 + + + + + + + + + + + + + + PS122/4_47-191 + + + + + + + + + + + + + + PS122/4_47-192 + + + + + + + + + + + + + + PS122/4_47-193 + + + + + + + + + + + + + + PS122/4_47-194 + + + + + + + + + + + + + + PS122/4_47-195 + + + + + + + + + + + + + + PS122/4_47-196 + + + + + + + + + + + + + + PS122/4_47-197 + + + + + + + + + + + + + + PS122/4_47-198 + + + + + + + + + + + + + + PS122/4_47-199 + + + + + + + + + + + + + + PS122/4_47-20 + + + + + + + + + + + + + + PS122/4_47-200 + + + + + + + + + + + + + + PS122/4_47-201 + + + + + + + + + + + + + + PS122/4_47-203 + + + + + + + + + + + + + + PS122/4_47-205 + + + + + + + + + + + + + + PS122/4_47-206 + + + + + + + + + + + + + + PS122/4_47-207 + + + + + + + + + + + + + + PS122/4_47-208 + + + + + + + + + + + + + + PS122/4_47-209 + + + + + + + + + + + + + + PS122/4_47-21 + + + + + + + + + + + + + + PS122/4_47-210 + + + + + + + + + + + + + + PS122/4_47-211 + + + + + + + + + + + + + + PS122/4_47-212 + + + + + + + + + + + + + + PS122/4_47-213 + + + + + + + + + + + + + + PS122/4_47-214 + + + + + + + + + + + + + + PS122/4_47-215 + + + + + + + + + + + + + + PS122/4_47-216 + + + + + + + + + + + + + + PS122/4_47-217 + + + + + + + + + + + + + + PS122/4_47-218 + + + + + + + + + + + + + + PS122/4_47-219 + + + + + + + + + + + + + + PS122/4_47-22 + + + + + + + + + + + + + + PS122/4_47-220 + + + + + + + + + + + + + + PS122/4_47-221 + + + + + + + + + + + + + + PS122/4_47-222 + + + + + + + + + + + + + + PS122/4_47-223 + + + + + + + + + + + + + + PS122/4_47-224 + + + + + + + + + + + + + + PS122/4_47-225 + + + + + + + + + + + + + + PS122/4_47-226 + + + + + + + + + + + + + + PS122/4_47-227 + + + + + + + + + + + + + + PS122/4_47-228 + + + + + + + + + + + + + + PS122/4_47-229 + + + + + + + + + + + + + + PS122/4_47-23 + + + + + + + + + + + + + + PS122/4_47-230 + + + + + + + + + + + + + + PS122/4_47-231 + + + + + + + + + + + + + + PS122/4_47-232 + + + + + + + + + + + + + + PS122/4_47-233 + + + + + + + + + + + + + + PS122/4_47-235 + + + + + + + + + + + + + + PS122/4_47-236 + + + + + + + + + + + + + + PS122/4_47-237 + + + + + + + + + + + + + + PS122/4_47-238 + + + + + + + + + + + + + + PS122/4_47-239 + + + + + + + + + + + + + + PS122/4_47-24 + + + + + + + + + + + + + + PS122/4_47-240 + + + + + + + + + + + + + + PS122/4_47-241 + + + + + + + + + + + + + + PS122/4_47-242 + + + + + + + + + + + + + + PS122/4_47-243 + + + + + + + + + + + + + + PS122/4_47-244 + + + + + + + + + + + + + + PS122/4_47-245 + + + + + + + + + + + + + + PS122/4_47-246 + + + + + + + + + + + + + + PS122/4_47-247 + + + + + + + + + + + + + + PS122/4_47-248 + + + + + + + + + + + + + + PS122/4_47-249 + + + + + + + + + + + + + + PS122/4_47-25 + + + + + + + + + + + + + + PS122/4_47-250 + + + + + + + + + + + + + + PS122/4_47-251 + + + + + + + + + + + + + + PS122/4_47-252 + + + + + + + + + + + + + + PS122/4_47-253 + + + + + + + + + + + + + + PS122/4_47-254 + + + + + + + + + + + + + + PS122/4_47-255 + + + + + + + + + + + + + + PS122/4_47-256 + + + + + + + + + + + + + + PS122/4_47-257 + + + + + + + + + + + + + + PS122/4_47-258 + + + + + + + + + + + + + + PS122/4_47-259 + + + + + + + + + + + + + + PS122/4_47-26 + + + + + + + + + + + + + + PS122/4_47-27 + + + + + + + + + + + + + + PS122/4_47-28 + + + + + + + + + + + + + + PS122/4_47-29 + + + + + + + + + + + + + + PS122/4_47-3 + + + + + + + + + + + + + + PS122/4_47-30 + + + + + + + + + + + + + + PS122/4_47-31 + + + + + + + + + + + + + + PS122/4_47-32 + + + + + + + + + + + + + + PS122/4_47-33 + + + + + + + + + + + + + + PS122/4_47-34 + + + + + + + + + + + + + + PS122/4_47-35 + + + + + + + + + + + + + + PS122/4_47-36 + + + + + + + + + + + + + + PS122/4_47-37 + + + + + + + + + + + + + + PS122/4_47-38 + + + + + + + + + + + + + + PS122/4_47-39 + + + + + + + + + + + + + + PS122/4_47-4 + + + + + + + + + + + + + + PS122/4_47-40 + + + + + + + + + + + + + + PS122/4_47-41 + + + + + + + + + + + + + + PS122/4_47-42 + + + + + + + + + + + + + + PS122/4_47-43 + + + + + + + + + + + + + + PS122/4_47-44 + + + + + + + + + + + + + + PS122/4_47-45 + + + + + + + + + + + + + + PS122/4_47-46 + + + + + + + + + + + + + + PS122/4_47-47 + + + + + + + + + + + + + + PS122/4_47-48 + + + + + + + + + + + + + + PS122/4_47-49 + + + + + + + + + + + + + + PS122/4_47-5 + + + + + + + + + + + + + + PS122/4_47-50 + + + + + + + + + + + + + + PS122/4_47-51 + + + + + + + + + + + + + + PS122/4_47-52 + + + + + + + + + + + + + + PS122/4_47-53 + + + + + + + + + + + + + + PS122/4_47-54 + + + + + + + + + + + + + + PS122/4_47-55 + + + + + + + + + + + + + + PS122/4_47-56 + + + + + + + + + + + + + + PS122/4_47-57 + + + + + + + + + + + + + + PS122/4_47-58 + + + + + + + + + + + + + + PS122/4_47-59 + + + + + + + + + + + + + + PS122/4_47-6 + + + + + + + + + + + + + + PS122/4_47-60 + + + + + + + + + + + + + + PS122/4_47-61 + + + + + + + + + + + + + + PS122/4_47-62 + + + + + + + + + + + + + + PS122/4_47-63 + + + + + + + + + + + + + + PS122/4_47-64 + + + + + + + + + + + + + + PS122/4_47-66 + + + + + + + + + + + + + + PS122/4_47-67 + + + + + + + + + + + + + + PS122/4_47-68 + + + + + + + + + + + + + + PS122/4_47-7 + + + + + + + + + + + + + + PS122/4_47-70 + + + + + + + + + + + + + + PS122/4_47-71 + + + + + + + + + + + + + + PS122/4_47-72 + + + + + + + + + + + + + + PS122/4_47-73 + + + + + + + + + + + + + + PS122/4_47-74 + + + + + + + + + + + + + + PS122/4_47-75 + + + + + + + + + + + + + + PS122/4_47-76 + + + + + + + + + + + + + + PS122/4_47-77 + + + + + + + + + + + + + + PS122/4_47-78 + + + + + + + + + + + + + + PS122/4_47-79 + + + + + + + + + + + + + + PS122/4_47-8 + + + + + + + + + + + + + + PS122/4_47-80 + + + + + + + + + + + + + + PS122/4_47-81 + + + + + + + + + + + + + + PS122/4_47-82 + + + + + + + + + + + + + + PS122/4_47-83 + + + + + + + + + + + + + + PS122/4_47-84 + + + + + + + + + + + + + + PS122/4_47-85 + + + + + + + + + + + + + + PS122/4_47-86 + + + + + + + + + + + + + + PS122/4_47-87 + + + + + + + + + + + + + + PS122/4_47-88 + + + + + + + + + + + + + + PS122/4_47-89 + + + + + + + + + + + + + + PS122/4_47-9 + + + + + + + + + + + + + + PS122/4_47-90 + + + + + + + + + + + + + + PS122/4_47-91 + + + + + + + + + + + + + + PS122/4_47-92 + + + + + + + + + + + + + + PS122/4_47-93 + + + + + + + + + + + + + + PS122/4_47-94 + + + + + + + + + + + + + + PS122/4_47-95 + + + + + + + + + + + + + + PS122/4_47-96 + + + + + + + + + + + + + + PS122/4_47-97 + + + + + + + + + + + + + + PS122/4_47-98 + + + + + + + + + + + + + + PS122/4_47-99 + + + + + + + + + + + + + + PS122/4_48-10 + + + + + + + + + + + + + + PS122/4_48-100 + + + + + + + + + + + + + + PS122/4_48-101 + + + + + + + + + + + + + + PS122/4_48-102 + + + + + + + + + + + + + + PS122/4_48-103 + + + + + + + + + + + + + + PS122/4_48-104 + + + + + + + + + + + + + + PS122/4_48-105 + + + + + + + + + + + + + + PS122/4_48-106 + + + + + + + + + + + + + + PS122/4_48-107 + + + + + + + + + + + + + + PS122/4_48-108 + + + + + + + + + + + + + + PS122/4_48-109 + + + + + + + + + + + + + + PS122/4_48-11 + + + + + + + + + + + + + + PS122/4_48-110 + + + + + + + + + + + + + + PS122/4_48-111 + + + + + + + + + + + + + + PS122/4_48-112 + + + + + + + + + + + + + + PS122/4_48-113 + + + + + + + + + + + + + + PS122/4_48-114 + + + + + + + + + + + + + + PS122/4_48-115 + + + + + + + + + + + + + + PS122/4_48-116 + + + + + + + + + + + + + + PS122/4_48-117 + + + + + + + + + + + + + + PS122/4_48-118 + + + + + + + + + + + + + + PS122/4_48-119 + + + + + + + + + + + + + + PS122/4_48-12 + + + + + + + + + + + + + + PS122/4_48-120 + + + + + + + + + + + + + + PS122/4_48-121 + + + + + + + + + + + + + + PS122/4_48-122 + + + + + + + + + + + + + + PS122/4_48-123 + + + + + + + + + + + + + + PS122/4_48-124 + + + + + + + + + + + + + + PS122/4_48-125 + + + + + + + + + + + + + + PS122/4_48-126 + + + + + + + + + + + + + + PS122/4_48-127 + + + + + + + + + + + + + + PS122/4_48-128 + + + + + + + + + + + + + + PS122/4_48-129 + + + + + + + + + + + + + + PS122/4_48-13 + + + + + + + + + + + + + + PS122/4_48-130 + + + + + + + + + + + + + + PS122/4_48-131 + + + + + + + + + + + + + + PS122/4_48-132 + + + + + + + + + + + + + + PS122/4_48-133 + + + + + + + + + + + + + + PS122/4_48-134 + + + + + + + + + + + + + + PS122/4_48-135 + + + + + + + + + + + + + + PS122/4_48-136 + + + + + + + + + + + + + + PS122/4_48-137 + + + + + + + + + + + + + + PS122/4_48-138 + + + + + + + + + + + + + + PS122/4_48-139 + + + + + + + + + + + + + + PS122/4_48-14 + + + + + + + + + + + + + + PS122/4_48-140 + + + + + + + + + + + + + + PS122/4_48-141 + + + + + + + + + + + + + + PS122/4_48-142 + + + + + + + + + + + + + + PS122/4_48-143 + + + + + + + + + + + + + + PS122/4_48-144 + + + + + + + + + + + + + + PS122/4_48-145 + + + + + + + + + + + + + + PS122/4_48-146 + + + + + + + + + + + + + + PS122/4_48-147 + + + + + + + + + + + + + + PS122/4_48-148 + + + + + + + + + + + + + + PS122/4_48-149 + + + + + + + + + + + + + + PS122/4_48-15 + + + + + + + + + + + + + + PS122/4_48-150 + + + + + + + + + + + + + + PS122/4_48-151 + + + + + + + + + + + + + + PS122/4_48-152 + + + + + + + + + + + + + + PS122/4_48-153 + + + + + + + + + + + + + + PS122/4_48-154 + + + + + + + + + + + + + + PS122/4_48-155 + + + + + + + + + + + + + + PS122/4_48-156 + + + + + + + + + + + + + + PS122/4_48-157 + + + + + + + + + + + + + + PS122/4_48-158 + + + + + + + + + + + + + + PS122/4_48-159 + + + + + + + + + + + + + + PS122/4_48-16 + + + + + + + + + + + + + + PS122/4_48-160 + + + + + + + + + + + + + + PS122/4_48-161 + + + + + + + + + + + + + + PS122/4_48-162 + + + + + + + + + + + + + + PS122/4_48-163 + + + + + + + + + + + + + + PS122/4_48-164 + + + + + + + + + + + + + + PS122/4_48-165 + + + + + + + + + + + + + + PS122/4_48-166 + + + + + + + + + + + + + + PS122/4_48-167 + + + + + + + + + + + + + + PS122/4_48-168 + + + + + + + + + + + + + + PS122/4_48-169 + + + + + + + + + + + + + + PS122/4_48-17 + + + + + + + + + + + + + + PS122/4_48-171 + + + + + + + + + + + + + + PS122/4_48-172 + + + + + + + + + + + + + + PS122/4_48-173 + + + + + + + + + + + + + + PS122/4_48-174 + + + + + + + + + + + + + + PS122/4_48-175 + + + + + + + + + + + + + + PS122/4_48-176 + + + + + + + + + + + + + + PS122/4_48-177 + + + + + + + + + + + + + + PS122/4_48-178 + + + + + + + + + + + + + + PS122/4_48-18 + + + + + + + + + + + + + + PS122/4_48-180 + + + + + + + + + + + + + + PS122/4_48-181 + + + + + + + + + + + + + + PS122/4_48-182 + + + + + + + + + + + + + + PS122/4_48-183 + + + + + + + + + + + + + + PS122/4_48-184 + + + + + + + + + + + + + + PS122/4_48-185 + + + + + + + + + + + + + + PS122/4_48-186 + + + + + + + + + + + + + + PS122/4_48-187 + + + + + + + + + + + + + + PS122/4_48-188 + + + + + + + + + + + + + + PS122/4_48-189 + + + + + + + + + + + + + + PS122/4_48-19 + + + + + + + + + + + + + + PS122/4_48-190 + + + + + + + + + + + + + + PS122/4_48-191 + + + + + + + + + + + + + + PS122/4_48-192 + + + + + + + + + + + + + + PS122/4_48-193 + + + + + + + + + + + + + + PS122/4_48-194 + + + + + + + + + + + + + + PS122/4_48-195 + + + + + + + + + + + + + + PS122/4_48-196 + + + + + + + + + + + + + + PS122/4_48-197 + + + + + + + + + + + + + + PS122/4_48-198 + + + + + + + + + + + + + + PS122/4_48-199 + + + + + + + + + + + + + + PS122/4_48-2 + + + + + + + + + + + + + + PS122/4_48-20 + + + + + + + + + + + + + + PS122/4_48-200 + + + + + + + + + + + + + + PS122/4_48-201 + + + + + + + + + + + + + + PS122/4_48-202 + + + + + + + + + + + + + + PS122/4_48-203 + + + + + + + + + + + + + + PS122/4_48-204 + + + + + + + + + + + + + + PS122/4_48-205 + + + + + + + + + + + + + + PS122/4_48-206 + + + + + + + + + + + + + + PS122/4_48-207 + + + + + + + + + + + + + + PS122/4_48-208 + + + + + + + + + + + + + + PS122/4_48-209 + + + + + + + + + + + + + + PS122/4_48-21 + + + + + + + + + + + + + + PS122/4_48-210 + + + + + + + + + + + + + + PS122/4_48-211 + + + + + + + + + + + + + + PS122/4_48-212 + + + + + + + + + + + + + + PS122/4_48-213 + + + + + + + + + + + + + + PS122/4_48-214 + + + + + + + + + + + + + + PS122/4_48-215 + + + + + + + + + + + + + + PS122/4_48-216 + + + + + + + + + + + + + + PS122/4_48-217 + + + + + + + + + + + + + + PS122/4_48-218 + + + + + + + + + + + + + + PS122/4_48-219 + + + + + + + + + + + + + + PS122/4_48-22 + + + + + + + + + + + + + + PS122/4_48-220 + + + + + + + + + + + + + + PS122/4_48-221 + + + + + + + + + + + + + + PS122/4_48-222 + + + + + + + + + + + + + + PS122/4_48-223 + + + + + + + + + + + + + + PS122/4_48-225 + + + + + + + + + + + + + + PS122/4_48-226 + + + + + + + + + + + + + + PS122/4_48-227 + + + + + + + + + + + + + + PS122/4_48-228 + + + + + + + + + + + + + + PS122/4_48-229 + + + + + + + + + + + + + + PS122/4_48-23 + + + + + + + + + + + + + + PS122/4_48-230 + + + + + + + + + + + + + + PS122/4_48-231 + + + + + + + + + + + + + + PS122/4_48-232 + + + + + + + + + + + + + + PS122/4_48-233 + + + + + + + + + + + + + + PS122/4_48-234 + + + + + + + + + + + + + + PS122/4_48-235 + + + + + + + + + + + + + + PS122/4_48-237 + + + + + + + + + + + + + + PS122/4_48-238 + + + + + + + + + + + + + + PS122/4_48-239 + + + + + + + + + + + + + + PS122/4_48-24 + + + + + + + + + + + + + + PS122/4_48-240 + + + + + + + + + + + + + + PS122/4_48-241 + + + + + + + + + + + + + + PS122/4_48-243 + + + + + + + + + + + + + + PS122/4_48-244 + + + + + + + + + + + + + + PS122/4_48-245 + + + + + + + + + + + + + + PS122/4_48-246 + + + + + + + + + + + + + + PS122/4_48-247 + + + + + + + + + + + + + + PS122/4_48-248 + + + + + + + + + + + + + + PS122/4_48-249 + + + + + + + + + + + + + + PS122/4_48-25 + + + + + + + + + + + + + + PS122/4_48-250 + + + + + + + + + + + + + + PS122/4_48-251 + + + + + + + + + + + + + + PS122/4_48-252 + + + + + + + + + + + + + + PS122/4_48-253 + + + + + + + + + + + + + + PS122/4_48-254 + + + + + + + + + + + + + + PS122/4_48-255 + + + + + + + + + + + + + + PS122/4_48-256 + + + + + + + + + + + + + + PS122/4_48-257 + + + + + + + + + + + + + + PS122/4_48-258 + + + + + + + + + + + + + + PS122/4_48-259 + + + + + + + + + + + + + + PS122/4_48-26 + + + + + + + + + + + + + + PS122/4_48-260 + + + + + + + + + + + + + + PS122/4_48-261 + + + + + + + + + + + + + + PS122/4_48-262 + + + + + + + + + + + + + + PS122/4_48-263 + + + + + + + + + + + + + + PS122/4_48-264 + + + + + + + + + + + + + + PS122/4_48-265 + + + + + + + + + + + + + + PS122/4_48-266 + + + + + + + + + + + + + + PS122/4_48-267 + + + + + + + + + + + + + + PS122/4_48-268 + + + + + + + + + + + + + + PS122/4_48-269 + + + + + + + + + + + + + + PS122/4_48-27 + + + + + + + + + + + + + + PS122/4_48-270 + + + + + + + + + + + + + + PS122/4_48-271 + + + + + + + + + + + + + + PS122/4_48-272 + + + + + + + + + + + + + + PS122/4_48-273 + + + + + + + + + + + + + + PS122/4_48-274 + + + + + + + + + + + + + + PS122/4_48-275 + + + + + + + + + + + + + + PS122/4_48-276 + + + + + + + + + + + + + + PS122/4_48-277 + + + + + + + + + + + + + + PS122/4_48-278 + + + + + + + + + + + + + + PS122/4_48-279 + + + + + + + + + + + + + + PS122/4_48-28 + + + + + + + + + + + + + + PS122/4_48-280 + + + + + + + + + + + + + + PS122/4_48-281 + + + + + + + + + + + + + + PS122/4_48-282 + + + + + + + + + + + + + + PS122/4_48-283 + + + + + + + + + + + + + + PS122/4_48-284 + + + + + + + + + + + + + + PS122/4_48-285 + + + + + + + + + + + + + + PS122/4_48-286 + + + + + + + + + + + + + + PS122/4_48-287 + + + + + + + + + + + + + + PS122/4_48-288 + + + + + + + + + + + + + + PS122/4_48-289 + + + + + + + + + + + + + + PS122/4_48-29 + + + + + + + + + + + + + + PS122/4_48-290 + + + + + + + + + + + + + + PS122/4_48-291 + + + + + + + + + + + + + + PS122/4_48-292 + + + + + + + + + + + + + + PS122/4_48-293 + + + + + + + + + + + + + + PS122/4_48-294 + + + + + + + + + + + + + + PS122/4_48-295 + + + + + + + + + + + + + + PS122/4_48-296 + + + + + + + + + + + + + + PS122/4_48-297 + + + + + + + + + + + + + + PS122/4_48-3 + + + + + + + + + + + + + + PS122/4_48-30 + + + + + + + + + + + + + + PS122/4_48-31 + + + + + + + + + + + + + + PS122/4_48-32 + + + + + + + + + + + + + + PS122/4_48-33 + + + + + + + + + + + + + + PS122/4_48-34 + + + + + + + + + + + + + + PS122/4_48-35 + + + + + + + + + + + + + + PS122/4_48-36 + + + + + + + + + + + + + + PS122/4_48-37 + + + + + + + + + + + + + + PS122/4_48-38 + + + + + + + + + + + + + + PS122/4_48-39 + + + + + + + + + + + + + + PS122/4_48-4 + + + + + + + + + + + + + + PS122/4_48-40 + + + + + + + + + + + + + + PS122/4_48-41 + + + + + + + + + + + + + + PS122/4_48-42 + + + + + + + + + + + + + + PS122/4_48-43 + + + + + + + + + + + + + + PS122/4_48-44 + + + + + + + + + + + + + + PS122/4_48-45 + + + + + + + + + + + + + + PS122/4_48-46 + + + + + + + + + + + + + + PS122/4_48-47 + + + + + + + + + + + + + + PS122/4_48-48 + + + + + + + + + + + + + + PS122/4_48-49 + + + + + + + + + + + + + + PS122/4_48-5 + + + + + + + + + + + + + + PS122/4_48-50 + + + + + + + + + + + + + + PS122/4_48-51 + + + + + + + + + + + + + + PS122/4_48-52 + + + + + + + + + + + + + + PS122/4_48-53 + + + + + + + + + + + + + + PS122/4_48-54 + + + + + + + + + + + + + + PS122/4_48-55 + + + + + + + + + + + + + + PS122/4_48-56 + + + + + + + + + + + + + + PS122/4_48-57 + + + + + + + + + + + + + + PS122/4_48-58 + + + + + + + + + + + + + + PS122/4_48-59 + + + + + + + + + + + + + + PS122/4_48-6 + + + + + + + + + + + + + + PS122/4_48-60 + + + + + + + + + + + + + + PS122/4_48-61 + + + + + + + + + + + + + + PS122/4_48-62 + + + + + + + + + + + + + + PS122/4_48-63 + + + + + + + + + + + + + + PS122/4_48-64 + + + + + + + + + + + + + + PS122/4_48-65 + + + + + + + + + + + + + + PS122/4_48-66 + + + + + + + + + + + + + + PS122/4_48-67 + + + + + + + + + + + + + + PS122/4_48-68 + + + + + + + + + + + + + + PS122/4_48-69 + + + + + + + + + + + + + + PS122/4_48-7 + + + + + + + + + + + + + + PS122/4_48-70 + + + + + + + + + + + + + + PS122/4_48-71 + + + + + + + + + + + + + + PS122/4_48-72 + + + + + + + + + + + + + + PS122/4_48-73 + + + + + + + + + + + + + + PS122/4_48-74 + + + + + + + + + + + + + + PS122/4_48-75 + + + + + + + + + + + + + + PS122/4_48-76 + + + + + + + + + + + + + + PS122/4_48-77 + + + + + + + + + + + + + + PS122/4_48-78 + + + + + + + + + + + + + + PS122/4_48-79 + + + + + + + + + + + + + + PS122/4_48-8 + + + + + + + + + + + + + + PS122/4_48-80 + + + + + + + + + + + + + + PS122/4_48-81 + + + + + + + + + + + + + + PS122/4_48-83 + + + + + + + + + + + + + + PS122/4_48-84 + + + + + + + + + + + + + + PS122/4_48-85 + + + + + + + + + + + + + + PS122/4_48-86 + + + + + + + + + + + + + + PS122/4_48-87 + + + + + + + + + + + + + + PS122/4_48-88 + + + + + + + + + + + + + + PS122/4_48-89 + + + + + + + + + + + + + + PS122/4_48-9 + + + + + + + + + + + + + + PS122/4_48-90 + + + + + + + + + + + + + + PS122/4_48-91 + + + + + + + + + + + + + + PS122/4_48-92 + + + + + + + + + + + + + + PS122/4_48-93 + + + + + + + + + + + + + + PS122/4_48-94 + + + + + + + + + + + + + + PS122/4_48-95 + + + + + + + + + + + + + + PS122/4_48-96 + + + + + + + + + + + + + + PS122/4_48-97 + + + + + + + + + + + + + + PS122/4_48-98 + + + + + + + + + + + + + + PS122/4_48-99 + + + + + + + + + + + + + + PS122/4_49-10 + + + + + + + + + + + + + + PS122/4_49-100 + + + + + + + + + + + + + + PS122/4_49-101 + + + + + + + + + + + + + + PS122/4_49-102 + + + + + + + + + + + + + + PS122/4_49-103 + + + + + + + + + + + + + + PS122/4_49-104 + + + + + + + + + + + + + + PS122/4_49-105 + + + + + + + + + + + + + + PS122/4_49-106 + + + + + + + + + + + + + + PS122/4_49-107 + + + + + + + + + + + + + + PS122/4_49-108 + + + + + + + + + + + + + + PS122/4_49-11 + + + + + + + + + + + + + + PS122/4_49-111 + + + + + + + + + + + + + + PS122/4_49-112 + + + + + + + + + + + + + + PS122/4_49-113 + + + + + + + + + + + + + + PS122/4_49-114 + + + + + + + + + + + + + + PS122/4_49-115 + + + + + + + + + + + + + + PS122/4_49-116 + + + + + + + + + + + + + + PS122/4_49-117 + + + + + + + + + + + + + + PS122/4_49-119 + + + + + + + + + + + + + + PS122/4_49-12 + + + + + + + + + + + + + + PS122/4_49-120 + + + + + + + + + + + + + + PS122/4_49-121 + + + + + + + + + + + + + + PS122/4_49-128 + + + + + + + + + + + + + + PS122/4_49-129 + + + + + + + + + + + + + + PS122/4_49-13 + + + + + + + + + + + + + + PS122/4_49-130 + + + + + + + + + + + + + + PS122/4_49-131 + + + + + + + + + + + + + + PS122/4_49-132 + + + + + + + + + + + + + + PS122/4_49-133 + + + + + + + + + + + + + + PS122/4_49-134 + + + + + + + + + + + + + + PS122/4_49-136 + + + + + + + + + + + + + + PS122/4_49-14 + + + + + + + + + + + + + + PS122/4_49-15 + + + + + + + + + + + + + + PS122/4_49-16 + + + + + + + + + + + + + + PS122/4_49-17 + + + + + + + + + + + + + + PS122/4_49-18 + + + + + + + + + + + + + + PS122/4_49-19 + + + + + + + + + + + + + + PS122/4_49-2 + + + + + + + + + + + + + + PS122/4_49-20 + + + + + + + + + + + + + + PS122/4_49-21 + + + + + + + + + + + + + + PS122/4_49-22 + + + + + + + + + + + + + + PS122/4_49-23 + + + + + + + + + + + + + + PS122/4_49-24 + + + + + + + + + + + + + + PS122/4_49-25 + + + + + + + + + + + + + + PS122/4_49-26 + + + + + + + + + + + + + + PS122/4_49-27 + + + + + + + + + + + + + + PS122/4_49-28 + + + + + + + + + + + + + + PS122/4_49-29 + + + + + + + + + + + + + + PS122/4_49-3 + + + + + + + + + + + + + + PS122/4_49-30 + + + + + + + + + + + + + + PS122/4_49-31 + + + + + + + + + + + + + + PS122/4_49-32 + + + + + + + + + + + + + + PS122/4_49-33 + + + + + + + + + + + + + + PS122/4_49-34 + + + + + + + + + + + + + + PS122/4_49-35 + + + + + + + + + + + + + + PS122/4_49-36 + + + + + + + + + + + + + + PS122/4_49-37 + + + + + + + + + + + + + + PS122/4_49-38 + + + + + + + + + + + + + + PS122/4_49-39 + + + + + + + + + + + + + + PS122/4_49-4 + + + + + + + + + + + + + + PS122/4_49-40 + + + + + + + + + + + + + + PS122/4_49-41 + + + + + + + + + + + + + + PS122/4_49-42 + + + + + + + + + + + + + + PS122/4_49-44 + + + + + + + + + + + + + + PS122/4_49-45 + + + + + + + + + + + + + + PS122/4_49-46 + + + + + + + + + + + + + + PS122/4_49-47 + + + + + + + + + + + + + + PS122/4_49-48 + + + + + + + + + + + + + + PS122/4_49-49 + + + + + + + + + + + + + + PS122/4_49-5 + + + + + + + + + + + + + + PS122/4_49-50 + + + + + + + + + + + + + + PS122/4_49-51 + + + + + + + + + + + + + + PS122/4_49-52 + + + + + + + + + + + + + + PS122/4_49-53 + + + + + + + + + + + + + + PS122/4_49-54 + + + + + + + + + + + + + + PS122/4_49-55 + + + + + + + + + + + + + + PS122/4_49-56 + + + + + + + + + + + + + + PS122/4_49-57 + + + + + + + + + + + + + + PS122/4_49-58 + + + + + + + + + + + + + + PS122/4_49-59 + + + + + + + + + + + + + + PS122/4_49-6 + + + + + + + + + + + + + + PS122/4_49-60 + + + + + + + + + + + + + + PS122/4_49-61 + + + + + + + + + + + + + + PS122/4_49-62 + + + + + + + + + + + + + + PS122/4_49-63 + + + + + + + + + + + + + + PS122/4_49-64 + + + + + + + + + + + + + + PS122/4_49-65 + + + + + + + + + + + + + + PS122/4_49-66 + + + + + + + + + + + + + + PS122/4_49-67 + + + + + + + + + + + + + + PS122/4_49-68 + + + + + + + + + + + + + + PS122/4_49-69 + + + + + + + + + + + + + + PS122/4_49-7 + + + + + + + + + + + + + + PS122/4_49-70 + + + + + + + + + + + + + + PS122/4_49-71 + + + + + + + + + + + + + + PS122/4_49-72 + + + + + + + + + + + + + + PS122/4_49-73 + + + + + + + + + + + + + + PS122/4_49-74 + + + + + + + + + + + + + + PS122/4_49-75 + + + + + + + + + + + + + + PS122/4_49-76 + + + + + + + + + + + + + + PS122/4_49-77 + + + + + + + + + + + + + + PS122/4_49-78 + + + + + + + + + + + + + + PS122/4_49-79 + + + + + + + + + + + + + + PS122/4_49-8 + + + + + + + + + + + + + + PS122/4_49-80 + + + + + + + + + + + + + + PS122/4_49-81 + + + + + + + + + + + + + + PS122/4_49-82 + + + + + + + + + + + + + + PS122/4_49-83 + + + + + + + + + + + + + + PS122/4_49-84 + + + + + + + + + + + + + + PS122/4_49-85 + + + + + + + + + + + + + + PS122/4_49-86 + + + + + + + + + + + + + + PS122/4_49-87 + + + + + + + + + + + + + + PS122/4_49-88 + + + + + + + + + + + + + + PS122/4_49-89 + + + + + + + + + + + + + + PS122/4_49-9 + + + + + + + + + + + + + + PS122/4_49-91 + + + + + + + + + + + + + + PS122/4_49-92 + + + + + + + + + + + + + + PS122/4_49-93 + + + + + + + + + + + + + + PS122/4_49-94 + + + + + + + + + + + + + + PS122/4_49-95 + + + + + + + + + + + + + + PS122/4_49-96 + + + + + + + + + + + + + + PS122/4_49-97 + + + + + + + + + + + + + + PS122/4_49-98 + + + + + + + + + + + + + + PS122/4_49-99 + + + + + + + + + + + + + + PS122/4_50-10 + + + + + + + + + + + + + + PS122/4_50-11 + + + + + + + + + + + + + + PS122/4_50-12 + + + + + + + + + + + + + + PS122/4_50-13 + + + + + + + + + + + + + + PS122/4_50-14 + + + + + + + + + + + + + + PS122/4_50-15 + + + + + + + + + + + + + + PS122/4_50-16 + + + + + + + + + + + + + + PS122/4_50-18 + + + + + + + + + + + + + + PS122/4_50-19 + + + + + + + + + + + + + + PS122/4_50-20 + + + + + + + + + + + + + + PS122/4_50-21 + + + + + + + + + + + + + + PS122/4_50-22 + + + + + + + + + + + + + + PS122/4_50-23 + + + + + + + + + + + + + + PS122/4_50-24 + + + + + + + + + + + + + + PS122/4_50-25 + + + + + + + + + + + + + + PS122/4_50-26 + + + + + + + + + + + + + + PS122/4_50-27 + + + + + + + + + + + + + + PS122/4_50-28 + + + + + + + + + + + + + + PS122/4_50-29 + + + + + + + + + + + + + + PS122/4_50-3 + + + + + + + + + + + + + + PS122/4_50-30 + + + + + + + + + + + + + + PS122/4_50-31 + + + + + + + + + + + + + + PS122/4_50-32 + + + + + + + + + + + + + + PS122/4_50-33 + + + + + + + + + + + + + + PS122/4_50-34 + + + + + + + + + + + + + + PS122/4_50-36 + + + + + + + + + + + + + + PS122/4_50-37 + + + + + + + + + + + + + + PS122/4_50-38 + + + + + + + + + + + + + + PS122/4_50-39 + + + + + + + + + + + + + + PS122/4_50-4 + + + + + + + + + + + + + + PS122/4_50-40 + + + + + + + + + + + + + + PS122/4_50-41 + + + + + + + + + + + + + + PS122/4_50-42 + + + + + + + + + + + + + + PS122/4_50-43 + + + + + + + + + + + + + + PS122/4_50-44 + + + + + + + + + + + + + + PS122/4_50-45 + + + + + + + + + + + + + + PS122/4_50-46 + + + + + + + + + + + + + + PS122/4_50-47 + + + + + + + + + + + + + + PS122/4_50-48 + + + + + + + + + + + + + + PS122/4_50-49 + + + + + + + + + + + + + + PS122/4_50-5 + + + + + + + + + + + + + + PS122/4_50-50 + + + + + + + + + + + + + + PS122/4_50-51 + + + + + + + + + + + + + + PS122/4_50-52 + + + + + + + + + + + + + + PS122/4_50-53 + + + + + + + + + + + + + + PS122/4_50-54 + + + + + + + + + + + + + + PS122/4_50-55 + + + + + + + + + + + + + + PS122/4_50-56 + + + + + + + + + + + + + + PS122/4_50-57 + + + + + + + + + + + + + + PS122/4_50-58 + + + + + + + + + + + + + + PS122/4_50-59 + + + + + + + + + + + + + + PS122/4_50-6 + + + + + + + + + + + + + + PS122/4_50-60 + + + + + + + + + + + + + + PS122/4_50-62 + + + + + + + + + + + + + + PS122/4_50-63 + + + + + + + + + + + + + + PS122/4_50-64 + + + + + + + + + + + + + + PS122/4_50-65 + + + + + + + + + + + + + + PS122/4_50-66 + + + + + + + + + + + + + + PS122/4_50-67 + + + + + + + + + + + + + + PS122/4_50-68 + + + + + + + + + + + + + + PS122/4_50-69 + + + + + + + + + + + + + + PS122/4_50-7 + + + + + + + + + + + + + + PS122/4_50-70 + + + + + + + + + + + + + + PS122/4_50-71 + + + + + + + + + + + + + + PS122/4_50-73 + + + + + + + + + + + + + + PS122/4_50-74 + + + + + + + + + + + + + + PS122/4_50-75 + + + + + + + + + + + + + + PS122/4_50-76 + + + + + + + + + + + + + + PS122/4_50-77 + + + + + + + + + + + + + + PS122/4_50-78 + + + + + + + + + + + + + + PS122/4_50-79 + + + + + + + + + + + + + + PS122/4_50-8 + + + + + + + + + + + + + + PS122/4_50-9 + + + + + + + + + + + + + + PS122/4_57-2 + + + + + + + + + + + + + + PS122/5_0_Underway-11 + + + + + + + + + + + + + + PS122/5_0_Underway-14 + + + + + + + + + + + + + + PS122/5_0_Underway-17 + + + + + + + + + + + + + + PS122/5_0_Underway-20 + + + + + + + + + + + + + + PS122/5_0_Underway-24 + + + + + + + + + + + + + + PS122/5_0_Underway-27 + + + + + + + + + + + + + + PS122/5_0_Underway-28 + + + + + + + + + + + + + + PS122/5_0_Underway-29 + + + + + + + + + + + + + + PS122/5_0_Underway-3 + + + + + + + + + + + + + + PS122/5_0_Underway-34 + + + + + + + + + + + + + + PS122/5_0_Underway-35 + + + + + + + + + + + + + + PS122/5_0_Underway-36 + + + + + + + + + + + + + + PS122/5_0_Underway-41 + + + + + + + + + + + + + + PS122/5_0_Underway-42 + + + + + + + + + + + + + + PS122/5_0_Underway-44 + + + + + + + + + + + + + + PS122/5_58-10 + + + + + + + + + + + + + + PS122/5_58-100 + + + + + + + + + + + + + + PS122/5_58-101 + + + + + + + + + + + + + + PS122/5_58-102 + + + + + + + + + + + + + + PS122/5_58-103 + + + + + + + + + + + + + + PS122/5_58-104 + + + + + + + + + + + + + + PS122/5_58-105 + + + + + + + + + + + + + + PS122/5_58-106 + + + + + + + + + + + + + + PS122/5_58-107 + + + + + + + + + + + + + + PS122/5_58-108 + + + + + + + + + + + + + + PS122/5_58-11 + + + + + + + + + + + + + + PS122/5_58-111 + + + + + + + + + + + + + + PS122/5_58-112 + + + + + + + + + + + + + + PS122/5_58-113 + + + + + + + + + + + + + + PS122/5_58-114 + + + + + + + + + + + + + + PS122/5_58-116 + + + + + + + + + + + + + + PS122/5_58-117 + + + + + + + + + + + + + + PS122/5_58-118 + + + + + + + + + + + + + + PS122/5_58-119 + + + + + + + + + + + + + + PS122/5_58-12 + + + + + + + + + + + + + + PS122/5_58-120 + + + + + + + + + + + + + + PS122/5_58-121 + + + + + + + + + + + + + + PS122/5_58-122 + + + + + + + + + + + + + + PS122/5_58-123 + + + + + + + + + + + + + + PS122/5_58-124 + + + + + + + + + + + + + + PS122/5_58-125 + + + + + + + + + + + + + + PS122/5_58-126 + + + + + + + + + + + + + + PS122/5_58-128 + + + + + + + + + + + + + + PS122/5_58-129 + + + + + + + + + + + + + + PS122/5_58-13 + + + + + + + + + + + + + + PS122/5_58-130 + + + + + + + + + + + + + + PS122/5_58-131 + + + + + + + + + + + + + + PS122/5_58-14 + + + + + + + + + + + + + + PS122/5_58-15 + + + + + + + + + + + + + + PS122/5_58-153 + + + + + + + + + + + + + + PS122/5_58-154 + + + + + + + + + + + + + + PS122/5_58-155 + + + + + + + + + + + + + + PS122/5_58-156 + + + + + + + + + + + + + + PS122/5_58-157 + + + + + + + + + + + + + + PS122/5_58-158 + + + + + + + + + + + + + + PS122/5_58-159 + + + + + + + + + + + + + + PS122/5_58-16 + + + + + + + + + + + + + + PS122/5_58-160 + + + + + + + + + + + + + + PS122/5_58-161 + + + + + + + + + + + + + + PS122/5_58-162 + + + + + + + + + + + + + + PS122/5_58-163 + + + + + + + + + + + + + + PS122/5_58-164 + + + + + + + + + + + + + + PS122/5_58-165 + + + + + + + + + + + + + + PS122/5_58-166 + + + + + + + + + + + + + + PS122/5_58-167 + + + + + + + + + + + + + + PS122/5_58-168 + + + + + + + + + + + + + + PS122/5_58-169 + + + + + + + + + + + + + + PS122/5_58-170 + + + + + + + + + + + + + + PS122/5_58-171 + + + + + + + + + + + + + + PS122/5_58-18 + + + + + + + + + + + + + + PS122/5_58-19 + + + + + + + + + + + + + + PS122/5_58-2 + + + + + + + + + + + + + + PS122/5_58-20 + + + + + + + + + + + + + + PS122/5_58-21 + + + + + + + + + + + + + + PS122/5_58-22 + + + + + + + + + + + + + + PS122/5_58-23 + + + + + + + + + + + + + + PS122/5_58-24 + + + + + + + + + + + + + + PS122/5_58-25 + + + + + + + + + + + + + + PS122/5_58-26 + + + + + + + + + + + + + + PS122/5_58-27 + + + + + + + + + + + + + + PS122/5_58-28 + + + + + + + + + + + + + + PS122/5_58-29 + + + + + + + + + + + + + + PS122/5_58-3 + + + + + + + + + + + + + + PS122/5_58-30 + + + + + + + + + + + + + + PS122/5_58-31 + + + + + + + + + + + + + + PS122/5_58-32 + + + + + + + + + + + + + + PS122/5_58-33 + + + + + + + + + + + + + + PS122/5_58-34 + + + + + + + + + + + + + + PS122/5_58-35 + + + + + + + + + + + + + + PS122/5_58-36 + + + + + + + + + + + + + + PS122/5_58-37 + + + + + + + + + + + + + + PS122/5_58-38 + + + + + + + + + + + + + + PS122/5_58-39 + + + + + + + + + + + + + + PS122/5_58-4 + + + + + + + + + + + + + + PS122/5_58-40 + + + + + + + + + + + + + + PS122/5_58-41 + + + + + + + + + + + + + + PS122/5_58-42 + + + + + + + + + + + + + + PS122/5_58-43 + + + + + + + + + + + + + + PS122/5_58-44 + + + + + + + + + + + + + + PS122/5_58-45 + + + + + + + + + + + + + + PS122/5_58-46 + + + + + + + + + + + + + + PS122/5_58-47 + + + + + + + + + + + + + + PS122/5_58-48 + + + + + + + + + + + + + + PS122/5_58-49 + + + + + + + + + + + + + + PS122/5_58-5 + + + + + + + + + + + + + + PS122/5_58-50 + + + + + + + + + + + + + + PS122/5_58-51 + + + + + + + + + + + + + + PS122/5_58-52 + + + + + + + + + + + + + + PS122/5_58-53 + + + + + + + + + + + + + + PS122/5_58-54 + + + + + + + + + + + + + + PS122/5_58-55 + + + + + + + + + + + + + + PS122/5_58-56 + + + + + + + + + + + + + + PS122/5_58-57 + + + + + + + + + + + + + + PS122/5_58-58 + + + + + + + + + + + + + + PS122/5_58-59 + + + + + + + + + + + + + + PS122/5_58-6 + + + + + + + + + + + + + + PS122/5_58-60 + + + + + + + + + + + + + + PS122/5_58-61 + + + + + + + + + + + + + + PS122/5_58-62 + + + + + + + + + + + + + + PS122/5_58-63 + + + + + + + + + + + + + + PS122/5_58-64 + + + + + + + + + + + + + + PS122/5_58-65 + + + + + + + + + + + + + + PS122/5_58-66 + + + + + + + + + + + + + + PS122/5_58-67 + + + + + + + + + + + + + + PS122/5_58-68 + + + + + + + + + + + + + + PS122/5_58-69 + + + + + + + + + + + + + + PS122/5_58-7 + + + + + + + + + + + + + + PS122/5_58-70 + + + + + + + + + + + + + + PS122/5_58-71 + + + + + + + + + + + + + + PS122/5_58-72 + + + + + + + + + + + + + + PS122/5_58-73 + + + + + + + + + + + + + + PS122/5_58-74 + + + + + + + + + + + + + + PS122/5_58-75 + + + + + + + + + + + + + + PS122/5_58-76 + + + + + + + + + + + + + + PS122/5_58-77 + + + + + + + + + + + + + + PS122/5_58-78 + + + + + + + + + + + + + + PS122/5_58-79 + + + + + + + + + + + + + + PS122/5_58-8 + + + + + + + + + + + + + + PS122/5_58-80 + + + + + + + + + + + + + + PS122/5_58-81 + + + + + + + + + + + + + + PS122/5_58-82 + + + + + + + + + + + + + + PS122/5_58-83 + + + + + + + + + + + + + + PS122/5_58-84 + + + + + + + + + + + + + + PS122/5_58-85 + + + + + + + + + + + + + + PS122/5_58-86 + + + + + + + + + + + + + + PS122/5_58-87 + + + + + + + + + + + + + + PS122/5_58-88 + + + + + + + + + + + + + + PS122/5_58-89 + + + + + + + + + + + + + + PS122/5_58-9 + + + + + + + + + + + + + + PS122/5_58-90 + + + + + + + + + + + + + + PS122/5_58-91 + + + + + + + + + + + + + + PS122/5_58-92 + + + + + + + + + + + + + + PS122/5_58-93 + + + + + + + + + + + + + + PS122/5_58-94 + + + + + + + + + + + + + + PS122/5_58-95 + + + + + + + + + + + + + + PS122/5_58-96 + + + + + + + + + + + + + + PS122/5_58-97 + + + + + + + + + + + + + + PS122/5_58-98 + + + + + + + + + + + + + + PS122/5_58-99 + + + + + + + + + + + + + + PS122/5_59-10 + + + + + + + + + + + + + + PS122/5_59-100 + + + + + + + + + + + + + + PS122/5_59-101 + + + + + + + + + + + + + + PS122/5_59-102 + + + + + + + + + + + + + + PS122/5_59-103 + + + + + + + + + + + + + + PS122/5_59-104 + + + + + + + + + + + + + + PS122/5_59-105 + + + + + + + + + + + + + + PS122/5_59-106 + + + + + + + + + + + + + + PS122/5_59-107 + + + + + + + + + + + + + + PS122/5_59-108 + + + + + + + + + + + + + + PS122/5_59-109 + + + + + + + + + + + + + + PS122/5_59-11 + + + + + + + + + + + + + + PS122/5_59-110 + + + + + + + + + + + + + + PS122/5_59-111 + + + + + + + + + + + + + + PS122/5_59-112 + + + + + + + + + + + + + + PS122/5_59-113 + + + + + + + + + + + + + + PS122/5_59-115 + + + + + + + + + + + + + + PS122/5_59-116 + + + + + + + + + + + + + + PS122/5_59-117 + + + + + + + + + + + + + + PS122/5_59-118 + + + + + + + + + + + + + + PS122/5_59-119 + + + + + + + + + + + + + + PS122/5_59-12 + + + + + + + + + + + + + + PS122/5_59-120 + + + + + + + + + + + + + + PS122/5_59-121 + + + + + + + + + + + + + + PS122/5_59-122 + + + + + + + + + + + + + + PS122/5_59-123 + + + + + + + + + + + + + + PS122/5_59-124 + + + + + + + + + + + + + + PS122/5_59-125 + + + + + + + + + + + + + + PS122/5_59-126 + + + + + + + + + + + + + + PS122/5_59-127 + + + + + + + + + + + + + + PS122/5_59-128 + + + + + + + + + + + + + + PS122/5_59-129 + + + + + + + + + + + + + + PS122/5_59-13 + + + + + + + + + + + + + + PS122/5_59-130 + + + + + + + + + + + + + + PS122/5_59-131 + + + + + + + + + + + + + + PS122/5_59-133 + + + + + + + + + + + + + + PS122/5_59-134 + + + + + + + + + + + + + + PS122/5_59-135 + + + + + + + + + + + + + + PS122/5_59-136 + + + + + + + + + + + + + + PS122/5_59-137 + + + + + + + + + + + + + + PS122/5_59-138 + + + + + + + + + + + + + + PS122/5_59-139 + + + + + + + + + + + + + + PS122/5_59-14 + + + + + + + + + + + + + + PS122/5_59-140 + + + + + + + + + + + + + + PS122/5_59-141 + + + + + + + + + + + + + + PS122/5_59-142 + + + + + + + + + + + + + + PS122/5_59-143 + + + + + + + + + + + + + + PS122/5_59-144 + + + + + + + + + + + + + + PS122/5_59-145 + + + + + + + + + + + + + + PS122/5_59-146 + + + + + + + + + + + + + + PS122/5_59-147 + + + + + + + + + + + + + + PS122/5_59-148 + + + + + + + + + + + + + + PS122/5_59-149 + + + + + + + + + + + + + + PS122/5_59-15 + + + + + + + + + + + + + + PS122/5_59-150 + + + + + + + + + + + + + + PS122/5_59-151 + + + + + + + + + + + + + + PS122/5_59-153 + + + + + + + + + + + + + + PS122/5_59-154 + + + + + + + + + + + + + + PS122/5_59-155 + + + + + + + + + + + + + + PS122/5_59-156 + + + + + + + + + + + + + + PS122/5_59-157 + + + + + + + + + + + + + + PS122/5_59-158 + + + + + + + + + + + + + + PS122/5_59-159 + + + + + + + + + + + + + + PS122/5_59-160 + + + + + + + + + + + + + + PS122/5_59-161 + + + + + + + + + + + + + + PS122/5_59-162 + + + + + + + + + + + + + + PS122/5_59-163 + + + + + + + + + + + + + + PS122/5_59-164 + + + + + + + + + + + + + + PS122/5_59-165 + + + + + + + + + + + + + + PS122/5_59-166 + + + + + + + + + + + + + + PS122/5_59-167 + + + + + + + + + + + + + + PS122/5_59-168 + + + + + + + + + + + + + + PS122/5_59-169 + + + + + + + + + + + + + + PS122/5_59-17 + + + + + + + + + + + + + + PS122/5_59-170 + + + + + + + + + + + + + + PS122/5_59-172 + + + + + + + + + + + + + + PS122/5_59-173 + + + + + + + + + + + + + + PS122/5_59-174 + + + + + + + + + + + + + + PS122/5_59-175 + + + + + + + + + + + + + + PS122/5_59-176 + + + + + + + + + + + + + + PS122/5_59-177 + + + + + + + + + + + + + + PS122/5_59-178 + + + + + + + + + + + + + + PS122/5_59-179 + + + + + + + + + + + + + + PS122/5_59-18 + + + + + + + + + + + + + + PS122/5_59-180 + + + + + + + + + + + + + + PS122/5_59-181 + + + + + + + + + + + + + + PS122/5_59-182 + + + + + + + + + + + + + + PS122/5_59-183 + + + + + + + + + + + + + + PS122/5_59-184 + + + + + + + + + + + + + + PS122/5_59-185 + + + + + + + + + + + + + + PS122/5_59-186 + + + + + + + + + + + + + + PS122/5_59-187 + + + + + + + + + + + + + + PS122/5_59-188 + + + + + + + + + + + + + + PS122/5_59-189 + + + + + + + + + + + + + + PS122/5_59-19 + + + + + + + + + + + + + + PS122/5_59-190 + + + + + + + + + + + + + + PS122/5_59-191 + + + + + + + + + + + + + + PS122/5_59-192 + + + + + + + + + + + + + + PS122/5_59-193 + + + + + + + + + + + + + + PS122/5_59-194 + + + + + + + + + + + + + + PS122/5_59-195 + + + + + + + + + + + + + + PS122/5_59-196 + + + + + + + + + + + + + + PS122/5_59-197 + + + + + + + + + + + + + + PS122/5_59-198 + + + + + + + + + + + + + + PS122/5_59-199 + + + + + + + + + + + + + + PS122/5_59-20 + + + + + + + + + + + + + + PS122/5_59-200 + + + + + + + + + + + + + + PS122/5_59-201 + + + + + + + + + + + + + + PS122/5_59-202 + + + + + + + + + + + + + + PS122/5_59-203 + + + + + + + + + + + + + + PS122/5_59-204 + + + + + + + + + + + + + + PS122/5_59-205 + + + + + + + + + + + + + + PS122/5_59-206 + + + + + + + + + + + + + + PS122/5_59-207 + + + + + + + + + + + + + + PS122/5_59-208 + + + + + + + + + + + + + + PS122/5_59-209 + + + + + + + + + + + + + + PS122/5_59-21 + + + + + + + + + + + + + + PS122/5_59-210 + + + + + + + + + + + + + + PS122/5_59-211 + + + + + + + + + + + + + + PS122/5_59-212 + + + + + + + + + + + + + + PS122/5_59-213 + + + + + + + + + + + + + + PS122/5_59-214 + + + + + + + + + + + + + + PS122/5_59-215 + + + + + + + + + + + + + + PS122/5_59-216 + + + + + + + + + + + + + + PS122/5_59-217 + + + + + + + + + + + + + + PS122/5_59-218 + + + + + + + + + + + + + + PS122/5_59-219 + + + + + + + + + + + + + + PS122/5_59-22 + + + + + + + + + + + + + + PS122/5_59-220 + + + + + + + + + + + + + + PS122/5_59-221 + + + + + + + + + + + + + + PS122/5_59-222 + + + + + + + + + + + + + + PS122/5_59-223 + + + + + + + + + + + + + + PS122/5_59-224 + + + + + + + + + + + + + + PS122/5_59-225 + + + + + + + + + + + + + + PS122/5_59-226 + + + + + + + + + + + + + + PS122/5_59-227 + + + + + + + + + + + + + + PS122/5_59-228 + + + + + + + + + + + + + + PS122/5_59-229 + + + + + + + + + + + + + + PS122/5_59-23 + + + + + + + + + + + + + + PS122/5_59-230 + + + + + + + + + + + + + + PS122/5_59-231 + + + + + + + + + + + + + + PS122/5_59-232 + + + + + + + + + + + + + + PS122/5_59-233 + + + + + + + + + + + + + + PS122/5_59-234 + + + + + + + + + + + + + + PS122/5_59-235 + + + + + + + + + + + + + + PS122/5_59-236 + + + + + + + + + + + + + + PS122/5_59-237 + + + + + + + + + + + + + + PS122/5_59-238 + + + + + + + + + + + + + + PS122/5_59-239 + + + + + + + + + + + + + + PS122/5_59-24 + + + + + + + + + + + + + + PS122/5_59-240 + + + + + + + + + + + + + + PS122/5_59-241 + + + + + + + + + + + + + + PS122/5_59-242 + + + + + + + + + + + + + + PS122/5_59-243 + + + + + + + + + + + + + + PS122/5_59-244 + + + + + + + + + + + + + + PS122/5_59-245 + + + + + + + + + + + + + + PS122/5_59-246 + + + + + + + + + + + + + + PS122/5_59-247 + + + + + + + + + + + + + + PS122/5_59-248 + + + + + + + + + + + + + + PS122/5_59-25 + + + + + + + + + + + + + + PS122/5_59-250 + + + + + + + + + + + + + + PS122/5_59-253 + + + + + + + + + + + + + + PS122/5_59-254 + + + + + + + + + + + + + + PS122/5_59-255 + + + + + + + + + + + + + + PS122/5_59-256 + + + + + + + + + + + + + + PS122/5_59-257 + + + + + + + + + + + + + + PS122/5_59-258 + + + + + + + + + + + + + + PS122/5_59-259 + + + + + + + + + + + + + + PS122/5_59-26 + + + + + + + + + + + + + + PS122/5_59-260 + + + + + + + + + + + + + + PS122/5_59-261 + + + + + + + + + + + + + + PS122/5_59-262 + + + + + + + + + + + + + + PS122/5_59-263 + + + + + + + + + + + + + + PS122/5_59-264 + + + + + + + + + + + + + + PS122/5_59-265 + + + + + + + + + + + + + + PS122/5_59-266 + + + + + + + + + + + + + + PS122/5_59-267 + + + + + + + + + + + + + + PS122/5_59-268 + + + + + + + + + + + + + + PS122/5_59-269 + + + + + + + + + + + + + + PS122/5_59-27 + + + + + + + + + + + + + + PS122/5_59-270 + + + + + + + + + + + + + + PS122/5_59-271 + + + + + + + + + + + + + + PS122/5_59-272 + + + + + + + + + + + + + + PS122/5_59-273 + + + + + + + + + + + + + + PS122/5_59-274 + + + + + + + + + + + + + + PS122/5_59-275 + + + + + + + + + + + + + + PS122/5_59-276 + + + + + + + + + + + + + + PS122/5_59-277 + + + + + + + + + + + + + + PS122/5_59-278 + + + + + + + + + + + + + + PS122/5_59-279 + + + + + + + + + + + + + + PS122/5_59-28 + + + + + + + + + + + + + + PS122/5_59-280 + + + + + + + + + + + + + + PS122/5_59-281 + + + + + + + + + + + + + + PS122/5_59-282 + + + + + + + + + + + + + + PS122/5_59-283 + + + + + + + + + + + + + + PS122/5_59-284 + + + + + + + + + + + + + + PS122/5_59-285 + + + + + + + + + + + + + + PS122/5_59-286 + + + + + + + + + + + + + + PS122/5_59-287 + + + + + + + + + + + + + + PS122/5_59-288 + + + + + + + + + + + + + + PS122/5_59-289 + + + + + + + + + + + + + + PS122/5_59-29 + + + + + + + + + + + + + + PS122/5_59-290 + + + + + + + + + + + + + + PS122/5_59-291 + + + + + + + + + + + + + + PS122/5_59-292 + + + + + + + + + + + + + + PS122/5_59-293 + + + + + + + + + + + + + + PS122/5_59-294 + + + + + + + + + + + + + + PS122/5_59-295 + + + + + + + + + + + + + + PS122/5_59-296 + + + + + + + + + + + + + + PS122/5_59-297 + + + + + + + + + + + + + + PS122/5_59-298 + + + + + + + + + + + + + + PS122/5_59-299 + + + + + + + + + + + + + + PS122/5_59-3 + + + + + + + + + + + + + + PS122/5_59-30 + + + + + + + + + + + + + + PS122/5_59-300 + + + + + + + + + + + + + + PS122/5_59-301 + + + + + + + + + + + + + + PS122/5_59-302 + + + + + + + + + + + + + + PS122/5_59-303 + + + + + + + + + + + + + + PS122/5_59-304 + + + + + + + + + + + + + + PS122/5_59-305 + + + + + + + + + + + + + + PS122/5_59-306 + + + + + + + + + + + + + + PS122/5_59-307 + + + + + + + + + + + + + + PS122/5_59-308 + + + + + + + + + + + + + + PS122/5_59-309 + + + + + + + + + + + + + + PS122/5_59-31 + + + + + + + + + + + + + + PS122/5_59-310 + + + + + + + + + + + + + + PS122/5_59-311 + + + + + + + + + + + + + + PS122/5_59-312 + + + + + + + + + + + + + + PS122/5_59-313 + + + + + + + + + + + + + + PS122/5_59-314 + + + + + + + + + + + + + + PS122/5_59-315 + + + + + + + + + + + + + + PS122/5_59-316 + + + + + + + + + + + + + + PS122/5_59-317 + + + + + + + + + + + + + + PS122/5_59-318 + + + + + + + + + + + + + + PS122/5_59-319 + + + + + + + + + + + + + + PS122/5_59-32 + + + + + + + + + + + + + + PS122/5_59-320 + + + + + + + + + + + + + + PS122/5_59-321 + + + + + + + + + + + + + + PS122/5_59-323 + + + + + + + + + + + + + + PS122/5_59-324 + + + + + + + + + + + + + + PS122/5_59-325 + + + + + + + + + + + + + + PS122/5_59-326 + + + + + + + + + + + + + + PS122/5_59-327 + + + + + + + + + + + + + + PS122/5_59-328 + + + + + + + + + + + + + + PS122/5_59-329 + + + + + + + + + + + + + + PS122/5_59-33 + + + + + + + + + + + + + + PS122/5_59-330 + + + + + + + + + + + + + + PS122/5_59-331 + + + + + + + + + + + + + + PS122/5_59-336 + + + + + + + + + + + + + + PS122/5_59-337 + + + + + + + + + + + + + + PS122/5_59-338 + + + + + + + + + + + + + + PS122/5_59-339 + + + + + + + + + + + + + + PS122/5_59-34 + + + + + + + + + + + + + + PS122/5_59-340 + + + + + + + + + + + + + + PS122/5_59-341 + + + + + + + + + + + + + + PS122/5_59-342 + + + + + + + + + + + + + + PS122/5_59-343 + + + + + + + + + + + + + + PS122/5_59-344 + + + + + + + + + + + + + + PS122/5_59-345 + + + + + + + + + + + + + + PS122/5_59-346 + + + + + + + + + + + + + + PS122/5_59-347 + + + + + + + + + + + + + + PS122/5_59-348 + + + + + + + + + + + + + + PS122/5_59-349 + + + + + + + + + + + + + + PS122/5_59-35 + + + + + + + + + + + + + + PS122/5_59-350 + + + + + + + + + + + + + + PS122/5_59-351 + + + + + + + + + + + + + + PS122/5_59-352 + + + + + + + + + + + + + + PS122/5_59-353 + + + + + + + + + + + + + + PS122/5_59-354 + + + + + + + + + + + + + + PS122/5_59-355 + + + + + + + + + + + + + + PS122/5_59-356 + + + + + + + + + + + + + + PS122/5_59-357 + + + + + + + + + + + + + + PS122/5_59-358 + + + + + + + + + + + + + + PS122/5_59-359 + + + + + + + + + + + + + + PS122/5_59-36 + + + + + + + + + + + + + + PS122/5_59-360 + + + + + + + + + + + + + + PS122/5_59-361 + + + + + + + + + + + + + + PS122/5_59-362 + + + + + + + + + + + + + + PS122/5_59-363 + + + + + + + + + + + + + + PS122/5_59-364 + + + + + + + + + + + + + + PS122/5_59-365 + + + + + + + + + + + + + + PS122/5_59-366 + + + + + + + + + + + + + + PS122/5_59-367 + + + + + + + + + + + + + + PS122/5_59-368 + + + + + + + + + + + + + + PS122/5_59-369 + + + + + + + + + + + + + + PS122/5_59-37 + + + + + + + + + + + + + + PS122/5_59-370 + + + + + + + + + + + + + + PS122/5_59-371 + + + + + + + + + + + + + + PS122/5_59-372 + + + + + + + + + + + + + + PS122/5_59-373 + + + + + + + + + + + + + + PS122/5_59-374 + + + + + + + + + + + + + + PS122/5_59-375 + + + + + + + + + + + + + + PS122/5_59-376 + + + + + + + + + + + + + + PS122/5_59-377 + + + + + + + + + + + + + + PS122/5_59-378 + + + + + + + + + + + + + + PS122/5_59-379 + + + + + + + + + + + + + + PS122/5_59-38 + + + + + + + + + + + + + + PS122/5_59-380 + + + + + + + + + + + + + + PS122/5_59-381 + + + + + + + + + + + + + + PS122/5_59-382 + + + + + + + + + + + + + + PS122/5_59-383 + + + + + + + + + + + + + + PS122/5_59-384 + + + + + + + + + + + + + + PS122/5_59-385 + + + + + + + + + + + + + + PS122/5_59-386 + + + + + + + + + + + + + + PS122/5_59-387 + + + + + + + + + + + + + + PS122/5_59-388 + + + + + + + + + + + + + + PS122/5_59-389 + + + + + + + + + + + + + + PS122/5_59-39 + + + + + + + + + + + + + + PS122/5_59-391 + + + + + + + + + + + + + + PS122/5_59-392 + + + + + + + + + + + + + + PS122/5_59-393 + + + + + + + + + + + + + + PS122/5_59-394 + + + + + + + + + + + + + + PS122/5_59-395 + + + + + + + + + + + + + + PS122/5_59-396 + + + + + + + + + + + + + + PS122/5_59-397 + + + + + + + + + + + + + + PS122/5_59-398 + + + + + + + + + + + + + + PS122/5_59-399 + + + + + + + + + + + + + + PS122/5_59-4 + + + + + + + + + + + + + + PS122/5_59-40 + + + + + + + + + + + + + + PS122/5_59-400 + + + + + + + + + + + + + + PS122/5_59-401 + + + + + + + + + + + + + + PS122/5_59-402 + + + + + + + + + + + + + + PS122/5_59-403 + + + + + + + + + + + + + + PS122/5_59-404 + + + + + + + + + + + + + + PS122/5_59-405 + + + + + + + + + + + + + + PS122/5_59-406 + + + + + + + + + + + + + + PS122/5_59-407 + + + + + + + + + + + + + + PS122/5_59-408 + + + + + + + + + + + + + + PS122/5_59-409 + + + + + + + + + + + + + + PS122/5_59-41 + + + + + + + + + + + + + + PS122/5_59-410 + + + + + + + + + + + + + + PS122/5_59-411 + + + + + + + + + + + + + + PS122/5_59-412 + + + + + + + + + + + + + + PS122/5_59-413 + + + + + + + + + + + + + + PS122/5_59-414 + + + + + + + + + + + + + + PS122/5_59-415 + + + + + + + + + + + + + + PS122/5_59-416 + + + + + + + + + + + + + + PS122/5_59-417 + + + + + + + + + + + + + + PS122/5_59-418 + + + + + + + + + + + + + + PS122/5_59-419 + + + + + + + + + + + + + + PS122/5_59-42 + + + + + + + + + + + + + + PS122/5_59-420 + + + + + + + + + + + + + + PS122/5_59-421 + + + + + + + + + + + + + + PS122/5_59-422 + + + + + + + + + + + + + + PS122/5_59-423 + + + + + + + + + + + + + + PS122/5_59-424 + + + + + + + + + + + + + + PS122/5_59-425 + + + + + + + + + + + + + + PS122/5_59-426 + + + + + + + + + + + + + + PS122/5_59-427 + + + + + + + + + + + + + + PS122/5_59-428 + + + + + + + + + + + + + + PS122/5_59-430 + + + + + + + + + + + + + + PS122/5_59-431 + + + + + + + + + + + + + + PS122/5_59-432 + + + + + + + + + + + + + + PS122/5_59-433 + + + + + + + + + + + + + + PS122/5_59-434 + + + + + + + + + + + + + + PS122/5_59-435 + + + + + + + + + + + + + + PS122/5_59-436 + + + + + + + + + + + + + + PS122/5_59-437 + + + + + + + + + + + + + + PS122/5_59-438 + + + + + + + + + + + + + + PS122/5_59-439 + + + + + + + + + + + + + + PS122/5_59-44 + + + + + + + + + + + + + + PS122/5_59-440 + + + + + + + + + + + + + + PS122/5_59-441 + + + + + + + + + + + + + + PS122/5_59-442 + + + + + + + + + + + + + + PS122/5_59-443 + + + + + + + + + + + + + + PS122/5_59-444 + + + + + + + + + + + + + + PS122/5_59-445 + + + + + + + + + + + + + + PS122/5_59-446 + + + + + + + + + + + + + + PS122/5_59-447 + + + + + + + + + + + + + + PS122/5_59-448 + + + + + + + + + + + + + + PS122/5_59-45 + + + + + + + + + + + + + + PS122/5_59-450 + + + + + + + + + + + + + + PS122/5_59-451 + + + + + + + + + + + + + + PS122/5_59-452 + + + + + + + + + + + + + + PS122/5_59-453 + + + + + + + + + + + + + + PS122/5_59-454 + + + + + + + + + + + + + + PS122/5_59-455 + + + + + + + + + + + + + + PS122/5_59-456 + + + + + + + + + + + + + + PS122/5_59-457 + + + + + + + + + + + + + + PS122/5_59-458 + + + + + + + + + + + + + + PS122/5_59-459 + + + + + + + + + + + + + + PS122/5_59-46 + + + + + + + + + + + + + + PS122/5_59-460 + + + + + + + + + + + + + + PS122/5_59-461 + + + + + + + + + + + + + + PS122/5_59-462 + + + + + + + + + + + + + + PS122/5_59-463 + + + + + + + + + + + + + + PS122/5_59-464 + + + + + + + + + + + + + + PS122/5_59-465 + + + + + + + + + + + + + + PS122/5_59-466 + + + + + + + + + + + + + + PS122/5_59-467 + + + + + + + + + + + + + + PS122/5_59-469 + + + + + + + + + + + + + + PS122/5_59-47 + + + + + + + + + + + + + + PS122/5_59-470 + + + + + + + + + + + + + + PS122/5_59-471 + + + + + + + + + + + + + + PS122/5_59-472 + + + + + + + + + + + + + + PS122/5_59-473 + + + + + + + + + + + + + + PS122/5_59-474 + + + + + + + + + + + + + + PS122/5_59-475 + + + + + + + + + + + + + + PS122/5_59-476 + + + + + + + + + + + + + + PS122/5_59-477 + + + + + + + + + + + + + + PS122/5_59-478 + + + + + + + + + + + + + + PS122/5_59-479 + + + + + + + + + + + + + + PS122/5_59-48 + + + + + + + + + + + + + + PS122/5_59-480 + + + + + + + + + + + + + + PS122/5_59-481 + + + + + + + + + + + + + + PS122/5_59-482 + + + + + + + + + + + + + + PS122/5_59-483 + + + + + + + + + + + + + + PS122/5_59-484 + + + + + + + + + + + + + + PS122/5_59-485 + + + + + + + + + + + + + + PS122/5_59-486 + + + + + + + + + + + + + + PS122/5_59-487 + + + + + + + + + + + + + + PS122/5_59-488 + + + + + + + + + + + + + + PS122/5_59-489 + + + + + + + + + + + + + + PS122/5_59-49 + + + + + + + + + + + + + + PS122/5_59-490 + + + + + + + + + + + + + + PS122/5_59-491 + + + + + + + + + + + + + + PS122/5_59-492 + + + + + + + + + + + + + + PS122/5_59-493 + + + + + + + + + + + + + + PS122/5_59-494 + + + + + + + + + + + + + + PS122/5_59-495 + + + + + + + + + + + + + + PS122/5_59-496 + + + + + + + + + + + + + + PS122/5_59-497 + + + + + + + + + + + + + + PS122/5_59-498 + + + + + + + + + + + + + + PS122/5_59-499 + + + + + + + + + + + + + + PS122/5_59-5 + + + + + + + + + + + + + + PS122/5_59-50 + + + + + + + + + + + + + + PS122/5_59-500 + + + + + + + + + + + + + + PS122/5_59-501 + + + + + + + + + + + + + + PS122/5_59-502 + + + + + + + + + + + + + + PS122/5_59-503 + + + + + + + + + + + + + + PS122/5_59-51 + + + + + + + + + + + + + + PS122/5_59-52 + + + + + + + + + + + + + + PS122/5_59-53 + + + + + + + + + + + + + + PS122/5_59-54 + + + + + + + + + + + + + + PS122/5_59-56 + + + + + + + + + + + + + + PS122/5_59-58 + + + + + + + + + + + + + + PS122/5_59-59 + + + + + + + + + + + + + + PS122/5_59-6 + + + + + + + + + + + + + + PS122/5_59-60 + + + + + + + + + + + + + + PS122/5_59-62 + + + + + + + + + + + + + + PS122/5_59-63 + + + + + + + + + + + + + + PS122/5_59-65 + + + + + + + + + + + + + + PS122/5_59-66 + + + + + + + + + + + + + + PS122/5_59-67 + + + + + + + + + + + + + + PS122/5_59-68 + + + + + + + + + + + + + + PS122/5_59-69 + + + + + + + + + + + + + + PS122/5_59-7 + + + + + + + + + + + + + + PS122/5_59-70 + + + + + + + + + + + + + + PS122/5_59-71 + + + + + + + + + + + + + + PS122/5_59-72 + + + + + + + + + + + + + + PS122/5_59-73 + + + + + + + + + + + + + + PS122/5_59-74 + + + + + + + + + + + + + + PS122/5_59-75 + + + + + + + + + + + + + + PS122/5_59-76 + + + + + + + + + + + + + + PS122/5_59-77 + + + + + + + + + + + + + + PS122/5_59-78 + + + + + + + + + + + + + + PS122/5_59-79 + + + + + + + + + + + + + + PS122/5_59-8 + + + + + + + + + + + + + + PS122/5_59-80 + + + + + + + + + + + + + + PS122/5_59-81 + + + + + + + + + + + + + + PS122/5_59-82 + + + + + + + + + + + + + + PS122/5_59-83 + + + + + + + + + + + + + + PS122/5_59-84 + + + + + + + + + + + + + + PS122/5_59-85 + + + + + + + + + + + + + + PS122/5_59-86 + + + + + + + + + + + + + + PS122/5_59-87 + + + + + + + + + + + + + + PS122/5_59-88 + + + + + + + + + + + + + + PS122/5_59-89 + + + + + + + + + + + + + + PS122/5_59-9 + + + + + + + + + + + + + + PS122/5_59-90 + + + + + + + + + + + + + + PS122/5_59-91 + + + + + + + + + + + + + + PS122/5_59-92 + + + + + + + + + + + + + + PS122/5_59-93 + + + + + + + + + + + + + + PS122/5_59-94 + + + + + + + + + + + + + + PS122/5_59-95 + + + + + + + + + + + + + + PS122/5_59-96 + + + + + + + + + + + + + + PS122/5_59-97 + + + + + + + + + + + + + + PS122/5_59-98 + + + + + + + + + + + + + + PS122/5_59-99 + + + + + + + + + + + + + + PS122/5_60-10 + + + + + + + + + + + + + + PS122/5_60-104 + + + + + + + + + + + + + + PS122/5_60-11 + + + + + + + + + + + + + + PS122/5_60-113 + + + + + + + + + + + + + + PS122/5_60-114 + + + + + + + + + + + + + + PS122/5_60-115 + + + + + + + + + + + + + + PS122/5_60-116 + + + + + + + + + + + + + + PS122/5_60-117 + + + + + + + + + + + + + + PS122/5_60-118 + + + + + + + + + + + + + + PS122/5_60-119 + + + + + + + + + + + + + + PS122/5_60-12 + + + + + + + + + + + + + + PS122/5_60-120 + + + + + + + + + + + + + + PS122/5_60-121 + + + + + + + + + + + + + + PS122/5_60-122 + + + + + + + + + + + + + + PS122/5_60-123 + + + + + + + + + + + + + + PS122/5_60-124 + + + + + + + + + + + + + + PS122/5_60-125 + + + + + + + + + + + + + + PS122/5_60-126 + + + + + + + + + + + + + + PS122/5_60-127 + + + + + + + + + + + + + + PS122/5_60-128 + + + + + + + + + + + + + + PS122/5_60-129 + + + + + + + + + + + + + + PS122/5_60-13 + + + + + + + + + + + + + + PS122/5_60-130 + + + + + + + + + + + + + + PS122/5_60-131 + + + + + + + + + + + + + + PS122/5_60-132 + + + + + + + + + + + + + + PS122/5_60-133 + + + + + + + + + + + + + + PS122/5_60-134 + + + + + + + + + + + + + + PS122/5_60-135 + + + + + + + + + + + + + + PS122/5_60-136 + + + + + + + + + + + + + + PS122/5_60-137 + + + + + + + + + + + + + + PS122/5_60-138 + + + + + + + + + + + + + + PS122/5_60-139 + + + + + + + + + + + + + + PS122/5_60-14 + + + + + + + + + + + + + + PS122/5_60-140 + + + + + + + + + + + + + + PS122/5_60-141 + + + + + + + + + + + + + + PS122/5_60-142 + + + + + + + + + + + + + + PS122/5_60-143 + + + + + + + + + + + + + + PS122/5_60-144 + + + + + + + + + + + + + + PS122/5_60-145 + + + + + + + + + + + + + + PS122/5_60-146 + + + + + + + + + + + + + + PS122/5_60-147 + + + + + + + + + + + + + + PS122/5_60-148 + + + + + + + + + + + + + + PS122/5_60-149 + + + + + + + + + + + + + + PS122/5_60-15 + + + + + + + + + + + + + + PS122/5_60-150 + + + + + + + + + + + + + + PS122/5_60-152 + + + + + + + + + + + + + + PS122/5_60-153 + + + + + + + + + + + + + + PS122/5_60-154 + + + + + + + + + + + + + + PS122/5_60-155 + + + + + + + + + + + + + + PS122/5_60-156 + + + + + + + + + + + + + + PS122/5_60-157 + + + + + + + + + + + + + + PS122/5_60-158 + + + + + + + + + + + + + + PS122/5_60-159 + + + + + + + + + + + + + + PS122/5_60-16 + + + + + + + + + + + + + + PS122/5_60-160 + + + + + + + + + + + + + + PS122/5_60-161 + + + + + + + + + + + + + + PS122/5_60-162 + + + + + + + + + + + + + + PS122/5_60-163 + + + + + + + + + + + + + + PS122/5_60-164 + + + + + + + + + + + + + + PS122/5_60-165 + + + + + + + + + + + + + + PS122/5_60-166 + + + + + + + + + + + + + + PS122/5_60-167 + + + + + + + + + + + + + + PS122/5_60-168 + + + + + + + + + + + + + + PS122/5_60-169 + + + + + + + + + + + + + + PS122/5_60-17 + + + + + + + + + + + + + + PS122/5_60-170 + + + + + + + + + + + + + + PS122/5_60-171 + + + + + + + + + + + + + + PS122/5_60-172 + + + + + + + + + + + + + + PS122/5_60-173 + + + + + + + + + + + + + + PS122/5_60-174 + + + + + + + + + + + + + + PS122/5_60-175 + + + + + + + + + + + + + + PS122/5_60-176 + + + + + + + + + + + + + + PS122/5_60-177 + + + + + + + + + + + + + + PS122/5_60-178 + + + + + + + + + + + + + + PS122/5_60-179 + + + + + + + + + + + + + + PS122/5_60-18 + + + + + + + + + + + + + + PS122/5_60-180 + + + + + + + + + + + + + + PS122/5_60-181 + + + + + + + + + + + + + + PS122/5_60-182 + + + + + + + + + + + + + + PS122/5_60-183 + + + + + + + + + + + + + + PS122/5_60-184 + + + + + + + + + + + + + + PS122/5_60-185 + + + + + + + + + + + + + + PS122/5_60-186 + + + + + + + + + + + + + + PS122/5_60-187 + + + + + + + + + + + + + + PS122/5_60-188 + + + + + + + + + + + + + + PS122/5_60-189 + + + + + + + + + + + + + + PS122/5_60-19 + + + + + + + + + + + + + + PS122/5_60-190 + + + + + + + + + + + + + + PS122/5_60-191 + + + + + + + + + + + + + + PS122/5_60-192 + + + + + + + + + + + + + + PS122/5_60-193 + + + + + + + + + + + + + + PS122/5_60-194 + + + + + + + + + + + + + + PS122/5_60-195 + + + + + + + + + + + + + + PS122/5_60-196 + + + + + + + + + + + + + + PS122/5_60-197 + + + + + + + + + + + + + + PS122/5_60-198 + + + + + + + + + + + + + + PS122/5_60-199 + + + + + + + + + + + + + + PS122/5_60-2 + + + + + + + + + + + + + + PS122/5_60-20 + + + + + + + + + + + + + + PS122/5_60-200 + + + + + + + + + + + + + + PS122/5_60-201 + + + + + + + + + + + + + + PS122/5_60-202 + + + + + + + + + + + + + + PS122/5_60-203 + + + + + + + + + + + + + + PS122/5_60-204 + + + + + + + + + + + + + + PS122/5_60-205 + + + + + + + + + + + + + + PS122/5_60-206 + + + + + + + + + + + + + + PS122/5_60-207 + + + + + + + + + + + + + + PS122/5_60-208 + + + + + + + + + + + + + + PS122/5_60-209 + + + + + + + + + + + + + + PS122/5_60-21 + + + + + + + + + + + + + + PS122/5_60-210 + + + + + + + + + + + + + + PS122/5_60-214 + + + + + + + + + + + + + + PS122/5_60-215 + + + + + + + + + + + + + + PS122/5_60-216 + + + + + + + + + + + + + + PS122/5_60-217 + + + + + + + + + + + + + + PS122/5_60-218 + + + + + + + + + + + + + + PS122/5_60-219 + + + + + + + + + + + + + + PS122/5_60-22 + + + + + + + + + + + + + + PS122/5_60-220 + + + + + + + + + + + + + + PS122/5_60-221 + + + + + + + + + + + + + + PS122/5_60-222 + + + + + + + + + + + + + + PS122/5_60-223 + + + + + + + + + + + + + + PS122/5_60-224 + + + + + + + + + + + + + + PS122/5_60-225 + + + + + + + + + + + + + + PS122/5_60-226 + + + + + + + + + + + + + + PS122/5_60-227 + + + + + + + + + + + + + + PS122/5_60-228 + + + + + + + + + + + + + + PS122/5_60-229 + + + + + + + + + + + + + + PS122/5_60-23 + + + + + + + + + + + + + + PS122/5_60-230 + + + + + + + + + + + + + + PS122/5_60-231 + + + + + + + + + + + + + + PS122/5_60-232 + + + + + + + + + + + + + + PS122/5_60-233 + + + + + + + + + + + + + + PS122/5_60-234 + + + + + + + + + + + + + + PS122/5_60-235 + + + + + + + + + + + + + + PS122/5_60-236 + + + + + + + + + + + + + + PS122/5_60-237 + + + + + + + + + + + + + + PS122/5_60-238 + + + + + + + + + + + + + + PS122/5_60-239 + + + + + + + + + + + + + + PS122/5_60-24 + + + + + + + + + + + + + + PS122/5_60-240 + + + + + + + + + + + + + + PS122/5_60-241 + + + + + + + + + + + + + + PS122/5_60-242 + + + + + + + + + + + + + + PS122/5_60-244 + + + + + + + + + + + + + + PS122/5_60-245 + + + + + + + + + + + + + + PS122/5_60-246 + + + + + + + + + + + + + + PS122/5_60-247 + + + + + + + + + + + + + + PS122/5_60-248 + + + + + + + + + + + + + + PS122/5_60-249 + + + + + + + + + + + + + + PS122/5_60-25 + + + + + + + + + + + + + + PS122/5_60-250 + + + + + + + + + + + + + + PS122/5_60-251 + + + + + + + + + + + + + + PS122/5_60-252 + + + + + + + + + + + + + + PS122/5_60-253 + + + + + + + + + + + + + + PS122/5_60-254 + + + + + + + + + + + + + + PS122/5_60-255 + + + + + + + + + + + + + + PS122/5_60-256 + + + + + + + + + + + + + + PS122/5_60-257 + + + + + + + + + + + + + + PS122/5_60-258 + + + + + + + + + + + + + + PS122/5_60-259 + + + + + + + + + + + + + + PS122/5_60-26 + + + + + + + + + + + + + + PS122/5_60-260 + + + + + + + + + + + + + + PS122/5_60-264 + + + + + + + + + + + + + + PS122/5_60-265 + + + + + + + + + + + + + + PS122/5_60-266 + + + + + + + + + + + + + + PS122/5_60-267 + + + + + + + + + + + + + + PS122/5_60-268 + + + + + + + + + + + + + + PS122/5_60-269 + + + + + + + + + + + + + + PS122/5_60-27 + + + + + + + + + + + + + + PS122/5_60-270 + + + + + + + + + + + + + + PS122/5_60-271 + + + + + + + + + + + + + + PS122/5_60-272 + + + + + + + + + + + + + + PS122/5_60-273 + + + + + + + + + + + + + + PS122/5_60-274 + + + + + + + + + + + + + + PS122/5_60-275 + + + + + + + + + + + + + + PS122/5_60-276 + + + + + + + + + + + + + + PS122/5_60-28 + + + + + + + + + + + + + + PS122/5_60-280 + + + + + + + + + + + + + + PS122/5_60-281 + + + + + + + + + + + + + + PS122/5_60-283 + + + + + + + + + + + + + + PS122/5_60-284 + + + + + + + + + + + + + + PS122/5_60-285 + + + + + + + + + + + + + + PS122/5_60-286 + + + + + + + + + + + + + + PS122/5_60-287 + + + + + + + + + + + + + + PS122/5_60-288 + + + + + + + + + + + + + + PS122/5_60-289 + + + + + + + + + + + + + + PS122/5_60-29 + + + + + + + + + + + + + + PS122/5_60-290 + + + + + + + + + + + + + + PS122/5_60-291 + + + + + + + + + + + + + + PS122/5_60-292 + + + + + + + + + + + + + + PS122/5_60-293 + + + + + + + + + + + + + + PS122/5_60-294 + + + + + + + + + + + + + + PS122/5_60-295 + + + + + + + + + + + + + + PS122/5_60-296 + + + + + + + + + + + + + + PS122/5_60-297 + + + + + + + + + + + + + + PS122/5_60-298 + + + + + + + + + + + + + + PS122/5_60-299 + + + + + + + + + + + + + + PS122/5_60-3 + + + + + + + + + + + + + + PS122/5_60-30 + + + + + + + + + + + + + + PS122/5_60-31 + + + + + + + + + + + + + + PS122/5_60-32 + + + + + + + + + + + + + + PS122/5_60-33 + + + + + + + + + + + + + + PS122/5_60-34 + + + + + + + + + + + + + + PS122/5_60-35 + + + + + + + + + + + + + + PS122/5_60-36 + + + + + + + + + + + + + + PS122/5_60-37 + + + + + + + + + + + + + + PS122/5_60-38 + + + + + + + + + + + + + + PS122/5_60-39 + + + + + + + + + + + + + + PS122/5_60-4 + + + + + + + + + + + + + + PS122/5_60-40 + + + + + + + + + + + + + + PS122/5_60-41 + + + + + + + + + + + + + + PS122/5_60-42 + + + + + + + + + + + + + + PS122/5_60-43 + + + + + + + + + + + + + + PS122/5_60-44 + + + + + + + + + + + + + + PS122/5_60-45 + + + + + + + + + + + + + + PS122/5_60-46 + + + + + + + + + + + + + + PS122/5_60-47 + + + + + + + + + + + + + + PS122/5_60-48 + + + + + + + + + + + + + + PS122/5_60-49 + + + + + + + + + + + + + + PS122/5_60-5 + + + + + + + + + + + + + + PS122/5_60-50 + + + + + + + + + + + + + + PS122/5_60-52 + + + + + + + + + + + + + + PS122/5_60-53 + + + + + + + + + + + + + + PS122/5_60-54 + + + + + + + + + + + + + + PS122/5_60-55 + + + + + + + + + + + + + + PS122/5_60-56 + + + + + + + + + + + + + + PS122/5_60-57 + + + + + + + + + + + + + + PS122/5_60-58 + + + + + + + + + + + + + + PS122/5_60-59 + + + + + + + + + + + + + + PS122/5_60-6 + + + + + + + + + + + + + + PS122/5_60-61 + + + + + + + + + + + + + + PS122/5_60-62 + + + + + + + + + + + + + + PS122/5_60-63 + + + + + + + + + + + + + + PS122/5_60-64 + + + + + + + + + + + + + + PS122/5_60-65 + + + + + + + + + + + + + + PS122/5_60-66 + + + + + + + + + + + + + + PS122/5_60-67 + + + + + + + + + + + + + + PS122/5_60-68 + + + + + + + + + + + + + + PS122/5_60-69 + + + + + + + + + + + + + + PS122/5_60-7 + + + + + + + + + + + + + + PS122/5_60-70 + + + + + + + + + + + + + + PS122/5_60-71 + + + + + + + + + + + + + + PS122/5_60-72 + + + + + + + + + + + + + + PS122/5_60-73 + + + + + + + + + + + + + + PS122/5_60-74 + + + + + + + + + + + + + + PS122/5_60-75 + + + + + + + + + + + + + + PS122/5_60-76 + + + + + + + + + + + + + + PS122/5_60-77 + + + + + + + + + + + + + + PS122/5_60-78 + + + + + + + + + + + + + + PS122/5_60-79 + + + + + + + + + + + + + + PS122/5_60-8 + + + + + + + + + + + + + + PS122/5_60-80 + + + + + + + + + + + + + + PS122/5_60-81 + + + + + + + + + + + + + + PS122/5_60-82 + + + + + + + + + + + + + + PS122/5_60-83 + + + + + + + + + + + + + + PS122/5_60-84 + + + + + + + + + + + + + + PS122/5_60-85 + + + + + + + + + + + + + + PS122/5_60-86 + + + + + + + + + + + + + + PS122/5_60-87 + + + + + + + + + + + + + + PS122/5_60-88 + + + + + + + + + + + + + + PS122/5_60-89 + + + + + + + + + + + + + + PS122/5_60-9 + + + + + + + + + + + + + + PS122/5_60-90 + + + + + + + + + + + + + + PS122/5_60-91 + + + + + + + + + + + + + + PS122/5_61-10 + + + + + + + + + + + + + + PS122/5_61-100 + + + + + + + + + + + + + + PS122/5_61-101 + + + + + + + + + + + + + + PS122/5_61-102 + + + + + + + + + + + + + + PS122/5_61-103 + + + + + + + + + + + + + + PS122/5_61-104 + + + + + + + + + + + + + + PS122/5_61-105 + + + + + + + + + + + + + + PS122/5_61-106 + + + + + + + + + + + + + + PS122/5_61-107 + + + + + + + + + + + + + + PS122/5_61-108 + + + + + + + + + + + + + + PS122/5_61-109 + + + + + + + + + + + + + + PS122/5_61-11 + + + + + + + + + + + + + + PS122/5_61-110 + + + + + + + + + + + + + + PS122/5_61-111 + + + + + + + + + + + + + + PS122/5_61-112 + + + + + + + + + + + + + + PS122/5_61-113 + + + + + + + + + + + + + + PS122/5_61-114 + + + + + + + + + + + + + + PS122/5_61-115 + + + + + + + + + + + + + + PS122/5_61-116 + + + + + + + + + + + + + + PS122/5_61-117 + + + + + + + + + + + + + + PS122/5_61-118 + + + + + + + + + + + + + + PS122/5_61-119 + + + + + + + + + + + + + + PS122/5_61-12 + + + + + + + + + + + + + + PS122/5_61-120 + + + + + + + + + + + + + + PS122/5_61-121 + + + + + + + + + + + + + + PS122/5_61-122 + + + + + + + + + + + + + + PS122/5_61-123 + + + + + + + + + + + + + + PS122/5_61-124 + + + + + + + + + + + + + + PS122/5_61-125 + + + + + + + + + + + + + + PS122/5_61-126 + + + + + + + + + + + + + + PS122/5_61-127 + + + + + + + + + + + + + + PS122/5_61-128 + + + + + + + + + + + + + + PS122/5_61-129 + + + + + + + + + + + + + + PS122/5_61-13 + + + + + + + + + + + + + + PS122/5_61-130 + + + + + + + + + + + + + + PS122/5_61-131 + + + + + + + + + + + + + + PS122/5_61-132 + + + + + + + + + + + + + + PS122/5_61-133 + + + + + + + + + + + + + + PS122/5_61-134 + + + + + + + + + + + + + + PS122/5_61-135 + + + + + + + + + + + + + + PS122/5_61-136 + + + + + + + + + + + + + + PS122/5_61-137 + + + + + + + + + + + + + + PS122/5_61-138 + + + + + + + + + + + + + + PS122/5_61-139 + + + + + + + + + + + + + + PS122/5_61-14 + + + + + + + + + + + + + + PS122/5_61-140 + + + + + + + + + + + + + + PS122/5_61-141 + + + + + + + + + + + + + + PS122/5_61-142 + + + + + + + + + + + + + + PS122/5_61-143 + + + + + + + + + + + + + + PS122/5_61-144 + + + + + + + + + + + + + + PS122/5_61-145 + + + + + + + + + + + + + + PS122/5_61-146 + + + + + + + + + + + + + + PS122/5_61-147 + + + + + + + + + + + + + + PS122/5_61-148 + + + + + + + + + + + + + + PS122/5_61-149 + + + + + + + + + + + + + + PS122/5_61-15 + + + + + + + + + + + + + + PS122/5_61-150 + + + + + + + + + + + + + + PS122/5_61-151 + + + + + + + + + + + + + + PS122/5_61-152 + + + + + + + + + + + + + + PS122/5_61-153 + + + + + + + + + + + + + + PS122/5_61-154 + + + + + + + + + + + + + + PS122/5_61-155 + + + + + + + + + + + + + + PS122/5_61-156 + + + + + + + + + + + + + + PS122/5_61-157 + + + + + + + + + + + + + + PS122/5_61-158 + + + + + + + + + + + + + + PS122/5_61-159 + + + + + + + + + + + + + + PS122/5_61-16 + + + + + + + + + + + + + + PS122/5_61-160 + + + + + + + + + + + + + + PS122/5_61-161 + + + + + + + + + + + + + + PS122/5_61-162 + + + + + + + + + + + + + + PS122/5_61-163 + + + + + + + + + + + + + + PS122/5_61-164 + + + + + + + + + + + + + + PS122/5_61-165 + + + + + + + + + + + + + + PS122/5_61-166 + + + + + + + + + + + + + + PS122/5_61-167 + + + + + + + + + + + + + + PS122/5_61-168 + + + + + + + + + + + + + + PS122/5_61-169 + + + + + + + + + + + + + + PS122/5_61-17 + + + + + + + + + + + + + + PS122/5_61-170 + + + + + + + + + + + + + + PS122/5_61-171 + + + + + + + + + + + + + + PS122/5_61-172 + + + + + + + + + + + + + + PS122/5_61-173 + + + + + + + + + + + + + + PS122/5_61-174 + + + + + + + + + + + + + + PS122/5_61-175 + + + + + + + + + + + + + + PS122/5_61-176 + + + + + + + + + + + + + + PS122/5_61-177 + + + + + + + + + + + + + + PS122/5_61-178 + + + + + + + + + + + + + + PS122/5_61-179 + + + + + + + + + + + + + + PS122/5_61-18 + + + + + + + + + + + + + + PS122/5_61-180 + + + + + + + + + + + + + + PS122/5_61-181 + + + + + + + + + + + + + + PS122/5_61-182 + + + + + + + + + + + + + + PS122/5_61-183 + + + + + + + + + + + + + + PS122/5_61-184 + + + + + + + + + + + + + + PS122/5_61-185 + + + + + + + + + + + + + + PS122/5_61-186 + + + + + + + + + + + + + + PS122/5_61-187 + + + + + + + + + + + + + + PS122/5_61-188 + + + + + + + + + + + + + + PS122/5_61-189 + + + + + + + + + + + + + + PS122/5_61-19 + + + + + + + + + + + + + + PS122/5_61-190 + + + + + + + + + + + + + + PS122/5_61-191 + + + + + + + + + + + + + + PS122/5_61-192 + + + + + + + + + + + + + + PS122/5_61-193 + + + + + + + + + + + + + + PS122/5_61-194 + + + + + + + + + + + + + + PS122/5_61-195 + + + + + + + + + + + + + + PS122/5_61-196 + + + + + + + + + + + + + + PS122/5_61-197 + + + + + + + + + + + + + + PS122/5_61-198 + + + + + + + + + + + + + + PS122/5_61-199 + + + + + + + + + + + + + + PS122/5_61-2 + + + + + + + + + + + + + + PS122/5_61-20 + + + + + + + + + + + + + + PS122/5_61-200 + + + + + + + + + + + + + + PS122/5_61-201 + + + + + + + + + + + + + + PS122/5_61-202 + + + + + + + + + + + + + + PS122/5_61-203 + + + + + + + + + + + + + + PS122/5_61-204 + + + + + + + + + + + + + + PS122/5_61-205 + + + + + + + + + + + + + + PS122/5_61-206 + + + + + + + + + + + + + + PS122/5_61-207 + + + + + + + + + + + + + + PS122/5_61-208 + + + + + + + + + + + + + + PS122/5_61-209 + + + + + + + + + + + + + + PS122/5_61-21 + + + + + + + + + + + + + + PS122/5_61-210 + + + + + + + + + + + + + + PS122/5_61-211 + + + + + + + + + + + + + + PS122/5_61-212 + + + + + + + + + + + + + + PS122/5_61-213 + + + + + + + + + + + + + + PS122/5_61-214 + + + + + + + + + + + + + + PS122/5_61-215 + + + + + + + + + + + + + + PS122/5_61-216 + + + + + + + + + + + + + + PS122/5_61-217 + + + + + + + + + + + + + + PS122/5_61-218 + + + + + + + + + + + + + + PS122/5_61-219 + + + + + + + + + + + + + + PS122/5_61-22 + + + + + + + + + + + + + + PS122/5_61-220 + + + + + + + + + + + + + + PS122/5_61-221 + + + + + + + + + + + + + + PS122/5_61-222 + + + + + + + + + + + + + + PS122/5_61-223 + + + + + + + + + + + + + + PS122/5_61-224 + + + + + + + + + + + + + + PS122/5_61-225 + + + + + + + + + + + + + + PS122/5_61-226 + + + + + + + + + + + + + + PS122/5_61-227 + + + + + + + + + + + + + + PS122/5_61-228 + + + + + + + + + + + + + + PS122/5_61-229 + + + + + + + + + + + + + + PS122/5_61-23 + + + + + + + + + + + + + + PS122/5_61-230 + + + + + + + + + + + + + + PS122/5_61-231 + + + + + + + + + + + + + + PS122/5_61-232 + + + + + + + + + + + + + + PS122/5_61-233 + + + + + + + + + + + + + + PS122/5_61-234 + + + + + + + + + + + + + + PS122/5_61-235 + + + + + + + + + + + + + + PS122/5_61-236 + + + + + + + + + + + + + + PS122/5_61-237 + + + + + + + + + + + + + + PS122/5_61-238 + + + + + + + + + + + + + + PS122/5_61-239 + + + + + + + + + + + + + + PS122/5_61-24 + + + + + + + + + + + + + + PS122/5_61-240 + + + + + + + + + + + + + + PS122/5_61-241 + + + + + + + + + + + + + + PS122/5_61-242 + + + + + + + + + + + + + + PS122/5_61-243 + + + + + + + + + + + + + + PS122/5_61-244 + + + + + + + + + + + + + + PS122/5_61-245 + + + + + + + + + + + + + + PS122/5_61-246 + + + + + + + + + + + + + + PS122/5_61-247 + + + + + + + + + + + + + + PS122/5_61-248 + + + + + + + + + + + + + + PS122/5_61-249 + + + + + + + + + + + + + + PS122/5_61-25 + + + + + + + + + + + + + + PS122/5_61-250 + + + + + + + + + + + + + + PS122/5_61-251 + + + + + + + + + + + + + + PS122/5_61-252 + + + + + + + + + + + + + + PS122/5_61-253 + + + + + + + + + + + + + + PS122/5_61-254 + + + + + + + + + + + + + + PS122/5_61-255 + + + + + + + + + + + + + + PS122/5_61-256 + + + + + + + + + + + + + + PS122/5_61-257 + + + + + + + + + + + + + + PS122/5_61-258 + + + + + + + + + + + + + + PS122/5_61-259 + + + + + + + + + + + + + + PS122/5_61-26 + + + + + + + + + + + + + + PS122/5_61-260 + + + + + + + + + + + + + + PS122/5_61-261 + + + + + + + + + + + + + + PS122/5_61-262 + + + + + + + + + + + + + + PS122/5_61-263 + + + + + + + + + + + + + + PS122/5_61-264 + + + + + + + + + + + + + + PS122/5_61-265 + + + + + + + + + + + + + + PS122/5_61-266 + + + + + + + + + + + + + + PS122/5_61-267 + + + + + + + + + + + + + + PS122/5_61-268 + + + + + + + + + + + + + + PS122/5_61-269 + + + + + + + + + + + + + + PS122/5_61-27 + + + + + + + + + + + + + + PS122/5_61-271 + + + + + + + + + + + + + + PS122/5_61-272 + + + + + + + + + + + + + + PS122/5_61-273 + + + + + + + + + + + + + + PS122/5_61-274 + + + + + + + + + + + + + + PS122/5_61-276 + + + + + + + + + + + + + + PS122/5_61-277 + + + + + + + + + + + + + + PS122/5_61-278 + + + + + + + + + + + + + + PS122/5_61-279 + + + + + + + + + + + + + + PS122/5_61-28 + + + + + + + + + + + + + + PS122/5_61-280 + + + + + + + + + + + + + + PS122/5_61-281 + + + + + + + + + + + + + + PS122/5_61-282 + + + + + + + + + + + + + + PS122/5_61-283 + + + + + + + + + + + + + + PS122/5_61-284 + + + + + + + + + + + + + + PS122/5_61-285 + + + + + + + + + + + + + + PS122/5_61-286 + + + + + + + + + + + + + + PS122/5_61-287 + + + + + + + + + + + + + + PS122/5_61-288 + + + + + + + + + + + + + + PS122/5_61-289 + + + + + + + + + + + + + + PS122/5_61-29 + + + + + + + + + + + + + + PS122/5_61-290 + + + + + + + + + + + + + + PS122/5_61-291 + + + + + + + + + + + + + + PS122/5_61-292 + + + + + + + + + + + + + + PS122/5_61-293 + + + + + + + + + + + + + + PS122/5_61-294 + + + + + + + + + + + + + + PS122/5_61-295 + + + + + + + + + + + + + + PS122/5_61-296 + + + + + + + + + + + + + + PS122/5_61-3 + + + + + + + + + + + + + + PS122/5_61-30 + + + + + + + + + + + + + + PS122/5_61-300 + + + + + + + + + + + + + + PS122/5_61-301 + + + + + + + + + + + + + + PS122/5_61-302 + + + + + + + + + + + + + + PS122/5_61-303 + + + + + + + + + + + + + + PS122/5_61-304 + + + + + + + + + + + + + + PS122/5_61-305 + + + + + + + + + + + + + + PS122/5_61-306 + + + + + + + + + + + + + + PS122/5_61-307 + + + + + + + + + + + + + + PS122/5_61-308 + + + + + + + + + + + + + + PS122/5_61-309 + + + + + + + + + + + + + + PS122/5_61-31 + + + + + + + + + + + + + + PS122/5_61-310 + + + + + + + + + + + + + + PS122/5_61-311 + + + + + + + + + + + + + + PS122/5_61-312 + + + + + + + + + + + + + + PS122/5_61-313 + + + + + + + + + + + + + + PS122/5_61-314 + + + + + + + + + + + + + + PS122/5_61-315 + + + + + + + + + + + + + + PS122/5_61-316 + + + + + + + + + + + + + + PS122/5_61-318 + + + + + + + + + + + + + + PS122/5_61-319 + + + + + + + + + + + + + + PS122/5_61-32 + + + + + + + + + + + + + + PS122/5_61-320 + + + + + + + + + + + + + + PS122/5_61-323 + + + + + + + + + + + + + + PS122/5_61-324 + + + + + + + + + + + + + + PS122/5_61-325 + + + + + + + + + + + + + + PS122/5_61-326 + + + + + + + + + + + + + + PS122/5_61-327 + + + + + + + + + + + + + + PS122/5_61-328 + + + + + + + + + + + + + + PS122/5_61-329 + + + + + + + + + + + + + + PS122/5_61-33 + + + + + + + + + + + + + + PS122/5_61-330 + + + + + + + + + + + + + + PS122/5_61-34 + + + + + + + + + + + + + + PS122/5_61-35 + + + + + + + + + + + + + + PS122/5_61-39 + + + + + + + + + + + + + + PS122/5_61-4 + + + + + + + + + + + + + + PS122/5_61-40 + + + + + + + + + + + + + + PS122/5_61-41 + + + + + + + + + + + + + + PS122/5_61-42 + + + + + + + + + + + + + + PS122/5_61-43 + + + + + + + + + + + + + + PS122/5_61-44 + + + + + + + + + + + + + + PS122/5_61-45 + + + + + + + + + + + + + + PS122/5_61-46 + + + + + + + + + + + + + + PS122/5_61-47 + + + + + + + + + + + + + + PS122/5_61-48 + + + + + + + + + + + + + + PS122/5_61-49 + + + + + + + + + + + + + + PS122/5_61-5 + + + + + + + + + + + + + + PS122/5_61-50 + + + + + + + + + + + + + + PS122/5_61-51 + + + + + + + + + + + + + + PS122/5_61-52 + + + + + + + + + + + + + + PS122/5_61-53 + + + + + + + + + + + + + + PS122/5_61-54 + + + + + + + + + + + + + + PS122/5_61-55 + + + + + + + + + + + + + + PS122/5_61-56 + + + + + + + + + + + + + + PS122/5_61-57 + + + + + + + + + + + + + + PS122/5_61-58 + + + + + + + + + + + + + + PS122/5_61-59 + + + + + + + + + + + + + + PS122/5_61-6 + + + + + + + + + + + + + + PS122/5_61-60 + + + + + + + + + + + + + + PS122/5_61-61 + + + + + + + + + + + + + + PS122/5_61-62 + + + + + + + + + + + + + + PS122/5_61-63 + + + + + + + + + + + + + + PS122/5_61-64 + + + + + + + + + + + + + + PS122/5_61-65 + + + + + + + + + + + + + + PS122/5_61-66 + + + + + + + + + + + + + + PS122/5_61-67 + + + + + + + + + + + + + + PS122/5_61-68 + + + + + + + + + + + + + + PS122/5_61-69 + + + + + + + + + + + + + + PS122/5_61-7 + + + + + + + + + + + + + + PS122/5_61-70 + + + + + + + + + + + + + + PS122/5_61-71 + + + + + + + + + + + + + + PS122/5_61-72 + + + + + + + + + + + + + + PS122/5_61-73 + + + + + + + + + + + + + + PS122/5_61-74 + + + + + + + + + + + + + + PS122/5_61-75 + + + + + + + + + + + + + + PS122/5_61-76 + + + + + + + + + + + + + + PS122/5_61-77 + + + + + + + + + + + + + + PS122/5_61-78 + + + + + + + + + + + + + + PS122/5_61-79 + + + + + + + + + + + + + + PS122/5_61-8 + + + + + + + + + + + + + + PS122/5_61-80 + + + + + + + + + + + + + + PS122/5_61-81 + + + + + + + + + + + + + + PS122/5_61-82 + + + + + + + + + + + + + + PS122/5_61-83 + + + + + + + + + + + + + + PS122/5_61-84 + + + + + + + + + + + + + + PS122/5_61-85 + + + + + + + + + + + + + + PS122/5_61-86 + + + + + + + + + + + + + + PS122/5_61-87 + + + + + + + + + + + + + + PS122/5_61-88 + + + + + + + + + + + + + + PS122/5_61-89 + + + + + + + + + + + + + + PS122/5_61-9 + + + + + + + + + + + + + + PS122/5_61-90 + + + + + + + + + + + + + + PS122/5_61-91 + + + + + + + + + + + + + + PS122/5_61-92 + + + + + + + + + + + + + + PS122/5_61-93 + + + + + + + + + + + + + + PS122/5_61-94 + + + + + + + + + + + + + + PS122/5_61-95 + + + + + + + + + + + + + + PS122/5_61-96 + + + + + + + + + + + + + + PS122/5_61-97 + + + + + + + + + + + + + + PS122/5_61-98 + + + + + + + + + + + + + + PS122/5_61-99 + + + + + + + + + + + + + + PS122/5_62-10 + + + + + + + + + + + + + + PS122/5_62-100 + + + + + + + + + + + + + + PS122/5_62-101 + + + + + + + + + + + + + + PS122/5_62-102 + + + + + + + + + + + + + + PS122/5_62-103 + + + + + + + + + + + + + + PS122/5_62-104 + + + + + + + + + + + + + + PS122/5_62-105 + + + + + + + + + + + + + + PS122/5_62-106 + + + + + + + + + + + + + + PS122/5_62-107 + + + + + + + + + + + + + + PS122/5_62-108 + + + + + + + + + + + + + + PS122/5_62-109 + + + + + + + + + + + + + + PS122/5_62-11 + + + + + + + + + + + + + + PS122/5_62-110 + + + + + + + + + + + + + + PS122/5_62-111 + + + + + + + + + + + + + + PS122/5_62-112 + + + + + + + + + + + + + + PS122/5_62-113 + + + + + + + + + + + + + + PS122/5_62-114 + + + + + + + + + + + + + + PS122/5_62-115 + + + + + + + + + + + + + + PS122/5_62-116 + + + + + + + + + + + + + + PS122/5_62-117 + + + + + + + + + + + + + + PS122/5_62-118 + + + + + + + + + + + + + + PS122/5_62-119 + + + + + + + + + + + + + + PS122/5_62-12 + + + + + + + + + + + + + + PS122/5_62-120 + + + + + + + + + + + + + + PS122/5_62-121 + + + + + + + + + + + + + + PS122/5_62-122 + + + + + + + + + + + + + + PS122/5_62-123 + + + + + + + + + + + + + + PS122/5_62-124 + + + + + + + + + + + + + + PS122/5_62-125 + + + + + + + + + + + + + + PS122/5_62-126 + + + + + + + + + + + + + + PS122/5_62-127 + + + + + + + + + + + + + + PS122/5_62-128 + + + + + + + + + + + + + + PS122/5_62-129 + + + + + + + + + + + + + + PS122/5_62-13 + + + + + + + + + + + + + + PS122/5_62-130 + + + + + + + + + + + + + + PS122/5_62-131 + + + + + + + + + + + + + + PS122/5_62-132 + + + + + + + + + + + + + + PS122/5_62-133 + + + + + + + + + + + + + + PS122/5_62-134 + + + + + + + + + + + + + + PS122/5_62-135 + + + + + + + + + + + + + + PS122/5_62-136 + + + + + + + + + + + + + + PS122/5_62-137 + + + + + + + + + + + + + + PS122/5_62-138 + + + + + + + + + + + + + + PS122/5_62-139 + + + + + + + + + + + + + + PS122/5_62-14 + + + + + + + + + + + + + + PS122/5_62-140 + + + + + + + + + + + + + + PS122/5_62-141 + + + + + + + + + + + + + + PS122/5_62-142 + + + + + + + + + + + + + + PS122/5_62-143 + + + + + + + + + + + + + + PS122/5_62-144 + + + + + + + + + + + + + + PS122/5_62-145 + + + + + + + + + + + + + + PS122/5_62-146 + + + + + + + + + + + + + + PS122/5_62-147 + + + + + + + + + + + + + + PS122/5_62-148 + + + + + + + + + + + + + + PS122/5_62-149 + + + + + + + + + + + + + + PS122/5_62-15 + + + + + + + + + + + + + + PS122/5_62-150 + + + + + + + + + + + + + + PS122/5_62-151 + + + + + + + + + + + + + + PS122/5_62-152 + + + + + + + + + + + + + + PS122/5_62-153 + + + + + + + + + + + + + + PS122/5_62-154 + + + + + + + + + + + + + + PS122/5_62-158 + + + + + + + + + + + + + + PS122/5_62-159 + + + + + + + + + + + + + + PS122/5_62-16 + + + + + + + + + + + + + + PS122/5_62-160 + + + + + + + + + + + + + + PS122/5_62-161 + + + + + + + + + + + + + + PS122/5_62-163 + + + + + + + + + + + + + + PS122/5_62-164 + + + + + + + + + + + + + + PS122/5_62-165 + + + + + + + + + + + + + + PS122/5_62-166 + + + + + + + + + + + + + + PS122/5_62-167 + + + + + + + + + + + + + + PS122/5_62-168 + + + + + + + + + + + + + + PS122/5_62-169 + + + + + + + + + + + + + + PS122/5_62-17 + + + + + + + + + + + + + + PS122/5_62-170 + + + + + + + + + + + + + + PS122/5_62-171 + + + + + + + + + + + + + + PS122/5_62-172 + + + + + + + + + + + + + + PS122/5_62-174 + + + + + + + + + + + + + + PS122/5_62-176 + + + + + + + + + + + + + + PS122/5_62-178 + + + + + + + + + + + + + + PS122/5_62-18 + + + + + + + + + + + + + + PS122/5_62-180 + + + + + + + + + + + + + + PS122/5_62-182 + + + + + + + + + + + + + + PS122/5_62-184 + + + + + + + + + + + + + + PS122/5_62-185 + + + + + + + + + + + + + + PS122/5_62-188 + + + + + + + + + + + + + + PS122/5_62-189 + + + + + + + + + + + + + + PS122/5_62-19 + + + + + + + + + + + + + + PS122/5_62-190 + + + + + + + + + + + + + + PS122/5_62-191 + + + + + + + + + + + + + + PS122/5_62-192 + + + + + + + + + + + + + + PS122/5_62-193 + + + + + + + + + + + + + + PS122/5_62-194 + + + + + + + + + + + + + + PS122/5_62-195 + + + + + + + + + + + + + + PS122/5_62-196 + + + + + + + + + + + + + + PS122/5_62-197 + + + + + + + + + + + + + + PS122/5_62-198 + + + + + + + + + + + + + + PS122/5_62-199 + + + + + + + + + + + + + + PS122/5_62-20 + + + + + + + + + + + + + + PS122/5_62-202 + + + + + + + + + + + + + + PS122/5_62-203 + + + + + + + + + + + + + + PS122/5_62-204 + + + + + + + + + + + + + + PS122/5_62-205 + + + + + + + + + + + + + + PS122/5_62-206 + + + + + + + + + + + + + + PS122/5_62-207 + + + + + + + + + + + + + + PS122/5_62-208 + + + + + + + + + + + + + + PS122/5_62-209 + + + + + + + + + + + + + + PS122/5_62-21 + + + + + + + + + + + + + + PS122/5_62-210 + + + + + + + + + + + + + + PS122/5_62-211 + + + + + + + + + + + + + + PS122/5_62-212 + + + + + + + + + + + + + + PS122/5_62-213 + + + + + + + + + + + + + + PS122/5_62-214 + + + + + + + + + + + + + + PS122/5_62-215 + + + + + + + + + + + + + + PS122/5_62-216 + + + + + + + + + + + + + + PS122/5_62-217 + + + + + + + + + + + + + + PS122/5_62-218 + + + + + + + + + + + + + + PS122/5_62-219 + + + + + + + + + + + + + + PS122/5_62-22 + + + + + + + + + + + + + + PS122/5_62-220 + + + + + + + + + + + + + + PS122/5_62-221 + + + + + + + + + + + + + + PS122/5_62-222 + + + + + + + + + + + + + + PS122/5_62-223 + + + + + + + + + + + + + + PS122/5_62-224 + + + + + + + + + + + + + + PS122/5_62-225 + + + + + + + + + + + + + + PS122/5_62-226 + + + + + + + + + + + + + + PS122/5_62-227 + + + + + + + + + + + + + + PS122/5_62-228 + + + + + + + + + + + + + + PS122/5_62-229 + + + + + + + + + + + + + + PS122/5_62-23 + + + + + + + + + + + + + + PS122/5_62-230 + + + + + + + + + + + + + + PS122/5_62-231 + + + + + + + + + + + + + + PS122/5_62-232 + + + + + + + + + + + + + + PS122/5_62-233 + + + + + + + + + + + + + + PS122/5_62-234 + + + + + + + + + + + + + + PS122/5_62-235 + + + + + + + + + + + + + + PS122/5_62-236 + + + + + + + + + + + + + + PS122/5_62-237 + + + + + + + + + + + + + + PS122/5_62-238 + + + + + + + + + + + + + + PS122/5_62-239 + + + + + + + + + + + + + + PS122/5_62-24 + + + + + + + + + + + + + + PS122/5_62-240 + + + + + + + + + + + + + + PS122/5_62-241 + + + + + + + + + + + + + + PS122/5_62-242 + + + + + + + + + + + + + + PS122/5_62-243 + + + + + + + + + + + + + + PS122/5_62-244 + + + + + + + + + + + + + + PS122/5_62-245 + + + + + + + + + + + + + + PS122/5_62-246 + + + + + + + + + + + + + + PS122/5_62-247 + + + + + + + + + + + + + + PS122/5_62-248 + + + + + + + + + + + + + + PS122/5_62-249 + + + + + + + + + + + + + + PS122/5_62-25 + + + + + + + + + + + + + + PS122/5_62-250 + + + + + + + + + + + + + + PS122/5_62-251 + + + + + + + + + + + + + + PS122/5_62-252 + + + + + + + + + + + + + + PS122/5_62-253 + + + + + + + + + + + + + + PS122/5_62-254 + + + + + + + + + + + + + + PS122/5_62-255 + + + + + + + + + + + + + + PS122/5_62-256 + + + + + + + + + + + + + + PS122/5_62-257 + + + + + + + + + + + + + + PS122/5_62-258 + + + + + + + + + + + + + + PS122/5_62-259 + + + + + + + + + + + + + + PS122/5_62-26 + + + + + + + + + + + + + + PS122/5_62-260 + + + + + + + + + + + + + + PS122/5_62-261 + + + + + + + + + + + + + + PS122/5_62-262 + + + + + + + + + + + + + + PS122/5_62-263 + + + + + + + + + + + + + + PS122/5_62-264 + + + + + + + + + + + + + + PS122/5_62-265 + + + + + + + + + + + + + + PS122/5_62-267 + + + + + + + + + + + + + + PS122/5_62-268 + + + + + + + + + + + + + + PS122/5_62-269 + + + + + + + + + + + + + + PS122/5_62-27 + + + + + + + + + + + + + + PS122/5_62-270 + + + + + + + + + + + + + + PS122/5_62-271 + + + + + + + + + + + + + + PS122/5_62-272 + + + + + + + + + + + + + + PS122/5_62-273 + + + + + + + + + + + + + + PS122/5_62-274 + + + + + + + + + + + + + + PS122/5_62-275 + + + + + + + + + + + + + + PS122/5_62-276 + + + + + + + + + + + + + + PS122/5_62-277 + + + + + + + + + + + + + + PS122/5_62-278 + + + + + + + + + + + + + + PS122/5_62-279 + + + + + + + + + + + + + + PS122/5_62-28 + + + + + + + + + + + + + + PS122/5_62-280 + + + + + + + + + + + + + + PS122/5_62-281 + + + + + + + + + + + + + + PS122/5_62-282 + + + + + + + + + + + + + + PS122/5_62-283 + + + + + + + + + + + + + + PS122/5_62-284 + + + + + + + + + + + + + + PS122/5_62-285 + + + + + + + + + + + + + + PS122/5_62-286 + + + + + + + + + + + + + + PS122/5_62-287 + + + + + + + + + + + + + + PS122/5_62-29 + + + + + + + + + + + + + + PS122/5_62-30 + + + + + + + + + + + + + + PS122/5_62-31 + + + + + + + + + + + + + + PS122/5_62-32 + + + + + + + + + + + + + + PS122/5_62-33 + + + + + + + + + + + + + + PS122/5_62-34 + + + + + + + + + + + + + + PS122/5_62-35 + + + + + + + + + + + + + + PS122/5_62-36 + + + + + + + + + + + + + + PS122/5_62-37 + + + + + + + + + + + + + + PS122/5_62-38 + + + + + + + + + + + + + + PS122/5_62-39 + + + + + + + + + + + + + + PS122/5_62-4 + + + + + + + + + + + + + + PS122/5_62-40 + + + + + + + + + + + + + + PS122/5_62-41 + + + + + + + + + + + + + + PS122/5_62-42 + + + + + + + + + + + + + + PS122/5_62-43 + + + + + + + + + + + + + + PS122/5_62-44 + + + + + + + + + + + + + + PS122/5_62-45 + + + + + + + + + + + + + + PS122/5_62-46 + + + + + + + + + + + + + + PS122/5_62-47 + + + + + + + + + + + + + + PS122/5_62-48 + + + + + + + + + + + + + + PS122/5_62-49 + + + + + + + + + + + + + + PS122/5_62-5 + + + + + + + + + + + + + + PS122/5_62-50 + + + + + + + + + + + + + + PS122/5_62-51 + + + + + + + + + + + + + + PS122/5_62-52 + + + + + + + + + + + + + + PS122/5_62-53 + + + + + + + + + + + + + + PS122/5_62-54 + + + + + + + + + + + + + + PS122/5_62-55 + + + + + + + + + + + + + + PS122/5_62-56 + + + + + + + + + + + + + + PS122/5_62-57 + + + + + + + + + + + + + + PS122/5_62-58 + + + + + + + + + + + + + + PS122/5_62-59 + + + + + + + + + + + + + + PS122/5_62-6 + + + + + + + + + + + + + + PS122/5_62-60 + + + + + + + + + + + + + + PS122/5_62-61 + + + + + + + + + + + + + + PS122/5_62-62 + + + + + + + + + + + + + + PS122/5_62-63 + + + + + + + + + + + + + + PS122/5_62-64 + + + + + + + + + + + + + + PS122/5_62-65 + + + + + + + + + + + + + + PS122/5_62-66 + + + + + + + + + + + + + + PS122/5_62-67 + + + + + + + + + + + + + + PS122/5_62-68 + + + + + + + + + + + + + + PS122/5_62-69 + + + + + + + + + + + + + + PS122/5_62-7 + + + + + + + + + + + + + + PS122/5_62-70 + + + + + + + + + + + + + + PS122/5_62-71 + + + + + + + + + + + + + + PS122/5_62-72 + + + + + + + + + + + + + + PS122/5_62-73 + + + + + + + + + + + + + + PS122/5_62-74 + + + + + + + + + + + + + + PS122/5_62-75 + + + + + + + + + + + + + + PS122/5_62-76 + + + + + + + + + + + + + + PS122/5_62-77 + + + + + + + + + + + + + + PS122/5_62-78 + + + + + + + + + + + + + + PS122/5_62-79 + + + + + + + + + + + + + + PS122/5_62-8 + + + + + + + + + + + + + + PS122/5_62-80 + + + + + + + + + + + + + + PS122/5_62-81 + + + + + + + + + + + + + + PS122/5_62-82 + + + + + + + + + + + + + + PS122/5_62-83 + + + + + + + + + + + + + + PS122/5_62-84 + + + + + + + + + + + + + + PS122/5_62-85 + + + + + + + + + + + + + + PS122/5_62-86 + + + + + + + + + + + + + + PS122/5_62-87 + + + + + + + + + + + + + + PS122/5_62-88 + + + + + + + + + + + + + + PS122/5_62-89 + + + + + + + + + + + + + + PS122/5_62-9 + + + + + + + + + + + + + + PS122/5_62-90 + + + + + + + + + + + + + + PS122/5_62-91 + + + + + + + + + + + + + + PS122/5_62-92 + + + + + + + + + + + + + + PS122/5_62-93 + + + + + + + + + + + + + + PS122/5_62-94 + + + + + + + + + + + + + + PS122/5_62-95 + + + + + + + + + + + + + + PS122/5_62-96 + + + + + + + + + + + + + + PS122/5_62-97 + + + + + + + + + + + + + + PS122/5_62-98 + + + + + + + + + + + + + + PS122/5_62-99 + + + + + + + + + + + + + + PS122/5_63-100 + + + + + + + + + + + + + + PS122/5_63-101 + + + + + + + + + + + + + + PS122/5_63-102 + + + + + + + + + + + + + + PS122/5_63-103 + + + + + + + + + + + + + + PS122/5_63-104 + + + + + + + + + + + + + + PS122/5_63-105 + + + + + + + + + + + + + + PS122/5_63-106 + + + + + + + + + + + + + + PS122/5_63-107 + + + + + + + + + + + + + + PS122/5_63-108 + + + + + + + + + + + + + + PS122/5_63-109 + + + + + + + + + + + + + + PS122/5_63-110 + + + + + + + + + + + + + + PS122/5_63-111 + + + + + + + + + + + + + + PS122/5_63-112 + + + + + + + + + + + + + + PS122/5_63-113 + + + + + + + + + + + + + + PS122/5_63-114 + + + + + + + + + + + + + + PS122/5_63-115 + + + + + + + + + + + + + + PS122/5_63-117 + + + + + + + + + + + + + + PS122/5_63-118 + + + + + + + + + + + + + + PS122/5_63-119 + + + + + + + + + + + + + + PS122/5_63-12 + + + + + + + + + + + + + + PS122/5_63-120 + + + + + + + + + + + + + + PS122/5_63-121 + + + + + + + + + + + + + + PS122/5_63-122 + + + + + + + + + + + + + + PS122/5_63-123 + + + + + + + + + + + + + + PS122/5_63-124 + + + + + + + + + + + + + + PS122/5_63-125 + + + + + + + + + + + + + + PS122/5_63-126 + + + + + + + + + + + + + + PS122/5_63-127 + + + + + + + + + + + + + + PS122/5_63-128 + + + + + + + + + + + + + + PS122/5_63-129 + + + + + + + + + + + + + + PS122/5_63-13 + + + + + + + + + + + + + + PS122/5_63-130 + + + + + + + + + + + + + + PS122/5_63-131 + + + + + + + + + + + + + + PS122/5_63-132 + + + + + + + + + + + + + + PS122/5_63-133 + + + + + + + + + + + + + + PS122/5_63-134 + + + + + + + + + + + + + + PS122/5_63-135 + + + + + + + + + + + + + + PS122/5_63-136 + + + + + + + + + + + + + + PS122/5_63-137 + + + + + + + + + + + + + + PS122/5_63-138 + + + + + + + + + + + + + + PS122/5_63-139 + + + + + + + + + + + + + + PS122/5_63-14 + + + + + + + + + + + + + + PS122/5_63-140 + + + + + + + + + + + + + + PS122/5_63-141 + + + + + + + + + + + + + + PS122/5_63-142 + + + + + + + + + + + + + + PS122/5_63-143 + + + + + + + + + + + + + + PS122/5_63-144 + + + + + + + + + + + + + + PS122/5_63-145 + + + + + + + + + + + + + + PS122/5_63-146 + + + + + + + + + + + + + + PS122/5_63-147 + + + + + + + + + + + + + + PS122/5_63-148 + + + + + + + + + + + + + + PS122/5_63-149 + + + + + + + + + + + + + + PS122/5_63-15 + + + + + + + + + + + + + + PS122/5_63-150 + + + + + + + + + + + + + + PS122/5_63-151 + + + + + + + + + + + + + + PS122/5_63-152 + + + + + + + + + + + + + + PS122/5_63-153 + + + + + + + + + + + + + + PS122/5_63-154 + + + + + + + + + + + + + + PS122/5_63-155 + + + + + + + + + + + + + + PS122/5_63-156 + + + + + + + + + + + + + + PS122/5_63-157 + + + + + + + + + + + + + + PS122/5_63-158 + + + + + + + + + + + + + + PS122/5_63-159 + + + + + + + + + + + + + + PS122/5_63-16 + + + + + + + + + + + + + + PS122/5_63-160 + + + + + + + + + + + + + + PS122/5_63-161 + + + + + + + + + + + + + + PS122/5_63-162 + + + + + + + + + + + + + + PS122/5_63-163 + + + + + + + + + + + + + + PS122/5_63-164 + + + + + + + + + + + + + + PS122/5_63-165 + + + + + + + + + + + + + + PS122/5_63-166 + + + + + + + + + + + + + + PS122/5_63-167 + + + + + + + + + + + + + + PS122/5_63-168 + + + + + + + + + + + + + + PS122/5_63-169 + + + + + + + + + + + + + + PS122/5_63-17 + + + + + + + + + + + + + + PS122/5_63-170 + + + + + + + + + + + + + + PS122/5_63-171 + + + + + + + + + + + + + + PS122/5_63-172 + + + + + + + + + + + + + + PS122/5_63-173 + + + + + + + + + + + + + + PS122/5_63-174 + + + + + + + + + + + + + + PS122/5_63-175 + + + + + + + + + + + + + + PS122/5_63-176 + + + + + + + + + + + + + + PS122/5_63-177 + + + + + + + + + + + + + + PS122/5_63-178 + + + + + + + + + + + + + + PS122/5_63-179 + + + + + + + + + + + + + + PS122/5_63-18 + + + + + + + + + + + + + + PS122/5_63-180 + + + + + + + + + + + + + + PS122/5_63-181 + + + + + + + + + + + + + + PS122/5_63-182 + + + + + + + + + + + + + + PS122/5_63-183 + + + + + + + + + + + + + + PS122/5_63-184 + + + + + + + + + + + + + + PS122/5_63-185 + + + + + + + + + + + + + + PS122/5_63-186 + + + + + + + + + + + + + + PS122/5_63-187 + + + + + + + + + + + + + + PS122/5_63-188 + + + + + + + + + + + + + + PS122/5_63-189 + + + + + + + + + + + + + + PS122/5_63-19 + + + + + + + + + + + + + + PS122/5_63-190 + + + + + + + + + + + + + + PS122/5_63-191 + + + + + + + + + + + + + + PS122/5_63-192 + + + + + + + + + + + + + + PS122/5_63-193 + + + + + + + + + + + + + + PS122/5_63-194 + + + + + + + + + + + + + + PS122/5_63-195 + + + + + + + + + + + + + + PS122/5_63-196 + + + + + + + + + + + + + + PS122/5_63-197 + + + + + + + + + + + + + + PS122/5_63-198 + + + + + + + + + + + + + + PS122/5_63-199 + + + + + + + + + + + + + + PS122/5_63-2 + + + + + + + + + + + + + + PS122/5_63-20 + + + + + + + + + + + + + + PS122/5_63-200 + + + + + + + + + + + + + + PS122/5_63-201 + + + + + + + + + + + + + + PS122/5_63-202 + + + + + + + + + + + + + + PS122/5_63-203 + + + + + + + + + + + + + + PS122/5_63-204 + + + + + + + + + + + + + + PS122/5_63-205 + + + + + + + + + + + + + + PS122/5_63-206 + + + + + + + + + + + + + + PS122/5_63-207 + + + + + + + + + + + + + + PS122/5_63-208 + + + + + + + + + + + + + + PS122/5_63-209 + + + + + + + + + + + + + + PS122/5_63-21 + + + + + + + + + + + + + + PS122/5_63-210 + + + + + + + + + + + + + + PS122/5_63-211 + + + + + + + + + + + + + + PS122/5_63-212 + + + + + + + + + + + + + + PS122/5_63-213 + + + + + + + + + + + + + + PS122/5_63-214 + + + + + + + + + + + + + + PS122/5_63-215 + + + + + + + + + + + + + + PS122/5_63-216 + + + + + + + + + + + + + + PS122/5_63-217 + + + + + + + + + + + + + + PS122/5_63-218 + + + + + + + + + + + + + + PS122/5_63-219 + + + + + + + + + + + + + + PS122/5_63-22 + + + + + + + + + + + + + + PS122/5_63-220 + + + + + + + + + + + + + + PS122/5_63-221 + + + + + + + + + + + + + + PS122/5_63-222 + + + + + + + + + + + + + + PS122/5_63-223 + + + + + + + + + + + + + + PS122/5_63-224 + + + + + + + + + + + + + + PS122/5_63-225 + + + + + + + + + + + + + + PS122/5_63-226 + + + + + + + + + + + + + + PS122/5_63-227 + + + + + + + + + + + + + + PS122/5_63-228 + + + + + + + + + + + + + + PS122/5_63-229 + + + + + + + + + + + + + + PS122/5_63-23 + + + + + + + + + + + + + + PS122/5_63-230 + + + + + + + + + + + + + + PS122/5_63-231 + + + + + + + + + + + + + + PS122/5_63-232 + + + + + + + + + + + + + + PS122/5_63-233 + + + + + + + + + + + + + + PS122/5_63-234 + + + + + + + + + + + + + + PS122/5_63-235 + + + + + + + + + + + + + + PS122/5_63-236 + + + + + + + + + + + + + + PS122/5_63-237 + + + + + + + + + + + + + + PS122/5_63-238 + + + + + + + + + + + + + + PS122/5_63-239 + + + + + + + + + + + + + + PS122/5_63-24 + + + + + + + + + + + + + + PS122/5_63-240 + + + + + + + + + + + + + + PS122/5_63-241 + + + + + + + + + + + + + + PS122/5_63-242 + + + + + + + + + + + + + + PS122/5_63-243 + + + + + + + + + + + + + + PS122/5_63-244 + + + + + + + + + + + + + + PS122/5_63-245 + + + + + + + + + + + + + + PS122/5_63-246 + + + + + + + + + + + + + + PS122/5_63-247 + + + + + + + + + + + + + + PS122/5_63-248 + + + + + + + + + + + + + + PS122/5_63-249 + + + + + + + + + + + + + + PS122/5_63-25 + + + + + + + + + + + + + + PS122/5_63-250 + + + + + + + + + + + + + + PS122/5_63-251 + + + + + + + + + + + + + + PS122/5_63-252 + + + + + + + + + + + + + + PS122/5_63-253 + + + + + + + + + + + + + + PS122/5_63-254 + + + + + + + + + + + + + + PS122/5_63-255 + + + + + + + + + + + + + + PS122/5_63-256 + + + + + + + + + + + + + + PS122/5_63-257 + + + + + + + + + + + + + + PS122/5_63-258 + + + + + + + + + + + + + + PS122/5_63-259 + + + + + + + + + + + + + + PS122/5_63-26 + + + + + + + + + + + + + + PS122/5_63-260 + + + + + + + + + + + + + + PS122/5_63-261 + + + + + + + + + + + + + + PS122/5_63-262 + + + + + + + + + + + + + + PS122/5_63-263 + + + + + + + + + + + + + + PS122/5_63-264 + + + + + + + + + + + + + + PS122/5_63-265 + + + + + + + + + + + + + + PS122/5_63-266 + + + + + + + + + + + + + + PS122/5_63-267 + + + + + + + + + + + + + + PS122/5_63-268 + + + + + + + + + + + + + + PS122/5_63-269 + + + + + + + + + + + + + + PS122/5_63-27 + + + + + + + + + + + + + + PS122/5_63-270 + + + + + + + + + + + + + + PS122/5_63-271 + + + + + + + + + + + + + + PS122/5_63-272 + + + + + + + + + + + + + + PS122/5_63-273 + + + + + + + + + + + + + + PS122/5_63-274 + + + + + + + + + + + + + + PS122/5_63-275 + + + + + + + + + + + + + + PS122/5_63-276 + + + + + + + + + + + + + + PS122/5_63-277 + + + + + + + + + + + + + + PS122/5_63-278 + + + + + + + + + + + + + + PS122/5_63-279 + + + + + + + + + + + + + + PS122/5_63-28 + + + + + + + + + + + + + + PS122/5_63-280 + + + + + + + + + + + + + + PS122/5_63-282 + + + + + + + + + + + + + + PS122/5_63-283 + + + + + + + + + + + + + + PS122/5_63-284 + + + + + + + + + + + + + + PS122/5_63-285 + + + + + + + + + + + + + + PS122/5_63-286 + + + + + + + + + + + + + + PS122/5_63-287 + + + + + + + + + + + + + + PS122/5_63-288 + + + + + + + + + + + + + + PS122/5_63-289 + + + + + + + + + + + + + + PS122/5_63-29 + + + + + + + + + + + + + + PS122/5_63-290 + + + + + + + + + + + + + + PS122/5_63-291 + + + + + + + + + + + + + + PS122/5_63-292 + + + + + + + + + + + + + + PS122/5_63-293 + + + + + + + + + + + + + + PS122/5_63-294 + + + + + + + + + + + + + + PS122/5_63-295 + + + + + + + + + + + + + + PS122/5_63-296 + + + + + + + + + + + + + + PS122/5_63-297 + + + + + + + + + + + + + + PS122/5_63-298 + + + + + + + + + + + + + + PS122/5_63-299 + + + + + + + + + + + + + + PS122/5_63-3 + + + + + + + + + + + + + + PS122/5_63-30 + + + + + + + + + + + + + + PS122/5_63-300 + + + + + + + + + + + + + + PS122/5_63-301 + + + + + + + + + + + + + + PS122/5_63-302 + + + + + + + + + + + + + + PS122/5_63-303 + + + + + + + + + + + + + + PS122/5_63-304 + + + + + + + + + + + + + + PS122/5_63-305 + + + + + + + + + + + + + + PS122/5_63-306 + + + + + + + + + + + + + + PS122/5_63-307 + + + + + + + + + + + + + + PS122/5_63-308 + + + + + + + + + + + + + + PS122/5_63-309 + + + + + + + + + + + + + + PS122/5_63-31 + + + + + + + + + + + + + + PS122/5_63-310 + + + + + + + + + + + + + + PS122/5_63-311 + + + + + + + + + + + + + + PS122/5_63-312 + + + + + + + + + + + + + + PS122/5_63-313 + + + + + + + + + + + + + + PS122/5_63-314 + + + + + + + + + + + + + + PS122/5_63-315 + + + + + + + + + + + + + + PS122/5_63-316 + + + + + + + + + + + + + + PS122/5_63-317 + + + + + + + + + + + + + + PS122/5_63-318 + + + + + + + + + + + + + + PS122/5_63-319 + + + + + + + + + + + + + + PS122/5_63-32 + + + + + + + + + + + + + + PS122/5_63-320 + + + + + + + + + + + + + + PS122/5_63-321 + + + + + + + + + + + + + + PS122/5_63-322 + + + + + + + + + + + + + + PS122/5_63-323 + + + + + + + + + + + + + + PS122/5_63-324 + + + + + + + + + + + + + + PS122/5_63-325 + + + + + + + + + + + + + + PS122/5_63-326 + + + + + + + + + + + + + + PS122/5_63-33 + + + + + + + + + + + + + + PS122/5_63-34 + + + + + + + + + + + + + + PS122/5_63-35 + + + + + + + + + + + + + + PS122/5_63-36 + + + + + + + + + + + + + + PS122/5_63-37 + + + + + + + + + + + + + + PS122/5_63-38 + + + + + + + + + + + + + + PS122/5_63-39 + + + + + + + + + + + + + + PS122/5_63-4 + + + + + + + + + + + + + + PS122/5_63-40 + + + + + + + + + + + + + + PS122/5_63-41 + + + + + + + + + + + + + + PS122/5_63-42 + + + + + + + + + + + + + + PS122/5_63-43 + + + + + + + + + + + + + + PS122/5_63-44 + + + + + + + + + + + + + + PS122/5_63-45 + + + + + + + + + + + + + + PS122/5_63-46 + + + + + + + + + + + + + + PS122/5_63-47 + + + + + + + + + + + + + + PS122/5_63-48 + + + + + + + + + + + + + + PS122/5_63-49 + + + + + + + + + + + + + + PS122/5_63-5 + + + + + + + + + + + + + + PS122/5_63-50 + + + + + + + + + + + + + + PS122/5_63-51 + + + + + + + + + + + + + + PS122/5_63-52 + + + + + + + + + + + + + + PS122/5_63-53 + + + + + + + + + + + + + + PS122/5_63-54 + + + + + + + + + + + + + + PS122/5_63-55 + + + + + + + + + + + + + + PS122/5_63-56 + + + + + + + + + + + + + + PS122/5_63-57 + + + + + + + + + + + + + + PS122/5_63-58 + + + + + + + + + + + + + + PS122/5_63-59 + + + + + + + + + + + + + + PS122/5_63-6 + + + + + + + + + + + + + + PS122/5_63-60 + + + + + + + + + + + + + + PS122/5_63-61 + + + + + + + + + + + + + + PS122/5_63-62 + + + + + + + + + + + + + + PS122/5_63-63 + + + + + + + + + + + + + + PS122/5_63-64 + + + + + + + + + + + + + + PS122/5_63-65 + + + + + + + + + + + + + + PS122/5_63-66 + + + + + + + + + + + + + + PS122/5_63-67 + + + + + + + + + + + + + + PS122/5_63-68 + + + + + + + + + + + + + + PS122/5_63-69 + + + + + + + + + + + + + + PS122/5_63-7 + + + + + + + + + + + + + + PS122/5_63-70 + + + + + + + + + + + + + + PS122/5_63-71 + + + + + + + + + + + + + + PS122/5_63-72 + + + + + + + + + + + + + + PS122/5_63-73 + + + + + + + + + + + + + + PS122/5_63-74 + + + + + + + + + + + + + + PS122/5_63-75 + + + + + + + + + + + + + + PS122/5_63-76 + + + + + + + + + + + + + + PS122/5_63-77 + + + + + + + + + + + + + + PS122/5_63-78 + + + + + + + + + + + + + + PS122/5_63-79 + + + + + + + + + + + + + + PS122/5_63-8 + + + + + + + + + + + + + + PS122/5_63-80 + + + + + + + + + + + + + + PS122/5_63-81 + + + + + + + + + + + + + + PS122/5_63-82 + + + + + + + + + + + + + + PS122/5_63-83 + + + + + + + + + + + + + + PS122/5_63-84 + + + + + + + + + + + + + + PS122/5_63-85 + + + + + + + + + + + + + + PS122/5_63-86 + + + + + + + + + + + + + + PS122/5_63-87 + + + + + + + + + + + + + + PS122/5_63-88 + + + + + + + + + + + + + + PS122/5_63-89 + + + + + + + + + + + + + + PS122/5_63-9 + + + + + + + + + + + + + + PS122/5_63-90 + + + + + + + + + + + + + + PS122/5_63-91 + + + + + + + + + + + + + + PS122/5_63-92 + + + + + + + + + + + + + + PS122/5_63-93 + + + + + + + + + + + + + + PS122/5_63-94 + + + + + + + + + + + + + + PS122/5_63-95 + + + + + + + + + + + + + + PS122/5_63-96 + + + + + + + + + + + + + + PS122/5_63-97 + + + + + + + + + + + + + + PS122/5_63-98 + + + + + + + + + + + + + + PS122/5_63-99 + + + + + + + + + + + + + + PS122/5_99-1 + + + + + + + + + + + + + + PS122/5_99-10 + + + + + + + + + + + + + + PS122/5_99-11 + + + + + + + + + + + + + + PS122/5_99-12 + + + + + + + + + + + + + + PS122/5_99-13 + + + + + + + + + + + + + + PS122/5_99-14 + + + + + + + + + + + + + + PS122/5_99-15 + + + + + + + + + + + + + + PS122/5_99-16 + + + + + + + + + + + + + + PS122/5_99-17 + + + + + + + + + + + + + + PS122/5_99-18 + + + + + + + + + + + + + + PS122/5_99-19 + + + + + + + + + + + + + + PS122/5_99-2 + + + + + + + + + + + + + + PS122/5_99-20 + + + + + + + + + + + + + + PS122/5_99-21 + + + + + + + + + + + + + + PS122/5_99-22 + + + + + + + + + + + + + + PS122/5_99-23 + + + + + + + + + + + + + + PS122/5_99-24 + + + + + + + + + + + + + + PS122/5_99-25 + + + + + + + + + + + + + + PS122/5_99-26 + + + + + + + + + + + + + + PS122/5_99-27 + + + + + + + + + + + + + + PS122/5_99-28 + + + + + + + + + + + + + + PS122/5_99-29 + + + + + + + + + + + + + + PS122/5_99-3 + + + + + + + + + + + + + + PS122/5_99-30 + + + + + + + + + + + + + + PS122/5_99-31 + + + + + + + + + + + + + + PS122/5_99-32 + + + + + + + + + + + + + + PS122/5_99-33 + + + + + + + + + + + + + + PS122/5_99-34 + + + + + + + + + + + + + + PS122/5_99-35 + + + + + + + + + + + + + + PS122/5_99-36 + + + + + + + + + + + + + + PS122/5_99-37 + + + + + + + + + + + + + + PS122/5_99-38 + + + + + + + + + + + + + + PS122/5_99-39 + + + + + + + + + + + + + + PS122/5_99-4 + + + + + + + + + + + + + + PS122/5_99-40 + + + + + + + + + + + + + + PS122/5_99-41 + + + + + + + + + + + + + + PS122/5_99-42 + + + + + + + + + + + + + + PS122/5_99-43 + + + + + + + + + + + + + + PS122/5_99-44 + + + + + + + + + + + + + + PS122/5_99-45 + + + + + + + + + + + + + + PS122/5_99-5 + + + + + + + + + + + + + + PS122/5_99-6 + + + + + + + + + + + + + + PS122/5_99-7 + + + + + + + + + + + + + + PS122/5_99-8 + + + + + + + + + + + + + + PS122/5_99-9 + + + + + + + + + + + + + + + + + + + + + 2021-05-24T23:30:49Z + AT-MOSAiC-1 + + + + + + + + + + + 2021-05-24T23:46:38Z + Longyearbyen + + + + + + + + + + + + + + + + 2021-05-24T23:53:00Z + + + Akademik Tryoshnikov + + + + + + + + + + + + + + + '2020-08-06' + '2020-08-06' + + 2021-05-25T00:14:14Z + P5_223_MOSAiC_ACA_2020_2008060101 + + + + + + + + + + + + + + + '2020-08-30' + '2020-08-30' + + 2021-05-25T00:18:07Z + P5_223_MOSAiC_ACA_2020_2008300201 + + + + + + + + + + + + + + + '2020-08-31' + '2020-08-31' + + 2021-05-25T00:18:26Z + P5_223_MOSAiC_ACA_2020_2008310301 + + + + + + + + + + + + + + + '2020-08-31' + '2020-08-31' + + 2021-05-25T00:18:44Z + P5_223_MOSAiC_ACA_2020_2008310402 + + + + + + + + + + + + + + + '2020-09-02' + '2020-09-02' + + 2021-05-25T00:19:00Z + P5_223_MOSAiC_ACA_2020_2009020501 + + + + + + + + + + + + + + + '2020-09-04' + '2020-09-04' + + 2021-05-25T00:19:17Z + P5_223_MOSAiC_ACA_2020_2009040601 + + + + + + + + + + + + + + + '2020-09-07' + '2020-09-07' + + 2021-05-25T00:19:31Z + P5_223_MOSAiC_ACA_2020_2009070701 + + + + + + + + + + + + + + + '2020-09-08' + '2020-09-08' + + 2021-05-25T00:19:47Z + P5_223_MOSAiC_ACA_2020_2009080801 + + + + + + + + + + + + + + + '2020-09-10' + '2020-09-10' + + 2021-05-25T00:20:03Z + P5_223_MOSAiC_ACA_2020_2009100901 + + + + + + + + + + + + + + + '2020-09-11' + '2020-09-11' + + 2021-05-25T00:20:20Z + P5_223_MOSAiC_ACA_2020_2009111001 + + + + + + + + + + + + + + + '2020-09-13' + '2020-09-13' + + 2021-05-25T00:21:01Z + P5_223_MOSAiC_ACA_2020_2009131101 + + + + + + + + + + + + + + + + + '2020-09-13' + '2020-09-13' + + 2021-05-25T06:46:54Z + P6_222_IceBird_MOSAiC_2020_2009130801 + + + + + + + + + + + + + + + + + '2020-09-11' + '2020-09-11' + + 2021-05-25T06:47:44Z + P6_222_IceBird_MOSAiC_2020_2009110701 + + + + + + + + + + + + + + + 2021-05-25T19:13:56Z + AWI Research Aircraft + + Polar 6 + + + + + + + + + + + + + + + 2021-05-25T19:14:18Z + AWI Research Aircraft + + Polar 5 + + + + + + + + + + + + + + + '2019-12-13 9:04:45' + '2019-09-20 17:30:00' + + 2021-05-26T16:38:16Z + PS122/1-track + + + + + + + + + + + + + + + '2019-12-13' + '2019-09-20' + + 2021-05-26T17:30:17Z + PS122/2-track + + + + + + + + + + + + + + + '2020-06-04' + '2020-02-24' + + 2021-05-26T17:32:00Z + PS122/3-track + + + + + + + + + + + + + + + '2020-08-12' + '2020-06-04' + + 2021-05-26T17:33:08Z + PS122/4-track + + + + + + + + + + + + + + + '2020-10-12' + '2020-08-12' + + 2021-05-26T17:36:12Z + PS122/5-track + + + + + + + + + + + + + + + '2019-10-18' + '2019-09-21' + + 2021-05-26T17:38:35Z + AF-MOSAiC-1_track + + + + + + + + + + + + + + + + Oguz Demir and Joel Johnson. 2021. Arctic sea ice thermal emission measurements from the Ultra Wideband Microwave Radiometer (UWBRAD) at the Multidisciplinary drifting Observatory for the Study of Arctic Climate (MOSAiC) Expedition in January 2020. + + urn:uuid:af2ceda7-52b7-4009-bfef-bfe2f990eb6a + + + + + + + + + endTime + The endTime of something. For a reserved event or service (e.g. FoodEstablishmentReservation), the time that it is expected to end. For actions that span a period of time, when the action was performed. e.g. John wrote a book from January to <em>December</em>. For media, including audio and video, it's the time offset of the end of a clip within a larger file.<br/><br/> + +Note that Event uses startDate/endDate instead of startTime/endTime, even when describing dates with times. This situation may be clarified in future revisions. + + + + startTime + The startTime of something. For a reserved event or service (e.g. FoodEstablishmentReservation), the time that it is expected to start. For actions that span a period of time, when the action was performed. e.g. John wrote a book from <em>January</em> to December. For media, including audio and video, it's the time offset of the start of a clip within a larger file.<br/><br/> + +Note that Event uses startDate/endDate instead of startTime/endTime, even when describing dates with times. This situation may be clarified in future revisions. + + + + + + diff --git a/src/main/resources/ontologies/SALMON.owl b/src/main/resources/ontologies/SALMON.owl new file mode 100644 index 00000000..817d7905 --- /dev/null +++ b/src/main/resources/ontologies/SALMON.owl @@ -0,0 +1,7168 @@ + + + https://en.wikipedia.org/wiki/Latitude + In geography, latitude is a geographic coordinate that specifies the north–south position of a point on the Earth's surface. Latitude is an angle (defined below) which ranges from 0° at the Equator to 90° (North or South) at the poles. Lines of constant latitude, or parallels, run east–west as circles parallel to the equator. Latitude is used together with longitude to specify the precise location of features on the surface of the Earth. On its own, the term latitude should be taken to be the geodetic latitude as defined below. Briefly, geodetic latitude at a point is the angle formed by the vector perpendicular (or normal) to the ellipsoidal surface from that point, and the equatorial plane. Also defined are six auxiliary latitudes that are used in special applications. + + + + + + https://en.wikipedia.org/wiki/Pacific_Ocean, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q98, accessed 2021-06-15 + An ocean that extends from the Arctic in the north to the Antarctic in the south, bounded by Asia and Australia on the west and the Americas on the east. + + + + + + A small, electronic, sound-emitting device which is attached externally to a fish and collects information on fish movement patterns and the physical environment. + External acoustic tag + This type of identification can remain on a fish for several years, is used for individual tagging, and is most suitable for fish that weigh at least 100g (given current technology). One or more sutures are typically used to attach the tag to the fish's skin using a needle. Data is transmitted wirelessly, usually through the use of radio waves (in fresh water and air), acoustic signals (in water; the receiver must also be in the water) or via satellite communication (in air; the tag sends data after it releases from the fish and floats up to the surface). Many types of telemetry devices also act as bio-loggers and store information locally on the device. Reading is done using the tag’s associated equipment, often through a computer connection. + 2021-05-05T16:38:49Z + + + + + + Total number of recruits of age class 7.9. + Age class 7.9 recruits + 2021-07-15T19:35:42Z + + + + + + Objective comparative measure of hot or cold of water in a stream. + + Stream water temperature + 2021-04-14T22:18:53Z + + + + + + A fish measurement method in which the length from the most anterior part of a fish to the tip of the median caudal fin rays (i.e. fork) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior part to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior part to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Fork length measurement method + The fork length measurement method is commonly used in fish species that have forked caudal fins -- where the dorsal and ventral rays are longer than median rays. Longer rays are often damaged or eroded by contact with rocks, debris, or hatchery walls. + 2021-06-14T20:44:42Z + + + + + + Total number of recruits of age class 5.6. + Age class 5.6 recruits + 2021-07-15T18:56:07Z + + + + + + + The weight of a specimen's stomach, taken after the stomach has been dissected from the fish but before being emptied of its contents. + + + + + + https://www.adfg.alaska.gov/FedAidPDFs/fds06-70.pdf, accessed 2021-07-16 + A method which is used to approximate the total weight of a fish and which involves wrapping a cloth tape measure perpendicular to the longitudinal axis of the fish to measure its circumference at the thickest point. + + + + + + Subregion + A subregion is a part of a larger region or continent and is usually based on location. Cardinal directions, such as south or sou commonly used to define a subregion. + 2021-06-22T22:51:09Z + + + + + + The left pectoral fin of the fish is removed. + Left pectoral fin clip + 2021-05-04T19:41:04Z + + + + + + http://purl.dataone.org/odo/ECSO_00001528 + The objective measure of hot or cold of water in a river. + River water temperature + 2021-04-22T16:35:07Z + + + + + + + A numeric or alphanumeric code which represents a particular sample. A sample is defined as a limited quantity of something (e.g. an individual or set of individuals from a population, or a portion of a substance) to be used for testing, analysis, inspection, investigation, demonstration, or trial use. + + + + + + + + + https://github.com/darwin-sw/dsw/wiki/ClassTaxon#equivalence-of-taxon-and-taxoncon-%20cept-in-the-tdwg-ontology-and-the-darwin-core-standard, accessed 2021-04-28 + A reference which is made to a taxon name along with a publication which explains how the author intends for the name to be applied. + + + + + + + Salvelinus malma +S. malma +"Dolly Varden" @en + Dolly Varden trout + ADF&G says that dolly varden are actually char (http://www.adfg.alaska.gov/index.cfm%3Fadfg=dollyvarden.main), though Wikipedia suggests that they are trout (https://en.wikipedia.org/wiki/Dolly_Varden_trout). Formally, members of Genus Salvelinus are considered "char", but Dolly Varden are often interchangeably called "trout" + 2021-05-11T17:26:36Z + + + + + + + 2021-06-16T17:31:20Z + + + + Some populations of the coastal cutthroat trout (O. c. clarkii) are semi-anadromous. (source: https://en.wikipedia.org/wiki/Cutthroat_trout) + + Oncorhynchus clarkii clarkii + + + + + + + + Total number of recruits of age class 7.8. + Age class 7.8 recruits + 2021-07-15T19:35:36Z + + + + + + https://en.wikipedia.org/wiki/Coastal_cutthroat_trout, accessed 2021-06-18 +https://www.wikidata.org/wiki/Q5138345, accessed 2021-06-18 + Oncorhynchus clarkii clarkii (i.e. coastal cutthroat trout) is a subspecies of Oncorhynchus mykiss and one fo the Pacific trout species. The coastal cutthroat trout occurs in four distinct forms. A semi-anadromous or sea-run form is the most well known. Freshwater forms occur in both large and small rivers and streams and lake environments. The native range of the coastal cutthroat trout extends south from the southern coastline of the Kenai Peninsula in Alaska to the Eel River in Northern California. Coastal cutthroat trout are resident in tributary streams and rivers of the Pacific basin and are rarely found more than 100 miles (160 km) from the ocean. + +Physical Description: Freshwater forms of the coastal cutthroat trout are generally dark green to greenish-blue on back, olive-green on upper flank, silvery on lower flank and belly. They display more numerous flank spots below lateral line, irregular spots on dorsal, adipose and caudal fins and the anal, pectoral and pelvic fin bases. The gill covers are pinkish. Sea-run forms while in salt water and shortly after returning to fresh water are silvery with a bluish back, yellowish lower flanks and fins, and display sparse spots. Cutthroats usually display distinctive red, pink, or orange linear marks along the undersides of their mandibles in the lower folds of the gill plates. These markings are responsible for the common name "cutthroat" given to the trout by outdoor writer Charles Hallock in an 1884 article in The American Angler., although the red slashes are not unique to the cutthroat trout and some coastal rainbow trout and redband trout also display throat slashes. The sea-run forms of coastal cutthroat average 2 to 5 lb (0.9 to 2.3 kg), while stream-resident forms attain much smaller sizes 0.4 to 3.2 oz (11 to 91 g). + +Range: The native range of the coastal cutthroat trout extends south from the southern coastline of the Kenai Peninsula in Alaska to the Eel River in Northern California. Coastal cutthroat trout are resident in tributary streams and rivers of the Pacific basin and are rarely found more than 100 miles (160 km) from the ocean. Semi-anadromous, stream resident, fluvial and lake resident forms exist. The great majority of coastal cutthroat trout habitat coincides with the belt of Pacific coast coniferous rainforest that extends from Alaska southward into Northern California. + + + + + + Fish length determination method + 2021-06-14T20:43:46Z + + + + + + http://orcid.org/0000-0002-5300-3075 + The gathering live or deceased fishes by hand. + + + + + + http://purl.dataone.org/odo/ECSO_00001225 + + Objective comparative measure of hot or cold of air. + Air temperature + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-14T22:18:45Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This identification type will often last the entire life of the fish, is primarily used for group marking, and is most suitable for fish at least 2.5cm in length. The fish must be euthanized for reading. The tags are delivered on a spool, and the tagging machine magnetises, cuts and inserts the tag into the fish. While a detector can be used to determine if a fish is marked or not, a fish must be euthanized in order to remove the tag and read the engraved code. + + + + + + date + 2019-01-14T23:28:39Z + + + + + + http://purl.dataone.org/odo/ECSO_00001226 + An objective measure of hot or cold of water in a marine (i.e. ocean or sea) environment. + Seawater temperature + 2021-04-22T04:05:29Z + + + + + + A tag which transmits information about a fish via an electronic receiver. + Biologger +Biotelemetry tag +Radio tag + Electronic tag + 2021-05-05T16:37:48Z + + + + + + A spatial region whose boundaries are typically defined against some material frame of reference (like the earth). + Region + In geography, regions are areas that are broadly divided by physical characteristics (physical geography), human impact characteristics (human geography), and the interaction of humanity and the environment (environmental geography). Geographic regions and sub-regions are mostly described by their imprecisely defined, and sometimes transitory boundaries, except in human geography, where jurisdiction areas such as national borders are defined in law. + 2021-06-22T22:51:02Z + + + + + + seconds elapsed + 2019-01-15T01:05:09Z + + + + + + https://en.wikipedia.org/wiki/Coded_wire_tag, accessed 2021-05-05 https://www.wikidata.org/wiki/Q23581650, accessed 2021-05-05 + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A small metal pin which is inserted into the fish, usually into the cartilage of the snout. + + + + + + The degree of hotness or coldness of a body or environment (corresponding to its molecular activity). + temp +temperature + http://purl.dataone.org/odo/ECSO_00001104 + Temperature measurement type + Temperature is measured with thermometers that may be calibrated to a variety of temperature scales. Most scientists measure temperature using the Celsius scale and thermodynamic temperature using the Kelvin scale, which is the Celsius scale offset so that its null point is 0K = −273.15°C, or absolute zero. The basic unit of temperature in the International System of Units (SI) is the kelvin. It has the symbol K. + 2021-04-14T22:18:17Z + + + + + + The proportion of males and females in a smolt population. + Sex ratio of smolts + 2021-05-11T00:02:35Z + + + + + + Place + In geography, location or place are used to denote a region (point, line, or area) on Earth’s surface or elsewhere. The term location generally implies a higher degree of certainty than place, the latter often indicating an entity with an ambiguous boundary, relying more on human or social attributes of place identity and sense of place than on geometry. + 2021-06-22T22:51:00Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + The adipose fin is removed using scissors or a razor blade. + + + + + + Oncorhynchus clarkii clarkii (i.e. coastal cutthroat trout) is a subspecies of Oncorhynchus mykiss and one fo the Pacific trout species. The coastal cutthroat trout occurs in four distinct forms. A semi-anadromous or sea-run form is the most well known. Freshwater forms occur in both large and small rivers and streams and lake environments. The native range of the coastal cutthroat trout extends south from the southern coastline of the Kenai Peninsula in Alaska to the Eel River in Northern California. Coastal cutthroat trout are resident in tributary streams and rivers of the Pacific basin and are rarely found more than 100 miles (160 km) from the ocean. + +Physical Description: Freshwater forms of the coastal cutthroat trout are generally dark green to greenish-blue on back, olive-green on upper flank, silvery on lower flank and belly. They display more numerous flank spots below lateral line, irregular spots on dorsal, adipose and caudal fins and the anal, pectoral and pelvic fin bases. The gill covers are pinkish. Sea-run forms while in salt water and shortly after returning to fresh water are silvery with a bluish back, yellowish lower flanks and fins, and display sparse spots. Cutthroats usually display distinctive red, pink, or orange linear marks along the undersides of their mandibles in the lower folds of the gill plates. These markings are responsible for the common name "cutthroat" given to the trout by outdoor writer Charles Hallock in an 1884 article in The American Angler., although the red slashes are not unique to the cutthroat trout and some coastal rainbow trout and redband trout also display throat slashes. The sea-run forms of coastal cutthroat average 2 to 5 lb (0.9 to 2.3 kg), while stream-resident forms attain much smaller sizes 0.4 to 3.2 oz (11 to 91 g). + +Range: The native range of the coastal cutthroat trout extends south from the southern coastline of the Kenai Peninsula in Alaska to the Eel River in Northern California. Coastal cutthroat trout are resident in tributary streams and rivers of the Pacific basin and are rarely found more than 100 miles (160 km) from the ocean. Semi-anadromous, stream resident, fluvial and lake resident forms exist. The great majority of coastal cutthroat trout habitat coincides with the belt of Pacific coast coniferous rainforest that extends from Alaska southward into Northern California. + The class which contains all instances of Oncorhynchus clarkii clarkii. + 2021-06-16T16:26:35Z + + + + O. c. clarkii +Onchorhynchus c. clarkii +sea-run cutthroat trout +blueback trout +harvest trout + Oncorhynchus clarkii clarkii + + NCBI:txid69121 + + + Total number of recruits of age class 7.7. + Age class 7.7 recruits + 2021-07-15T19:35:30Z + + + + + + + The left pectoral fin of the fish is removed. + + + + + + + + + The parental year for a group of returning salmon, i.e. the calendar year when the majority of parents of these fish spawned. + Brood year + 2021-05-04T17:25:52Z + + + + + + http://purl.dataone.org/odo/ECSO_00001525 + The objective measure of hot or cold in freshwater (i.e. non-saline water). + Freshwater temperature + 2021-04-22T04:05:19Z + + + + + + http://purl.dataone.org/odo/ECSO_00001237 + Measurement types which pertain to any product of the condensation of atmospheric water vapor that falls under gravity. + + + + + + This identification type will last the lifetime of the fish, is used for group marking, and is most suitable for salmonids that are at least 7cm in length. + One of the pelvic fins is removed using scissors. + Pelvic fin clip + 2021-05-05T16:36:17Z + + + + + + part of season measurement made + 2019-01-15T00:16:39Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000029 + A flowing body of water. + + + + + + https://en.wikipedia.org/wiki/10th_edition_of_Systema_Naturae, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q4547210, accessed 2021-06-15 + The 10th edition of Systema Naturae is a book written by Swedish naturalist Carl Linnaeus and published in two volumes in 1758 and 1759, which marks the starting point of zoological nomenclature. In it, Linnaeus introduced binomial nomenclature for animals, something he had already done for plants in his 1753 publication of Species Plantarum. + + + + + + + A numeric value assigned to a scale gum card. + + + + + + + + + + + + Time Step + + time interval + Time Step + Time Step + duration + Interval of time representing duration of observation + + time interval + duration + Adapted from +http://en.wikipedia.org/wiki/Time + + + In biological taxonomy, Type generically refers to the official name applied to a taxon. This Class constrains Type members as belonging to family Salmonidae + Scientific name +Binomial name +Binomen +Latin name + Salmonid Type + 2021-04-26T20:17:29Z + + + + + + A categorical measurement type which describes the sex of a fish or group of fish(es), where sex is defined as the assemblage of physical properties or qualities of a fish by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female. + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C28421 + Fish sex measurement type + May be better to map to PATO, that has some potentially better definitions-- e.g. +biological sex: http://purl.obolibrary.org/obo/PATO_0000047 +phenotypic sex: http://purl.obolibrary.org/obo/PATO_0001894 + 2021-04-14T19:59:20Z + + + + + + A reference to a position on the Earth, by its name or by its geographical location. + Location + [NEEDS ALIGNMENT] + +http://purl.obolibrary.org/obo/GAZ_00000448 + In geography, location or place are used to denote a region (point, line, or area) on Earth’s surface or elsewhere. The term location generally implies a higher degree of certainty than place, the latter often indicating an entity with an ambiguous boundary, relying more on human or social attributes of place identity and sense of place than on geometry. + 2021-06-22T22:50:56Z + + + + + + Sport fishery harvest count + Estimates of number of fish caught based on some sport harvest + 2022-06-10T21:46:57Z + + + + + + + Coastal cutthroat trout + 2021-06-16T16:10:16Z + + + + + + + + + Schiewe, MH (2013) Salmon. Encyclopedia of Biodiversity (Second Edition). pg. 522-531. https://doi.org/10.1016/B978-0-12-384719-5.00293-8 + A classification of fishes which spawn in freshwater, migrate to the ocean to forage and mature, and return to freshwater to spawn and begin the cycle again. + + + + + + Total number of recruits of age class 7.6. + Age class 7.6 recruits + 2021-07-15T19:35:23Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-03-31 + A fish length measurement taken from the mid-orbit (i.e. eye) to the posterior insertion of the anal fin. + + + + + + Indigenous names for salmon can be found by exploring each SASAP region's page on the State of Alaska's Salmon and People website (for example, see the Arctic Region here: https://alaskasalmonandpeople.org/region/arctic/) + https://alaskasalmonandpeople.org/regions/, accessed 2021-04-16 + "Iqalugruaq" @ipk +"Aqalugruaq" @ipk +"Noolaaghe" [Denaakk'e, Koyukon Athabaskan] +"Nahdlii" @gwi +"Shii" @gwi +"Aluyak" @ypk +"Iqalluk" @ypk +"Kangitneq" @ypk +"Mac'utaq" @ypk +"Teggmaarrluk" @ypk [Unangam tunuu variant] +"x̂aykix̂" @ale +"Alimaq" [Alutiiq/Sugpiaq] +"alima" [Kenai Dena'ina] +"tiitl'" @eya +"Gaynii"@tsi @tli +"téel'" @tsi @tli + + + + + + + + + + https://en.wikipedia.org/wiki/Steelhead_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q64437771, accessed 2021-06-15 + Oncorhynchus mykiss irideus +Oncorhynchus m. irideus +O. m. irideus +"steelhead" @en + + + + + + The flap in the corner of the mouth is clipped away (the maxilla - sometimes also the supermaxilla). + Maxilla clip + This identification type will last the entire lifetime of the fish, is used for group marking, and is most suitable for salmonids that are at least 10cm in length. + 2021-05-05T16:35:46Z + + + + + + The ratio of males and females in a juvenile standing stock. + Sex ratio of juvenile standing stock + 2021-05-11T00:01:49Z + + + + + + longitude second component + 2019-01-28T21:59:23Z + + + + + + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C25150 + The duration of time for which a fish has been alive. + + + + + + Total number of recruits of age class 1.4. + Age class 1.4 recruits + 2021-07-15T18:47:12Z + + + + + + + Oncorhynchus tshawytscha +O. tshawytscha +"king salmon" @en +"Quinnat salmon" @en +"spring salmon" @en +"chrome hog" @en +"Blackmouth" @en +"Tyee salmon" @en + "Sikayujak" @ipk +"Ggaal" [Denaakk'e, Koyukon Athabaskan] +"Gath" [Benhti Kenaga, Lower Tanana] +"Luk Choo" @gwi +"Kiagtaq" @ypk +"Taryaqvak" @ypk +"Aciirturtet" @ypk +"sumgax̂" @ale [Unangam tunuu variant] +"chaguchax̂" @ale [Unangam tunuu variant] +"chavichax̂" @ale [Unangam tunuu variant] +"Aamasuuk" [Alutiiq/Sugpiaq] +"Liliksak" [Alutiiq/Sugpiaq] +"Luk'ece'e" [Ahtna] +"Kentsinai'i" [Ahtna] +"luq'aka'a" [Kenai Dena'ina] +"nudlaghi" [Kenai Dena'ina] +"te'ya'lee" @eya +"Yee" @tsi @tli +"t'á" @tsi @tli + Chinook salmon + 2021-04-16T18:10:30Z + + + + + + Geospatial information + 2021-06-22T22:50:49Z + + + + + + Oncorhynchus clarkii clarkii +Oncorhynchus c. clarkii +O. c. clarkii + Coastal cutthroat trout + 2021-06-16T16:09:57Z + + + + + + Total number of recruits of age class 7.5. + Age class 7.5 recruits + 2021-07-15T19:35:15Z + + + + + + https://www.fishbase.se/Glossary/Glossary.php?q=stock&language=english&sc=is, accessed 2021-06-15 + Group of individuals of a species which can be regarded as an entity for management or assessment purposes; a separate breeding population of a species; term used to identify a management unit of fishery species. A distinct genetic population, a population defined by movement pattern, part of a population potentially harvestable, or a quantity of fish from a given area. May be a total or a spawning stock. + + + + + + https://en.wikipedia.org/wiki/Spearfishing, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q765706, accessed 2021-04-01 + A barbed pole, which is used to strike and collect a fish. Spearheads come in a variety of different shapes (e.g. arrow, trident), and can be thrown by hand or deployed using elastic-powered spearguns and slings or compressed gas pneumatic powered spearguns. + + + + + + A portion of the upper caudal fin lobe is removed. + Upper caudal fin clip + 2021-05-05T16:31:23Z + + + + + + The proportion of males and females in an adult spawning stock. + Sex ratio of adult spawning stock + 2021-05-11T00:01:35Z + + + + + + Salmonid species name or identifier + 2021-04-14T18:47:11Z + + + + + + https://www.solitudelakemanagement.com/blog/know-your-pond-life-fin-clipping-for-fisheries-management-success/, accessed 2021-05-05 + A portion of the lower caudal fin lobe is removed. + + + + + + https://en.wikipedia.org/wiki/Sex_ratio, accessed 10May2021 +https://www.wikidata.org/wiki/Q1068155, accessed 10May2021 + The ratio of males to females in a population. + + + + + + https://en.wikipedia.org/wiki/Radio-frequency_identification, accessed 2021-05-05 +https://www.wikidata.org/wiki/Q104954, accessed 2021-05-05 + A system which uses electromagnetic fields to automatically identify and track tags attached to objects. + + + + + + + + + + + + + + + A biological sex quality inhering in an individual or a population that only produces gametes that can be fertilised by male gametes. + http://purl.obolibrary.org/obo/PATO_0000383 + Female + 2021-04-15T20:51:08Z + + + + + + + + + + Total number of recruits of age class 1.3. + Age class 1.3 recruits + 2021-07-15T18:46:55Z + + + + + + A fish length measurement taken from the hind margin of the orbit to the tip of the median caudal fin rays. + POFK + + Post-orbit to fork of tail length + 2021-03-31T18:19:40Z + + + + + + Fish stock name + 2021-06-21T20:16:55Z + + + + + Subsistence fishery harvest count + Estimates of number of fish caught based on some subsistence harvest + 2022-06-10T21:46:57Z + + + + + + Semi-anadromous + Term to designate that some, but not all, individuals of the taxon migrate from freshwater into the ocean for part of their life history. Used as Existential Quantifier on the appropriate taxonomic Class to indicate anadromous behavior of some Instances of that Class. + 2021-06-16T16:03:41Z + + + + + + https://en.wikipedia.org/wiki/Sea_louse, accessed 2021-06-23 +https://www.wikidata.org/wiki/Q3808922, accessed 2021-06-23 + A sea louse (plural sea lice, not to be confused with sea fleas), is a member of the Caligidae family of copepods (small crustaceans) within the order Siphonostomatoida. The roughly 559 species in 37 genera include around 162 Lepeophtheirus and 268 Caligus species. Sea lice are marine ectoparasites (external parasites) that feed on the mucus, epidermal tissue, and blood of host marine fish. + + + + + + A portion of the lower caudal fin lobe is removed. + Lower caudal fin clip + 2021-05-05T16:30:45Z + + + + + + + + + + + A measurement type taken of some non-living chemical or physical component of the environment. + Environmental measurement type + 2021-04-14T18:23:43Z + + + + + + Salmo spp. + NCBI:txid8028 + Salmo is a genus of fish in the salmon family Salmonidae that includes the European species of salmon and trout, among them the familiar Atlantic salmon Salmo salar and the brown trout Salmo trutta. + 2021-05-27T00:02:38Z + + + + + + Julian day + day of year + Julian day + 2019-01-15T18:26:54Z + + + + + + + A community species diversity that is the total species diversity in a landscape. The area or landscape of interest may be of very different sizes in different situations, but it should encompass multiple sites or habitats as measured by alpha diversity. + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=fishingHatcheries.main, accessed 2021-04-02 + https://www.adfg.alaska.gov/static/fishing/PDFs/hatcheries/2013_ak_hatcheries.pdf, accessed 2021-04-02 + The Alaska hatchery program was designed to increase salmon abundance and enhace fisheries, while protecting wild stocks. The program was built in response to depressed commercial fisheries, to meet the needs of the people of the state. + + + + + + + + + + Anadromous Waters Catalog water body code +State of Alaska's Anadromous Waters Stream Catalog + + + + + + https://www.pac.dfo-mpo.gc.ca/fm-gp/salmon-saumon/gloss-eng.html, accessed 2021-05-04 + The parental year for a group of returning salmon, i.e. the calendar year when the majority of parents of these fish spawned. + + + + + + + + + https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-03-31 + A fish length measurement taken from the most anterior part of a fish to the tip of the median caudal fin rays (i.e. fork). + + + + + + https://en.wikipedia.org/wiki/Angling, accessed 2021-04-01 + Fishing by means of an "angle" (fish hook). The hook is usually attached to a fishing line and baited with natural bait or artificial lures to attract fish. The line is often attached to a fishing rod. + + + + + + Total number of recruits of age class 1.2. + Age class 1.2 recruits + 2021-07-15T18:46:25Z + + + + + + A fish length measurement taken from the most anterior part of a fish to the tip of the median caudal fin rays (i.e. fork). + FL +tip of snout to fork of tail + + Fork length + 2021-03-31T18:19:34Z + + + + + + Recruits per spawner + A count or other estimate of the number of fish returning to a breeding site from a spawning individual. + 2021-07-20T21:55:30Z + + + + + + + + + + + http://rs.tdwg.org/dwc/terms/lifeStage + The age class or life stage of the biological individual(s) at the time the occurrence was recorded. + + + + + + The removal of a portion or entirety of a fin or the maxilla of a fish, for identification purposes. + Fin or maxilla clip + 2021-05-05T16:29:24Z + + + + + + + + + + A biological sex quality inhering in an individual or a population whose sex organs contain only male gametes. + http://purl.obolibrary.org/obo/PATO_0000384 + Male + 2021-04-15T20:51:04Z + + + + + + + Linnaeus, 1758 + The 10th edition of Systema Naturae is a book written by Swedish naturalist Carl Linnaeus and published in two volumes in 1758 and 1759, which marks the starting point of zoological nomenclature. In it, Linnaeus introduced binomial nomenclature for animals, something he had already done for plants in his 1753 publication of Species Plantarum. + 2021-05-26T23:58:33Z + + + + + + The number of salmon which do not get caught by commercial or recreational fisheries and return to their freshwater spawning habitat. + Salmon escapement count + 2021-04-26T23:21:35Z + + + + + + https://www.fishbase.in/Glossary/Glossary.php?q=smolt&language=english&sc=is, accessed 2021-04-21 + 1) A young salmonid which has developed silvery coloring on its sides, obscuring the parr marks, and which is about to migrate or has just migrated into the sea, 2) to undergo the transformation from parr to smolt. + + + + + + Total number of recruits of age class 1.1. + Age class 1.1 recruits + 2021-07-15T18:46:02Z + + + + + + End of a temporal entity. + + + + + A variable that is not in itself directly measured but inferred, and that serves in place of an unobservable or immeasurable variable. In order for a variable to be a good proxy, it must have a close correlation, not necessarily linear, with the variable of interest. This correlation might be either positive or negative. + + + + + + A name that identifies (that is, labels the identity of) either a unique object or a unique class of objects, where the "object" of class may be an idea, physical countable object (of class thereof), or physical noncountable substance (or class thereof). The abbreviation ID often refers to identity, identification (the process of identifying), or an identifier (that is, an instance of identification). An identifier may be a word, number, letter, symbol, or any combination of those. + ID +Identity + Identifiers and Codes + Identifiers and Codes are differentiated here from their potentially more commonly identifying "labels" that would called "Names", which are typically expressed more in natural language. + +In some cases, the distinction between a Station "Identifier/Code" and the "Station Name" may be ambiguous, or the same label might apply to both. + 2021-06-21T20:12:18Z + + + + + Recruit abundance + 2021-07-20T21:55:15Z + + + + + + https://en.wikipedia.org/wiki/Notation, accessed 2021-06-14 +https://www.wikidata.org/wiki/Q2001982, accessed 2021-06-14 + + A series or system of written symbols used to represent numbers, amounts, or elements. + + + + + + The ratio of males to females in a population. + Sex ratio + 2021-05-10T22:51:40Z + + + + + + A numerical value which represents the length of a fish, typically in units of millimeters, centimeters, or inches. + http://purl.dataone.org/odo/ECSO_00000553 + Fish length measurement type + 2021-03-31T17:43:39Z + + + + + + Oncorhynchus spp. + NCBI:txid8016 + Oncorhynchus is a genus of fish in the family Salmonidae; it contains the Pacific salmon and Pacific trout. The name of the genus is derived from the Greek ὄγκος (ónkos, “lump, bend”) + ῥύγχος (rhúnkhos, “snout”), in reference to the hooked jaws of males in the mating season (the "kype"). + 2021-05-26T23:57:17Z + + + + + + A series or system of written symbols used to represent numbers, amounts, or elements. + Notation type + [NEEDS ALIGNMENT] + +http://semanticscience.org/resource/SIO_001385 + 2021-04-26T23:10:08Z + + + + + Objective comparative measure of hot or cold of water temperature in an aquatic environment. + + Aquatic temperature + 2021-04-15T20:49:21Z + + + + + + https://en.wikipedia.org/wiki/Salvelinus, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q548682, accessed 2021-06-15 + Salvelinus is a genus of salmonid fish often called char or charr; some species are called "trout". Salvelinus is a member of the subfamily Salmoninae within the family Salmonidae. + + + + + + https://en.wikipedia.org/wiki/Body_of_water, accessed 2021-03-30 +https://www.wikidata.org/wiki/Q15324, accessed 2021-03-30 + An accumulation of water of varying size. + + + + + + https://alaskasalmonandpeople.org/working-group/governance-and-subsistence/, accessed 2021-04-02 + http://www.adfg.alaska.gov/index.cfm?adfg=fishingPersonalUse.main, accessed 2021-04-02 + A regulatory category of Alaskan fishery which is legally defined as, "the taking, fishing for, or possession of finfish, shellfish, or other fishery resources, by Alaska residents for personal use and not for sale or barter, with gill or dip net, seine, fish wheel, long line, or other means defined by the Board of Fisheries." Personal use fisheries may exist only in "nonsubsistence areas" as determined by the state of Alaska (AS 16.05.258(c)). + + + + + + + + + + Juvenile standing stock abundance + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-29T19:02:18Z + + + + + + site identifier + Identifier associated, in some context" with a "Site"-- i.e. a location where some research data have been or are being collected + 2019-05-23T19:30:55Z + + + + + + https://en.wikipedia.org/wiki/Coho_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q934874, accessed 2021-06-15 + Oncorhynchus kisutch (i.e. coho salmon) is one of the five species of Pacific salmon. + +Physical Description: During their ocean phase, coho salmon have silver sides and dark-blue backs. During their spawning phase, their jaws and teeth become hooked. After entering fresh water, they develop bright-red sides, bluish-green heads and backs, dark bellies and dark spots on their backs. Sexually maturing fish develop a light-pink or rose shading along the belly, and the males may show a slight arching of the back. Mature adults have a pronounced red skin color with darker backs and average 28 inches (71 cm) and 7 to 11 pounds (3.2 to 5.0 kg), occasionally reaching up to 36 pounds (16 kg). They also develop a large kype (hooked beak) during spawning. Mature females may be darker than males, with both showing a pronounced hook on the nose. + +Range: The traditional range of the coho salmon runs along both sides of the North Pacific Ocean, from Hokkaidō, Japan and eastern Russia, around the Bering Sea to mainland Alaska, and south to Monterey Bay, California. Coho salmon have also been introduced in all the Great Lakes, as well as many landlocked reservoirs throughout the United States. A number of specimens, (more than 20), were caught in waters surrounding Denmark and Norway in 2017. Their source is currently unknown, but the salmon species is farmed at several locations in Europe, making it probable that the animal has slipped the net at such a farm. + + + + + + https://en.wikipedia.org/wiki/Atlantic_salmon, accessed 2021-06-01 +https://www.wikidata.org/wiki/Q188879, accessed 2021-06-01 + Salmo salar +S. salar + + + + + + + + + + https://en.wikipedia.org/wiki/Coastal_cutthroat_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q5138345, accessed 2021-06-15 + Oncorhynchus clarkii clarkii +Oncorhynchus c. clarkii +O. c. clarkii + + + + + + Group of individuals of a species which can be regarded as an entity for management or assessment purposes; a separate breeding population of a species; term used to identify a management unit of fishery species. A distinct genetic population, a population defined by movement pattern, part of a population potentially harvestable, or a quantity of fish from a given area. May be a total or a spawning stock. + Fish stock type + 2021-06-14T23:05:05Z + + + + + Total number of recruits of age class 6.4. + Age class 6.4 recruits + 2021-07-15T18:57:59Z + + + + + + A classification of fishes which spawn in freshwater, migrate to the ocean to forage and mature, and return to freshwater to spawn and begin the cycle again. + Anadromous + 2021-06-01T20:10:58Z + + + + + + Total number of recruits of age class 3.7. + Age class 3.7 recruits + 2021-07-15T18:52:32Z + + + + + + Total number of recruits of age class 1.5. + Age class 1.5 recruits + 2021-07-15T18:47:26Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000015 + A marine water body which is constitutes the majority of an astronomical body's hydrosphere. + Ocean + 2021-04-07T18:39:26Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This identification type will last the entire lifetime of the fish, is used for group marking, and is most suitable for salmonids that are at least 10cm in length. + + + + + + + + + + + The number of recruits which survive to a legal age and/or size and are captured by a fishery. + + + + + + https://www.wikidata.org/wiki/Q833503, accessed 2021-04-16 + https://en.wikipedia.org/wiki/Chinook_salmon, accessed 2021-04-16 + Oncorhynchus tshawytscha +O. tshawytscha +"king salmon" @en +"Quinnat salmon" @en +"spring salmon" @en +"chrome hog" @en +"Blackmouth" @en +"Tyee salmon" @en + + + + + + https://orcid.org/0000-0002-5300-3075 + Objective comparative measure of hot or cold of water in a stream. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This type of identification can remain in a fish for several years, is used for individual tagging, and is most suitable for fish that weigh at least 100g (given current technology). Tags may be inserted several different ways: (a) placed in a fish's stomach using a finger or guide, (b) implanted in the abdominal cavity, or (c) anchored inside the abdomen, usually to the abdominal wall with stiches. Data is transmitted wirelessly, usually through the use of radio waves (in fresh water and air), acoustic signals (in water; the receiver must also be in the water) or via satellite communication (in air; the tag sends data after it releases from the fish and floats up to the surface). Many types of telemetry devices also act as bio-loggers and store information locally on the device. Reading is done using the tag’s associated equipment, often through a computer connection. + + + + + + The total number of recruits which successfully return to spawn in freshwater habitats for a given brood year. + adult spawning stock abundance +adult spawning stock + Spawner abundance + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. The ESV list uses the label 'Adult spawning stock abundance' rather than 'Spawner abundance.' + 2021-04-29T19:02:08Z + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-06 + There are three basic methods for age and growth determination of fishes: (1) observation of the growth of fishes of known age, (2) study of fish size-frequencies, and (3) study of seasonal ring formation in hard body parts such as scales and bones. + + + + + + An identifier, which may be assigned to a physical sample taken from a fish (e.g. tissue, fin, otolith) or an entire fish specimen. + Fish sample code + 2021-05-04T21:55:17Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000016 + A large expanse of saline water usually connected with an ocean. + + + + + + A fish measurement method in which the length from the most anterior tip of the body to the tip of the longest caudal fin rays is recorded. +Total length can be measured by two conventions -- by leaving the caudal fin spread in a natural position or by compressing the lobes of the caudal fin dorsoventrally. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior tip of the body to the tip of the longest caudal fin rays. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior tip of the body to the tip of the longest caudal fin rays. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Total length measurement method + 2021-06-14T21:49:03Z + + + + + + Total number of recruits of age class 6.3. + Age class 6.3 recruits + 2021-07-15T18:57:51Z + + + + + + European System Age Designation + The European Age System Designation is based on a count of Freshwater (FW) and Saltwater (SW) Annuli in recruit otoliths, represented as "number of FW annuli" "." "number of SW annuli", e.g "1.4" indicating 1 FW annulus and 4 SW annuli. + +Some interpret the "Total Age" of a recruit with an "Age designation= 0.0" as a 1-year old salmon, while others interpret "Total Age" as a 0-year old salmon. + +That is, in some cases "Total Age" might be reported FW+SW+1, while in other cases it would simply be FW+SW: + +1.3=total age of 4, or 5 years +2.3=total age of 5, or 6 years + 2021-12-09T20:51:19Z + + + + + + http://purl.obolibrary.org/obo/GAZ_00000448 + +https://www.washoeschools.net/cms/lib/NV01912265/Centricity/Domain/1141/Five%20Themes%20of%20Geo%20packet%202017.pdf, accessed 2021-06-22 + A reference to a position on the Earth, by its name or by its geographical location. + + + + + + Migratory pattern + A broad category that may be useful for classifying fish based on patterns in migratory trajectories. + 2021-06-01T20:10:50Z + + + + + + + + + + A numeric or alphanumeric code which represents potential sources of error in determining the age of a fish specimen. + + + + + + Total number of recruits of age class 3.6. + Age class 3.6 recruits + 2021-07-15T18:52:26Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000020 + A body of water or other liquid of considerable size contained in a depression on a landmass. + Lake + 2021-04-07T18:39:22Z + + + + + + https://en.wikipedia.org/wiki/Bismarck_brown_Y, accessed 05May2021 + Bismarck brown +Machester brown +Phenylene brown +Bismarck brown Y +C.I. 21000 +C.I. Basic Brown 1 +Basic Brown 1 +Vesuvine BA + + + + + + + + + + Salmon abundance + A measurement or estimate of the number of salmon, based on counts, densities, weights, or other methods. + 2021-04-29T19:01:14Z + + + + + + + A numeric or alphanumeric code which represents a particular sample. A sample is defined as a limited quantity of something (e.g. an individual or set of individuals from a population, or a portion of a substance) to be used for testing, analysis, inspection, investigation, demonstration, or trial use. + sample id + Sample code + 2021-05-04T21:54:57Z + + + + + + Subsurface sea temperature + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-22T17:20:03Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + The flap in the corner of the mouth is clipped away (the maxilla - sometimes also the supermaxilla). + + + + + + A fish measurement method in which the length from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Standard length measurement method + 2021-06-14T21:45:52Z + + + + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 20212-04-09 + An age designation notation that includes two number separated by a period. The first number represents the number of years or winters a salmon has spent in freshwater after emergence from the gravel, and the second number represents the number of years spent in the ocean. Added together, these numbers can provide the total age or age class of a salmon. (although see Comment for further detail). + + + + + + Total number of recruits of age class 6.2. + Age class 6.2 recruits + 2021-07-15T18:57:46Z + + + + + + Schiewe, MH (2013) Salmon. Encyclopedia of Biodiversity (Second Edition). pg. 522-531. https://doi.org/10.1016/B978-0-12-384719-5.00293-8 + Atlantic salmon are the only anadromous salmonid native to the Atlantic coast of North America. + + + + + + second of hour + second of measurement time + second of hour + 2019-01-16T00:29:24Z + + + + + + A reproductive strategy which is characterized by a single reproductive episode, typically before death. + Semelparity + 2021-06-01T20:04:35Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-06-14 +https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-06-14 + A fish measurement method in which the length from the middle of the orbit to the tip of the median caudal fin rays is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + Total number of recruits of age class 3.5. + Age class 3.5 recruits + 2021-07-15T18:52:22Z + + + + + + European system Age designation recruits + 2021-12-09T20:48:48Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000022 + A stream which, through permanent or seasonal flow processes, moves from elevated land towards lower elevations through a definite channel and empties either into a sea, lake, or another river or ends on land as bed seepage and evapotranspiration exceed water supply. + River + 2021-04-07T18:39:18Z + + + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=fishingPersonalUse.main, accessed 2021-04-02 + Personal use fishing is open to Alaskan residents only, and you must have a valid resident Sport Fishing License to participate in personal use fisheries. + +The bag, possession, and gear limits in personal use fisheries MAY NOT be added to the bag, possession, and gear limits under sport or subsistence regulations. + +It is unlawful to buy, sell, trade or barter personal use finfish, shellfish, aquatic plants, or their parts. + +Many, but not all, personal use fisheries require a permit issued by the Department of Fish and Game. Personal use fisheries have many different regulations for bag limits, allowable gear, and time and area restrictions. Some personal use fisheries are managed in-season by emergency order, so regulations can change at any time. + + + + + + Total number of recruits of age class 3.4. + Age class 3.4 recruits + 2021-07-15T18:52:16Z + + + + + + Geocoordinates + 2021-08-12T20:54:42Z + + + + + + + + + http://purl.obolibrary.org/obo/PCO_0000004 + A quality that inheres in a community. + Quality of an ecological community + 2021-04-29T18:48:45Z + + + + + + The Alaska Department of Fish and Game defines unique two-digit "Codes for the Commercial Operator's Annual Report" which represent each of the gear types and harvest methods used Alaskan fisheries. + Alaska Department of Fish and Game gear code + ADF&G gear code + ADF&G gear codes: + +01 purse seine +02 beach seine +03 drift gillnet +04 set gillnet +05 hand line/jig/troll +07 non-pelagic/bottom trawl +08 fish wheel +10 ring net +11 diving +12 handpicked +13 dip net +14 weir +15 power gurdy troll +17 beam trawl +18 shovel +21 pound +22 dredge +23 hydro/mechanical dredge +25 dinglebar +26 mechanical jigs +27 double otter trawl +34 herring gillnet +37 pair trawl +41 sunken gillnet +47 pelagic/mid-water trawl +61 longline (hook and line) +77 fish ladder/raceway +90 trap +91 pot gear +99 other (please specify) + 2021-05-04T19:58:32Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000033 + A body of water, usually of smaller size than a lake. + + + + + + Places and Locations + 2022-01-27T20:37:47Z + + + + + Total number of recruits of age class 8.5. + Age class 8.5 recruits + 2021-07-15T19:36:20Z + + + + + + A fish measurement method in which the length from the hind margin of the orbit (i.e. eye) to the hypural plate is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from hind margin of the orbit (i.e. eye) to the hypural plate. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the hind margin of the orbit (i.e. eye) to the hypural plate. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + +In the case that hypural plate is not visible, the measurement may be made to some external feature (e.g. the position of the last lateral line scale; end of the fleshy caudal peduncle; midline of a crease that forms when the tail is bent sharply). It is important to note this adjustment in measurement protocol. + + Post-orbit to hypural plate measurement method + Measurements of specific parts of a fish are sometimes necessary when intact fish are not available. For instance, spawning or dead salmon often have eroded tails (from redd excavation) or enlarged or damaged jaws. When researchers want to compare fish lengths of male spawners versus female spawners or hatchery spawned females versus carcasses, it is a good idea to use this type of length measurement to remove the bias of the eroded tails on female spawners. So length measurements are made from specific parts of the body that are intact, such as the orbit and the hypural plate. The hypural plate is comprised of modified vertebrae that support the rays of the caudal fin and originate from the posterior end of the vertebral column. + 2021-06-14T21:38:35Z + + + + + + Total number of recruits of age class 6.1. + Age class 6.1 recruits + 2021-07-15T18:57:39Z + + + + + + A reproductive strategy which is characterized by multiple reproductive cycles over the course of an organism's lifetime. + Iteroparity + 2021-06-01T20:04:29Z + + + + + + http://purl.obolibrary.org/obo/MMO_0000000 + The manner, procedure or technique by which a morphological or physiological state or property in a single individual or sample or a group of individuals or samples is assessed and a quantitative or qualitative value assigned. + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-27 + Otoliths, or "earstones" (structures formed of calcium in the heads of bony fishes, and which function as organs of balance), grow concentrically from the center origin. Factors, such as watertemperature, that affect fish growth cause seasonal changes in the density of layers laid down in otoliths and in some cases it is possible to determine fish age from the banding that results. When otoliths are viewed under a low-power microscope, the layers making up spring and summer growth appear as a white, opaque band. Layers laid down in the fall, and also in the winter in some fishes, appear as a dark translucent band. A light and a dark band together make up the annual growth, and age in years is determined by counting the number of dark bands. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000476 + An opening of a lake into its shore. + + + + + + Pre-fishery abundance + [ADDRESS COMMENT, THEN DELETE] + +needs defintion + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-29T18:44:25Z + + + + + + Reproductive strategy + A general category for gathering traits (morphological, behavioral, and otherwise) that have some evolutionary basis for achieving reproductive success. + 2021-06-01T20:04:09Z + + + + + Total number of recruits of age class 3.3. + Age class 3.3 recruits + 2021-07-15T18:52:09Z + + + + + + A numeric or alphanumeric code, which represents a particular type of fishing gear or equipment. + Fishing gear code + 2021-05-04T19:58:20Z + + + + + + http://purl.dataone.org/odo/ECSO_00001658 + Salinity measured at the surface of the sea. The exact meaning of surface varies according to the measurement method used, but it is between 1 millimetre (0.04 in) and 20 metres (70 ft) below the sea surface. + Sea surface salinity + Is also an Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-22T17:17:30Z + + + + + + + + + + + + The weight of a fish, typically taken when the specimen is still alive or freshly deceased, but before being frozen or further processed. + Wet weight + 2021-06-16T22:53:55Z + + + + + + year and day of measurement + 2019-01-16T00:44:09Z + + + + + + Total number of recruits of age class 8.4. + Age class 8.4 recruits + 2021-07-15T19:36:14Z + + + + + + A fish measurement method in which the length from the hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Post-orbit to fork of tail measurement method + 2021-06-14T21:30:14Z + + + + + + Total number of recruits of age class 5.5. + Age class 5.5 recruits + 2021-07-15T18:57:19Z + + + + + + + + + https://en.wikipedia.org/wiki/Recreational_fishing, accessed 2021-04-02 +https://www.wikidata.org/wiki/Q283534, accessed 2021-04-02 + A fishery in which fishes and other seafood are harvested for pleasure or competition. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000020 + A body of water or other liquid of considerable size contained in a depression on a landmass. + + + + + + Total number of recruits of age class 5.9. + Age class 5.9 recruits + 2021-07-15T18:56:26Z + + + + + + The Alaska Department of Fish and Game defines unique three-digit "Codes for the Commercial Operator's Annual Report" which represent each of the commercially harvested aquatic species. + Alaska Department of Fish and Wildlife species code + ADF&G species code + ADF&G salmon species codes: + +410 salmon, chinook +420 salmon, sockeye +430 salmon, coho +440 salmon, pink +450 salmon, chum + 2021-05-04T19:44:10Z + + + + + + http://purl.dataone.org/odo/ECSO_00001164 + A measure of the saltiness or dissolved salt content of a body of water. + Water salinity measurement type + Salinity is an important factor in determining many aspects of the chemistry of natural waters and of biological processes within it, and is a thermodynamic state variable that, along with temperature and pressure, governs physical characteristics like the density and heat capacity of the water. + 2021-04-22T17:00:09Z + + + + + + A barbed plastic tag which is inserted under the dorsal fin of the fish using a cannula. + Dart tag + If performed correctly, this type of identification can remain in place for at least a year, is used for individual tagging, and is suitable for fish at lest 20cm in length and which live in open environments. With the cannula attached to a special tag applicator, a scale is removed just below the base of the dorsal fin and the tag is attached. The barb on the tag must hook securely into the pterygiophores (the bones that supports the dorsal fin), otherwise the tag will come loose. Most of the tag then hangs outside the fish’s body like a stiff, narrow tube. The tag is colour-coded, pre-printed with relevant text and numbered by the manufacturer according to the requests of the end user. + 2021-05-05T16:43:07Z + + + + + + fish weight +weight of fish +fish mass +mass of fish + Fish weight measurement type + 2021-06-16T22:45:21Z + + + + + + Total number of recruits of age class 8.3. + Age class 8.3 recruits + 2021-07-15T19:36:09Z + + + + + + + + + Modeled salmon abundance + Abundance of salmon estimated from modeling techniques, rather than direct counts, weights, etc. + 2021-04-29T18:39:15Z + + + + + + A fish measurement method in which the length from the middle of the orbit (i.e. eye) to the the posterior-most point where the fin connects with the body is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the posterior-most point where the fin connects with the body. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the posterior-most point where the fin connects with the body. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Mid-orbit to posterior insertion of anal fin measurement method + 2021-06-14T21:17:24Z + + + + + + https://www.adfg.alaska.gov/static/license/fishing/pdfs/coar_fish_codes.pdf, accessed 04May2021 + ADF&G gear codes: + +01 purse seine +02 beach seine +03 drift gillnet +04 set gillnet +05 hand line/jig/troll +07 non-pelagic/bottom trawl +08 fish wheel +10 ring net +11 diving +12 handpicked +13 dip net +14 weir +15 power gurdy troll +17 beam trawl +18 shovel +21 pound +22 dredge +23 hydro/mechanical dredge +25 dinglebar +26 mechanical jigs +27 double otter trawl +34 herring gillnet +37 pair trawl +41 sunken gillnet +47 pelagic/mid-water trawl +61 longline (hook and line) +77 fish ladder/raceway +90 trap +91 pot gear +99 other (please specify) + + + + + + A fish measurement method in which the length from the middle of the orbit (i.e. eye) to the hypural plate is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the hypural plate. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the hypural plate. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + +In the case that hypural plate is not visible, the measurement may be made to some external feature (e.g. the position of the last lateral line scale; end of the fleshy caudal peduncle; midline of a crease that forms when the tail is bent sharply). It is important to note this adjustment in measurement protocol. + + Mid-orbit to hypural plate measurement method + Measurements of specific parts of a fish are sometimes necessary when intact fish are not available. For instance, spawning or dead salmon often have eroded tails (from redd excavation) or enlarged or damaged jaws. When researchers want to compare fish lengths of male spawners versus female spawners or hatchery spawned females versus carcasses, it is a good idea to use this type of length measurement to remove the bias of the eroded tails on female spawners. So length measurements are made from specific parts of the body that are intact, such as the orbit and the hypural plate. The hypural plate is comprised of modified vertebrae that support the rays of the caudal fin and originate from the posterior end of the vertebral column. This measurement is also commonly referred to as MEPS, or mid-eye to posterior scale, noting that researchers typically take the measurement to an external feature when the hypural plate is not visible. + 2021-06-14T21:08:39Z + + + + + + The unique alphanumeric code or marking color(s) of a tagged fish. + Fish tag code or color + 2021-05-04T19:41:34Z + + + + + + Total number of recruits of age class 5.8. + Age class 5.8 recruits + 2021-07-15T18:56:21Z + + + + + + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-22T16:49:49Z + Sea surface temperature + SST +Ocean surface temperature + + + + http://purl.dataone.org/odo/ECSO_00001523 + An aquatic temperature which inheres in water close to the surface of an ocean or sea. The exact meaning of surface varies according to the measurement method used, but it is between 1 millimetre (0.04 in) and 20 metres (70 ft) below the sea surface. + + + + Carlin tag + If performed correctly, this identification type may remain attached for the entire life of the fish, is used for individual tagging, and is most suitable for fish at least 15cm in length and which live in open environments. To attach a Carlin tag, double cannulas are first inserted through the fish at the height of the center of the pterygiophores (the bones that support the dorsal fin). Two stainless steel wires are then pulled through the cannulas and then the cannulas are pulled out of the fish. A small metal plate with an alphanumeric code is atached to the steel wires, which are then twisted tightly against the fish's body to hold the plate in place. + A metal plate with a unique identifying code, which is attached to a fish below the dorsal fin via two stainless steel wires. + 2021-05-05T16:40:41Z + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=fishingsubsistence.main, accessed 2021-04-02 + A fishery in which fishes or other seafood are harvested for noncommercial, customary and traditional uses. These uses include direct personal or family consumption as food, shelter, fuel, clothing, tools, or transportation, for the making and selling of handicraft articles out of nonedible by-products of fish and wildlife resources taken for personal or family consumption, and for the customary trade, barter, or sharing for personal or family consumption. + + + + + + + + + https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-06-14 + A fish measurement method in which the length from the most anterior part of a fish to the tip of the median caudal fin rays (i.e. fork) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior part to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior part to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + year of measurement + 2019-01-14T23:23:43Z + + + + + + Brood tables, also called run reconstructions, utilize annual estimates of the total run (commercial catch plus escapement), and samples of ages, to estimate the number of recruits per age class. These data are useful for salmon biologists to understand salmon productivity and salmon life histories. + run reconstruction + Brood table + 2021-06-16T22:33:58Z + + + + + + Total number of recruits of age class 8.2. + Age class 8.2 recruits + 2021-07-15T19:36:04Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + Natural patterns or unique markings are primarily used for identification of individuals. This type of identification does not involve marking a fish in any way, but rather relies on stable and individual differences in appareance, such as color, patterns, and scars. This method is based on the use of still images or videos taken of individual fish, which are then analyzed manually or using digital image processing. + + + + + + + The number of different species that are represented in a given community, weighted by their abundance. Community species diversity can be calculated in different ways, but consists of two components: species richness and species evenness. + + + + + + + The weight of a specimen's stomach, taken after the stomach has been dissected from the fish and emptied of its contents. + + + + + + https://www.fisheries.noaa.gov/species/pacific-salmon-and-steelhead#overview, accessed 2021-06-01 + Schiewe, MH (2013) Salmon. Encyclopedia of Biodiversity (Second Edition). pg. 522-531. https://doi.org/10.1016/B978-0-12-384719-5.00293-8 + There are five species of Pacific salmon, which occur in the North Pacific waters of the United States and Canada -- Chinook, Chum, Coho, Pink, and Sockeye. All five species are anadromous, meaning that they spawn in freshwater, migrate to the ocean to forage and mature, and return to freshwater to spawn and begin the cycle again. + + + + + + http://purl.dataone.org/odo/ECSO_00001231 + Objective comparative measure of hot or cold of water in a lake. + Lake water temperature + 2021-04-22T16:36:05Z + + + + + + Total number of recruits of age class 8.1. + Age class 8.1 recruits + 2021-07-15T19:35:56Z + + + + + + A static tag, which is attached externally to the body of the fish and visually read or interpreted (as opposed to read with an electronic device e.g. an acoustic tag reader). + External visual tag + 2021-05-05T16:40:28Z + + + + + + A fish measurement method in which the length from the middle of the orbit to the tip of the median caudal fin rays is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + Mid-orbit to fork of tail measurement method + 2021-06-14T20:58:33Z + + + + + + years elapsed + 2019-07-15T23:41:07Z + + + + + + Total number of recruits of age class 5.7. + Age class 5.7 recruits + 2021-07-15T18:56:12Z + + + + + + + Elapsed time, typically expressed in years, (a) since birth or (b) which describes the how long a salmon has spent in a particular environment (e.g. saltwater vs. freshwater). + + + + + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=egg&language=english&sc=is, accessed 2021-06-15 + In fish, the term egg usually refers to female haploid gametes. + + + + + + https://en.wikipedia.org/wiki/Abiotic_component, accessed 2021-04-14 +https://www.wikidata.org/wiki/Q461335, accessed 2021-06-14 + A measurement type taken of some non-living chemical or physical component of the environment. + + + + + + A numeric or alphanumeric code, which represents a particular species and may be recorded in place of a formal scientific or vernacular name. + Species code + [NEEDS ALIGNMENT] + +http://purl.dataone.org/odo/ECSO_00002490 + 2021-05-04T19:41:18Z + + + + + + Dataset type + Class intended to facilitate search by "dataset type" + 2021-06-16T22:33:55Z + + + + + + + Oncorhynchus nerka +O. nerka +"red salmon" @en +"kokanee" @en +"kokanee salmon" @en +"blueback salmon" @en +"blue-back" @en +"Fraser River salmon" @en +"redfish" @en +"sock-eye salmon" @en +"sox" @en + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A small, electronic, sound-emitting device which may be placed inside or attached to a fish and collects information on that fish's physiology, environmentm and/or movement patterns. + + + + + + The number of salmon from a given population that escape the fishery in a year. + Annual escapement count + Need to think more about how to model time over which measurement is taken. E.g. do we want to have separate terms for annual escapement counts vs. daily escapement counts, OR have a predicate which encapsulates the time period over which a measurement occurs, OR something else? + 2021-04-26T23:24:51Z + + + + + + Total number of recruits of age class 0.9. + Age class 0.9 recruits + 2021-07-15T18:49:12Z + + + + + + https://en.wikipedia.org/wiki/Temperature, accessed 2021-04-22 +https://www.wikidata.org/wiki/Q11466, accessed 2021-04-22 + The objective measure of hot or cold of water in a river. + + + + + + estuary name + 2019-05-20T21:33:57Z + + + + + + + + + Beginning of a temporal entity. + + + + + + + + The gathering live or deceased fishes by hand. + Handpicked or carcass collection + 2021-04-01T18:02:25Z + + + + + + A net or mesh basket held open by a hoop which may or may not be on the end of a handle and is used for scopping fish near the surface of the water. + hand net +scoop net + Dip net + 2021-04-01T18:01:59Z + + + + + + + + + Chose not to assert owl:equivalentClass here, because all Steelhead trout are Oncorhynchus mykiss, but not all Oncorhynchus mykiss are considered Steelhead trout. + + + + + + + https://fishbio.com/field-notes/inside-fishbio/spray-on-tan, accessed 05May2021 + This type of identification can remain on a fish from a couple days up to several weeks, and is used for group marking. and is most suitable for fish + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + The use of a DNA sample to identify fish which have known biomarkers. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000015 + A marine water body which is constitutes the majority of an astronomical body's hydrosphere. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + One of the pelvic fins is removed using scissors. + + + + + + Total number of recruits of age class 0.8. + Age class 0.8 recruits + 2021-07-15T18:49:01Z + + + + + + https://nceas.github.io/sasap-training/materials/reproducible_research_in_r_fairbanks/example-brood-table-analysis.html, accessed 2021-06-16 + Brood tables, also called run reconstructions, utilize annual estimates of the total run (commercial catch plus escapement), and samples of ages, to estimate the number of recruits per age class. These data are useful for salmon biologists to understand salmon productivity and salmon life histories. + + + + + + https://en.wikipedia.org/wiki/Taxonomy_(biology), accessed 2021-04-28 + The name of the scientist or scientists who first validly published the scientific name of a particular organism. + + + + + + A seine net operated from the shore. The gear is composed of a bunt (bag or lose netting) and long wings often lengthened with long ropes for towing the seine to the beach. The headrope with floats is on the surface, the footrope is in permanent contact with the bottom and the seine is therefore a barrier which prevent the fish from escaping from the area enclosed by the net + + Beach seine + 2021-04-01T18:01:54Z + + + + + + + + + + https://en.wikipedia.org/wiki/Johann_Julius_Walbaum, accessed 2021-04-26 +https://www.wikidata.org/wiki/Q68096, accessed 2021-04-26 + Johann Julius Walbaum (30 June 1724, Wolfenbüttel, Brunswick-Wolfenbüttel – 21 August 1799, Lübeck) was a German physician, naturalist and fauna taxonomist. + + + + + + Total number of recruits of age class 0.7. + Age class 0.7 recruits + 2021-07-15T18:48:49Z + + + + + + https://fishbio.com/field-notes/inside-fishbio/spray-on-tan, accessed 2021-05-05 +https://en.wikipedia.org/wiki/Bismarck_brown_Y, accessed 2021-05-05 + Tag based on application of a dilution of diazo dye in which fish are immersed and which stains the fins a brown/tan color. + + + + + + milliseconds elapsed + 2019-05-07T21:18:21Z + + + + + + Aquaculture + + 2021-04-02T22:18:14Z + The culturing of fish, shellfish, aquatic plants, and/or other organisms in captivity or under controlled conditions in the near shore environment. + http://vocab.nerc.ac.uk/collection/M13/current/018/ + + Aquatic farming +Aquafarming + In Alaska, the aquaculture industry primarily produces Pacific oysters, littleneck clams, and mussels for commercial food production. + + + + + + + Keta salmon + 2022-03-24T19:58:28Z + + + + + + + A tag which transmits information about a fish via an electronic receiver. + + + + + + + + + + A three-dimensional wire or wood device which is submerged and commonly baited. A pot (or "trap") permits organisms to enter the enclosure, but makes escape extremely difficult or impossible. + trap + Pot + 2021-04-01T18:01:50Z + + + + + + This URI does not appear to dereference to the term. Including this URL, https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C28421, to ensure findability. + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C28421 + + + + + + https://en.wikipedia.org/wiki/Dolly_Varden_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q327067, accessed 2021-06-15 + Salvelinus malma +S. malma +"Dolly Varden" @en + + + + + + http://purl.dataone.org/odo/ECSO_00001104 + The degree of hotness or coldness of a body or environment (corresponding to its molecular activity). + + + + + + Total number of recruits of age class 4.3. + Age class 4.3 recruits + 2021-07-15T18:54:15Z + + + + + + + A regulatory category of Alaskan fishery which is legally defined as, "the taking, fishing for, or possession of finfish, shellfish, or other fishery resources, by Alaska residents for personal use and not for sale or barter, with gill or dip net, seine, fish wheel, long line, or other means defined by the Board of Fisheries." Personal use fisheries may exist only in "nonsubsistence areas" as determined by the state of Alaska (AS 16.05.258(c)). + Personal use fishery + Personal use fishing is open to Alaskan residents only, and you must have a valid resident Sport Fishing License to participate in personal use fisheries. + +The bag, possession, and gear limits in personal use fisheries MAY NOT be added to the bag, possession, and gear limits under sport or subsistence regulations. + +It is unlawful to buy, sell, trade or barter personal use finfish, shellfish, aquatic plants, or their parts. + +Many, but not all, personal use fisheries require a permit issued by the Department of Fish and Game. Personal use fisheries have many different regulations for bag limits, allowable gear, and time and area restrictions. Some personal use fisheries are managed in-season by emergency order, so regulations can change at any time. + 2021-04-02T22:17:54Z + + + + + + river or stream name + 2019-04-25T22:17:53Z + + + + + + Total number of recruits of age class 0.6. + Age class 0.6 recruits + 2021-07-15T18:48:30Z + + + + + + This URI does not appear to dereference to the term. Including this URL, https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C25150, to ensure findability. + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C25150 + + + + + + + + + + https://en.wikipedia.org/wiki/Salmon_escapement, accessed 2021-04-26 +https://www.wikidata.org/wiki/Q23582242, accessed 2021-04-26 + The number of salmon which do not get caught by commercial or recreational fisheries and return to their freshwater spawning habitat. + + + + + + The artificial breeding, hatching, and rearing through the early life stages of animals -- finfish and shellfish in particular. Hatcheries produce larval and juvenile fish, shellfish, and crustaceans, primarily to support the aquaculture industry where they are transferred to on-growing systems, such as fish farms, to reach harvest size. + Hatchery + Oftentimes, hatchery-reared salmon will have their adipose fins removed (i.e. clipped) to mark that they come from a hatchery (versus a wild stock). + The Alaska hatchery program was designed to increase salmon abundance and enhace fisheries, while protecting wild stocks. The program was built in response to depressed commercial fisheries, to meet the needs of the people of the state. + 2021-04-02T20:00:45Z + + + + + + + + + http://calfish.ucdavis.edu/species/?uid=39&ds=698 + Sea-running, i.e. anadromous individuals of Rainbow Trout, are called Steelhead. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This identification type will last the entire life of the fish and is primarily used for group marking, though the fish must be euthanized for reading. Altering the appearance of otoliths may be achieved in a variety of ways, including (a) exposing a fish to variations in water temperature of at least 3 degrees Celsius a number of times to create darker and lighter bands in the otoliths, (b) bathing the fish or eggs in an aqueous solution with fluorescent dye, which is absorbed into the otoliths, or (c) bathing the fish in strontium chloride solution or feeding the fish food that contains the metallic substance strontium. + + + + + + https://www.adfg.alaska.gov/fedaidpdfs/FRED.132.pdf, accessed 2021-04-15 + A method which is used to approximate the age of a fish and which generally involves extracting the otoliths from a fish, then counting the number of annuli (i.e. year marks). + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This type of identification is usually visible for one year on salmon, is primarily used for group marking, and is suitable for fish that weigh at least 20g. An ink solution (often Alcian blue dissolved in distilled water) is typically injected under the skin using a syringe with a cannula. Marking a fish using the "square dot system" with up to 3x3 dots is common. Unlike VIE, tattoos do not require transparent skin to be visible. However, in salmon, the tattoo should be placed in areas in front of the pelvic fins, under the pectoral fins and/or behind the anal fins to enable reading during spawning, when the fish's natural pigmentation may cover up the tattoo. + + + + + + reproductiveStrategyOf + 2021-06-01T20:30:32Z + + + + + + Total number of recruits of age class 4.2. + Age class 4.2 recruits + 2021-07-15T18:54:08Z + + + + + + Total number of recruits of age class 1.9. + Age class 1.9 recruits + 2021-07-15T18:48:13Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000033 + A body of water, usually of smaller size than a lake. + Pond + 2021-04-07T18:47:40Z + + + + + + + A mark or tag which is placed beneath the skin of a fish. + + + + + + http://purl.dataone.org/odo/ECSO_00001231 + Objective comparative measure of hot or cold of water in a lake. + + + + + + + + + + http://purl.obolibrary.org/obo/ENVO_01000618 + A water body in which the accumulated water, in its totality, is flowing. + Lotic water body + 2021-04-07T18:44:17Z + + + + + + A fishery in which fishes or other seafood are harvested for noncommercial, customary and traditional uses. These uses include direct personal or family consumption as food, shelter, fuel, clothing, tools, or transportation, for the making and selling of handicraft articles out of nonedible by-products of fish and wildlife resources taken for personal or family consumption, and for the customary trade, barter, or sharing for personal or family consumption. + artisinal fishery +traditional fishery + Subsistence fishery + In Alaska, subsistence fisheries may not operate in "nonsubsistence areas" as designated by the state (AS 16.05.258(c)). + 2021-04-02T20:00:36Z + + + + + + signal quality + 2019-03-26T17:39:32Z + + + + + + + + + + + + Oncorhynchus keta + + + + + + + 2021-04-30T17:44:51Z + + + + + hasReproductiveStrategy + 2021-06-01T20:27:15Z + + + + + + + + Total number of recruits of age class 4.1. + Age class 4.1 recruits + 2021-07-15T18:54:02Z + + + + + + http://purl.obolibrary.org/obo/ENVO_01000617 + A water body in which the accumulated water, in its totality, has very little to no directed flow. + Lentic water body + 2021-04-07T18:47:13Z + + + + + + Total number of recruits of age class 1.8. + Age class 1.8 recruits + 2021-07-15T18:48:00Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000495 + A stream or river which flows into another river (a parent river) or body of water but which may not flow directly into the sea. + affluent + Tributary + 2021-04-07T18:40:15Z + + + + + + + The alteration of a physical bodily feature of a fish, either internally or externally, for identification purposes. + + + + + + "POHL" is an acronym used by Alaska Department of Fish & Game (ADF&G) + POHL + + + + + + https://fishbio.com/field-notes/fish-monitoring/pit-tag-the-full-story, accessed 05May2021 +https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 05May2021 + A small, passive (i.e. does not actively send out a signal and does not require a battery) radio transponder tag which, when in range, is activated by a signal emitted from a tag reader. The tag then emits a unique identification code back to the reader. + + + + + + https://en.wikipedia.org/wiki/Oxygen_saturation, accessed 22April2021 +https://www.wikidata.org/wiki/Q6294669, accessed 22April2021 + Dissolved oxygen saturation can be measured with a dissolved oxygen probe such as an oxygen sensor or an optode in liquid media, usually water. The standard unit of oxygen saturation is percent (%). + + + + + + + 2021-04-30T17:44:44Z + + Oncorhynchus gorbuscha + + + + + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + The appearance of the otoliths (located in the inner ear of the fish) are changed. + + + + + + hasMigratoryPattern + 2021-06-01T20:26:57Z + + + + + + + Total number of recruits of age class 3.9. + Age class 3.9 recruits + 2021-07-15T18:52:44Z + + + + + + Total number of recruits of age class 1.7. + Age class 1.7 recruits + 2021-07-15T18:47:48Z + + + + + + https://www.merriam-webster.com/dictionary/grilse + a young Atlantic salmon returning to its native river to spawn for the first time after one winter at sea + + + + + + A fishery in which fishes and other seafood are harvested for pleasure or competition. + sport fishery + Recreational (sport) fishery + 2021-04-02T20:00:25Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000023 + A watercourse which is linear and flows across the solid portion of a planetary surface. + Stream + 2021-04-07T18:40:11Z + + + + + + Young fish, mostly similar in form to adult but not yet sexually mature (Hubbs, 1943). In some cases refers to a stage unlike the adult in appearance. + Juvenile + 2021-04-29T19:11:32Z + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=wildlifenews.view_article&articles_id=693, accessed 2021-06-15 + Oftentimes, hatchery-reared salmon will have their adipose fins removed (i.e. clipped) to mark that they come from a hatchery (versus a wild stock). + + + + + + Total number of recruits of age class 6.5. + Age class 6.5 recruits + 2021-07-15T18:58:05Z + + + + + + A classification of fishes which spawn in marine habitats, migrate to freshwater areas to forage and mature, then return to marine habitats to spawn. + Catadromous + 2021-06-01T20:11:04Z + + + + + + https://en.wikipedia.org/wiki/Gigging, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q4412590, accessed 2021-04-01 + A multi-pronged spear, typically ranging in length from 8 to 14 feet, which is used to spear (or "gig") fishes for harvest. + + + + + + Total number of recruits of age class 3.8. + Age class 3.8 recruits + 2021-07-15T18:52:37Z + + + + + + Total number of recruits of age class 1.6. + Age class 1.6 recruits + 2021-07-15T18:47:36Z + + + + + + Artisanal fishery + http://www.oceansatlas.org/subtopic/en/c/1303/ + Typically traditional fisheries involving fishing households (as opposed to commercial companies), using relatively small amount of capital, relatively small fishing vessels, making short fishing trips, close to shore, mainly for local consumption. In practice, definition varies between countries, e.g. from hand-collection on the beach or a one-person canoe in poor developing countries, to more than 20 m. trawlers, seiners, or long-liners over 20m in developed countries. Artisanal fisheries can be subsistence or commercial fisheries, providing for local consumption or export. Sometimes referred to as small-scale fisheries In general, though by no means always, using relatively low level technology. Artisanal and industrial fisheries frequently target the same resources that may give rise to conflict. + 2021-07-22T05:58:02Z + + + + + + Indigenous names for salmon can be found by exploring each SASAP region's page on the State of Alaska's Salmon and People website (for example, see the Arctic Region here: https://alaskasalmonandpeople.org/region/arctic/) + https://alaskasalmonandpeople.org/regions/, accessed 2021-04-16 + "Sikayujak" @ipk +"Ggaal" [Denaakk'e, Koyukon Athabaskan] +"Gath" [Benhti Kenaga, Lower Tanana] +"Luk Choo" @gwi +"Kiagtaq" @ypk +"Taryaqvak" @ypk +"Aciirturtet" @ypk +"sumgax̂" @ale [Unangam tunuu variant] +"chaguchax̂" @ale [Unangam tunuu variant] +"chavichax̂" @ale [Unangam tunuu variant] +"Aamasuuk" [Alutiiq/Sugpiaq] +"Liliksak" [Alutiiq/Sugpiaq] +"Luk'ece'e" [Ahtna] +"Kentsinai'i" [Ahtna] +"luq'aka'a" [Kenai Dena'ina] +"nudlaghi" [Kenai Dena'ina] +"te'ya'lee" @eya +"Yee" @tsi @tli +"t'á" @tsi @tli + + + + + + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A small, electronic, sound-emitting device which is placed inside a fish and collects information on that fish's physiology and/or movement patterns. + + + + + + hour of day + hour of measurement time + hour of day + 2019-01-14T22:40:52Z + + + + + + https://www.adfg.alaska.gov/static/license/fishing/pdfs/coar_fish_codes.pdf, accessed 04May2021 + ADF&G salmon species codes: + +410 salmon, chinook +420 salmon, sockeye +430 salmon, coho +440 salmon, pink +450 salmon, chum + + + + + + https://en.wikipedia.org/wiki/Seawater +https://www.wikidata.org/wiki/Q184395 + On average, seawater in the world's oceans has a salinity of about 3.5% (35 g/l, 35 ppt, 599 mM). + + + + + + + Fishing gear which is used to collect fish and can be operated by hand by one or few people. Hand collection methods may also include the collection of fish without the aid of any gear (i.e. gathering live fish or carcasses using only one's hands). + + + + + + http://purl.dataone.org/odo/ECSO_00001523 + An aquatic temperature which inheres in water close to the surface of an ocean or sea. The exact meaning of surface varies according to the measurement method used, but it is between 1 millimetre (0.04 in) and 20 metres (70 ft) below the sea surface. + + + + + + Whole fish weight + 2021-06-23T18:46:24Z + + + + + + https://en.wikipedia.org/wiki/Fishing_weir, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q1417573, accessed 2021-04-01 + An obstruction placed in tidal waters, or wholly or partially across a river, to direct the passage of, or trap fish. + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=fishingaquaticfarming.programinfo, accessed 2021-04-02 + In Alaska, the aquaculture industry primarily produces Pacific oysters, littleneck clams, and mussels for commercial food production. + + + + + + A system which uses electromagnetic fields to automatically identify and track tags attached to objects. + Radio Frequency Identification + RFID + An RFID system consists of a tiny transponder, a radio receiver, and an transmitter. When triggered by an electromagnetic interrogation pulse from a nearby FRID reader device, the tag transmits digital data, usually an identifying inventory number, back to the reader. + 2021-05-05T16:47:51Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000137 + An opening of the sea into the land. + Coastal inlet + 2021-04-15T18:39:14Z + + + + + + + 2021-05-27T19:40:11Z + Some populations of the coastal cutthroat trout (O. c. clarkii) are semi-anadromous. (source: https://en.wikipedia.org/wiki/Cutthroat_trout) + + + Oncorhynchus clarkii + + + + + + + Sexual dimorphic characteristic + A method that uses the presence or other features of a trait ("characteristic") of an organism to differentiate or assign gender + 2021-04-28T00:02:33Z + + + + + + https://doi.org/10.1577/M02-143, accessed 2021-05-05 + Though not well studied, this type of identification may last up to 3 years post-immersion, and is used for group marking. + + + + + + longitude coordinate + Longitude (/ˈlɒndʒɪtjuːd/, AU and UK also /ˈlɒŋɡɪ-/)[1][2] is a geographic coordinate that specifies the east–west position of a point on the Earth's surface, or the surface of a celestial body. It is an angular measurement, usually expressed in degrees and denoted by the Greek letter lambda (λ). Meridians (lines running from pole to pole) connect points with the same longitude. The prime meridian, which passes near the Royal Observatory, Greenwich, England, is defined as 0° longitude by convention. Positive longitudes are east of the prime meridian, and negative ones are west. + 2019-01-17T18:58:37Z + + + + + + month of year + 2019-01-14T22:26:35Z + + + + + + + + + + A quality of an ecological community that reflects how close in abundance all species in a community are. + + + + + + + + + + http://www.fao.org/fishery/geartype/202/en, accessed 01April2021 + A seine net operated from the shore. The gear is composed of a bunt (bag or lose netting) and long wings often lengthened with long ropes for towing the seine to the beach. The headrope with floats is on the surface, the footrope is in permanent contact with the bottom and the seine is therefore a barrier which prevent the fish from escaping from the area enclosed by the net + + + + + + Project name + The label, acronym, or other preferred way to refer to a Project + 2021-06-23T18:22:30Z + + + + + http://purl.obolibrary.org/obo/ENVO_00000475 + An opening of the sea into the land, or of a lake into its shore. + Inlet + 2021-04-15T18:37:33Z + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=fry&language=english&sc=is, accessed 2021-04-21 + A young fish at the post-larval stage. May include all fish stages from hatching to fingerling. An advanced fry is any young fish from the start of exogenous feeding after the yolk is absorbed while a sac fry is from hatching to yolk sac absorption. In Salmonidae the stage from end of dependence on the yolk sac as the primary source of nutrition to dispersal from the redd. + + + + + + 2021-04-26T20:19:15Z + The class which contains all instances of Oncorhynchus tshawytscha. + + Oncorhynchus tshawytscha (i.e. Chinook salmon) is the largest of the five species of Pacific salmon. + +Physical Description: The Chinook is blue-green, red, or purple on the back and top of the head, with silvery sides and white ventral surfaces. It has black spots on its tail and the upper half of its body. Although spots are seen on the tail in pink salmon, and silver on the tail in coho and chum salmon, Chinook are unique among the Pacific salmon in combining black spots and silver on the tail. Another distinctive feature is a black gum line that is present in both salt and freshwater. Adult fish range in size from 24 to 36 in (61 to 91 cm), but may be up to 58 in (150 cm) in length; they average 10 to 50 lb (4.5 to 22.7 kg), but may reach 130 lb (59 kg). The meat can be either pink or white in color, depending on what the salmon have been feeding on. + +Range: Chinook are anadromous fish native to the North Pacific Ocean and the river systems of western North America, ranging from California to Alaska, as well as Asian rivers ranging from northern Japan to the Palyavaam River in the Arctic northeast Siberia. They have been introduced to other parts of the world, including New Zealand, thriving in Lake Michigan Great Lakes of North America and Michigan's western rivers, and Patagonia. + Oncorhynchus tshawytscha + NCBI:txid74940 +ITIS: 161980 (https://itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161980#null) +GBIF: 5204024 (https://www.gbif.org/species/5204024) +EOL: 46563139 (https://eol.org/pages/46563139, currently produces and error 505) +COL: 49JFR (https://www.catalogueoflife.org/data/taxon/49JFR) +Wikidata: Q833503 (https://www.wikidata.org/wiki/Q833503) + + + + O. tshawytscha + + + https://en.wikipedia.org/wiki/Commercial_fishing, accessed 2021-04-02 +https://www.wikidata.org/wiki/Q11202642, accessed 2021-04-02 + A fishery in which fishes and other seafood are harvested for commercial profit, mostly from wild fisheries. + + + + + + Fishery type + The Food and Agriculture Organization of the United Nations (FAO) defines a fishery as "...an activity leading to harvesting of fish. It may involve capture of wild fish or raising of fish through aquaculture." + 2021-04-01T17:33:14Z + + + + + Hermaphrodite + Used to designate that some individual or individuals in a group of organisms possessed functional qualities of more than one gender, simultaneously or sequentially. + 2021-04-27T23:59:24Z + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=juvenile&language=english&sc=is, accessed 2021-06-15 + Young fish, mostly similar in form to adult but not yet sexually mature (Hubbs, 1943). In some cases refers to a stage unlike the adult in appearance. + + + + + + A numeric value assigned to a scale gum card. + Gum card number + Gum cards are used to mount and label the identity of sampled fish scales. + 2021-06-23T17:34:31Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A barbed plastic tag which is inserted under the dorsal fin of the fish using a cannula. + + + + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + When done correctly, this identification type will remain visible for the entire lifetime of the fish and can be used for group or individual marking. Neon or fluorescent colors are often used, and best placement is in light areas and fin rays, though even semi-transparent and transparent tissue may be suitable for easy visual reading. + + + + + + + + + A numeric or alphanumeric code which represents potential sources of error in determining the age of a fish specimen. + Age error code + 2021-06-23T17:53:09Z + + + + + + An identifier which represents a region or location in and is used in place of the full name. + Region or location code + 2021-05-12T17:37:57Z + + + + + + + + 2021-04-26T20:19:04Z + The class which contains all instances of Oncorhynchus nerka. + Oncorhynchus nerka (i.e. sockeye salmon) is one of the five species of Pacific salmon. + +Physical Description: The sockeye salmon is sometimes called red or blueback salmon, due to its color. Sockeye are blue tinged with silver in color while living in the ocean. When they return to spawning grounds, their bodies become red and their heads turn green. Sockeye can be anywhere from 60 to 84 cm (2 ft 0 in–2 ft 9 in) in length and weigh from 2.3 to 7 kg (5–15 lb). Two distinguishing features are their long, serrated gill rakers that range from 30 to 40 in number, and their lack of a spot on their tail or back. + +Range: Sockeye salmon range as far south as the Columbia River in the eastern Pacific (although individuals have been spotted as far south as the 10 Mile River on the Mendocino Coast of California) and in northern Hokkaidō Island in Japan in the western Pacific. They range as far north as the Bathurst Inlet in the Canadian Arctic in the east and the Anadyr River in Siberia in the west. The farthest inland sockeye salmon travel is to Redfish Lake, Idaho, over 1,400 km (900 mi) from the ocean and 2,000 m (6,500 ft) in elevation. In the United States, populations of sockeye salmon have been extirpated from Idaho and Oregon. + NCBI:txid8023 +ITIS: 161979 (https://itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161979#null) +GBIF: 5204039 (https://www.gbif.org/species/5204039) +EOL: 46563140 (https://eol.org/pages/46563140, currently produces an error 505) +COL: 49JFH (https://www.catalogueoflife.org/data/taxon/49JFH) +Wikidata: Q44064 (https://www.wikidata.org/wiki/Q44064) + + + Oncorhynchus nerka + O. nerka + + + hasADF&GCode + Alaska Department of Fish and Game (ADF&G) uses a list of numeric codes to describe (a) commercially-harvested aquatic species, (b) gear used for harvest, (c) method of catch processing, and (d) delivery form and product type. + 2021-05-27T18:00:35Z + + + + + + + Genetic sexing + Determination of fish gender based on genetic evidence rather than morphological evidence alone + +This may be a good resource: https://www.fws.gov/r7/fisheries/genetics/pdf/09_rf_2004_OlsenMillerHarperNaglerVanHattenWhittonWenburg_OS.pdf + 2021-04-27T23:57:56Z + + + + + + https://doi.org/10.1186/2050-3385-1-18, accessed 2021-05-05 + A scar made on the dermal tissue using liquid nitrogen. + + + + + + + + + https://en.wikipedia.org/wiki/Alkalinity, accessed 2021-04-22 +https://www.wikidata.org/wiki/Q432016, accessed 2021-04-22 + A measure of the quantitative capacity of an aqueous solution to neutralize an acid. + + + + + + latitude second component + 2019-01-28T21:37:49Z + + + + + + http://calfish.ucdavis.edu/species/?uid=39&ds=698 + Sea-running, i.e. anadromous individuals of Rainbow Trout are called Steelhead. + + + + + + 2021-05-11T17:26:46Z + + + Steelhead trout + + + + Oncorhynchus mykiss irideus +Oncorhynchus m. irideus +O. m. irideus +"steelhead" @en + 540 + + + + + + The total number of recruits which successfully return to spawn in freshwater habitats for a given brood year. + + + + + + "hasDbXref' is used here to indicate the equivalence of this Class with its usage in a Darwin Core context + http://rs.tdwg.org/dwc/terms/Occurrence + + + + + + Measurement types which pertain to any product of the condensation of atmospheric water vapor that falls under gravity. + Precipitation measurement type + 2021-04-14T22:31:36Z + + + + + + Pacific salmon + There are five species of Pacific salmon, which occur in the North Pacific waters of the United States and Canada -- Chinook, Chum, Coho, Pink, and Sockeye. All five species are anadromous, meaning that they spawn in freshwater, migrate to the ocean to forage and mature, and return to freshwater to spawn and begin the cycle again. + 2021-05-11T17:26:55Z + + + + + + + 2021-04-26T20:18:52Z + O. kisutch + NCBI:txid8019 +ITIS: 161977 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161977#null) +GBIF: 5204034 (https://www.gbif.org/species/5204034) +EOL: 46563137 (https://eol.org/pages/46563137) +COL: 49JF8 (https://www.catalogueoflife.org/data/taxon/49JF8) +Wikidata: Q934874 (https://www.wikidata.org/wiki/Q934874) + + Oncorhynchus kisutch (i.e. coho salmon) is one of the five species of Pacific salmon. + +Physical Description: During their ocean phase, coho salmon have silver sides and dark-blue backs. During their spawning phase, their jaws and teeth become hooked. After entering fresh water, they develop bright-red sides, bluish-green heads and backs, dark bellies and dark spots on their backs. Sexually maturing fish develop a light-pink or rose shading along the belly, and the males may show a slight arching of the back. Mature adults have a pronounced red skin color with darker backs and average 28 inches (71 cm) and 7 to 11 pounds (3.2 to 5.0 kg), occasionally reaching up to 36 pounds (16 kg). They also develop a large kype (hooked beak) during spawning. Mature females may be darker than males, with both showing a pronounced hook on the nose. + +Range: The traditional range of the coho salmon runs along both sides of the North Pacific Ocean, from Hokkaidō, Japan and eastern Russia, around the Bering Sea to mainland Alaska, and south to Monterey Bay, California. Coho salmon have also been introduced in all the Great Lakes, as well as many landlocked reservoirs throughout the United States. A number of specimens, (more than 20), were caught in waters surrounding Denmark and Norway in 2017. Their source is currently unknown, but the salmon species is farmed at several locations in Europe, making it probable that the animal has slipped the net at such a farm. + + The class which contains all instances of Oncorhynchus kisutch. + Oncorhynchus kisutch + + + + Richardson, 1836 + Sir John Richardson (5 ovember 1787 - 5 June 1865) was a Scottish naval surgeon, naturalist and arctic explorer. + 2021-05-27T00:09:04Z + + + + + + Internal sex determination method + Determination of fish gender based on internal examination, e.g. examination of gonads + 2021-04-27T23:57:03Z + + + + + + A type of fishing gear which uses direct current electricity flowing between a submerged cathod and anode to cause galvanotaxis, or an uncontrolled muscular convulsion, which affects the movement of the fish such that it swims towards the anode, where it is then collected. + Electrofishing + 2021-04-01T18:02:48Z + + + + + + The measurement from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). + SL + + Standard length + 2021-03-31T18:21:24Z + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-27 + The number of annuli on a given otolith. + + + + + + cruise name + 2019-03-15T23:48:23Z + + + + + + Oncorhynchus gorbuscha + Oncorhynchus gorbuscha (i.e. pink salmon) is the smallest and most abundant of the five species of Pacific salmon. + +Physical Description: In the ocean, pink salmon are bright silver fish. After returning to their spawning streams, their coloring changes to pale grey on the back with yellowish-white belly (although some turn an overall dull green color). As with all salmon, in addition to the dorsal fin, they also have an adipose fin. The fish is characterized by a white mouth with black gums, no teeth on the tongue, large oval-shaped black spots on the back, a v-shaped tail, and an anal fin with 13-17 soft rays. During their spawning migration, males develop a pronounced humped back, hence their nickname "humpies". Pink salmon average 4.8 pounds (2.2 kg) in weight. The maximum recorded size was 30 inches (76 cm) and 15 pounds (6.8 kg). + +Range: The native range of the species is in the Pacific and Arctic coastal waters and rivers, from the Sacramento River in northern California to the Mackenzie River in Canada; and in the west from the Lena River in Siberia to Korea and Honshu in Japan. In North America pink salmon spawn from the Mackenzie River in the Arctic to as far south as tributaries of Puget Sound, Washington, although they were also reported in the San Lorenzo River near Santa Cruz, California in 1915 and the Sacramento River in northern California in the 1950s. In 2013 a new record for the southernmost extent of spawning pink salmon was published for the Salinas River. In the fall of 2017 a dozen pink salmon were counted in Lagunitas Creek about 25 miles (40 km) north of San Francisco, California. + O. gorbuscha + + 2021-04-26T20:17:52Z + + The class which contains all instances of Oncorhynchus gorbuscha. + + + NCBI:txid8017 +ITIS: 161975 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161975#null) +GBIF: 5204037 (https://www.gbif.org/species/5204037) +EOL: 46563135 (https://eol.org/pages/46563135) +COL: 74N5S (https://www.catalogueoflife.org/data/taxon/74N5S) +Wikidata: Q673380 (https://www.wikidata.org/wiki/Q673380) + + + latitude minute component + 2019-01-17T19:36:39Z + + + + + + https://www.fisheries.noaa.gov/national/bycatch/fishing-gear-gillnets + A gillnet which is attached to poles fixed in the substrate or an anchor system to prevent movement of the net. + + + + + + + The removal of a portion or entirety of a fin or the maxilla of a fish, for identification purposes. + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=alevin&language=english&sc=is, accessed 2021-04-21 + Larval salmon that have hatched but have not yet completely absorbed their yolk sacs and usually have not yet emerged from the gravel. + + + + + + The class which contains all instances of Oncorhynchus keta. + + + + Oncorhynchus keta (i.e. chum salmon) is one of the five species of Pacific salmon. + +Physical Description: The body of the chum salmon is deeper than most salmonid species. In common with other species found in the Pacific, the anal fin has 12 to 20 rays, compared with a maximum of 12 in European species. Chum have an ocean coloration of silvery blue green with some indistinct spotting in a darker shade, and a rather paler belly. When they move into fresh water the color changes to dark olive green and the belly color deepens. When adults are near spawning, they have purple blotchy streaks near the caudal peduncle, darker towards the tail. Spawning males typically grow an elongated snout or kype, their lower fins become tipped with white and they have enlarged teeth. Some researchers speculate these characteristics are used to compete for mates. + +Range: Chum salmon have the largest natural range of any Pacific salmon, and undergo the longest migrations within the genus Oncorhynchus, far up the Yukon River and deep into the Amur River basin in Asia. In lesser numbers they migrate thousands of kilometres up the Mackenzie River. Chum are found around the north Pacific, in the waters of Korea, Japan, and the Okhotsk and Bering seas (Kamchatka, Chukotka, Kuril Islands, Sakhalin, Khabarovsk Krai, Primorsky Krai), British Columbia in Canada, and from Alaska to California in the United States. In the Arctic Ocean they are found in limited numbers from the Laptev Sea to the Beaufort Sea. In North America chum salmon spawn from the Mackenzie River in the Arctic to as far south as Tillamook Bay, Oregon, although they were also reported in the San Lorenzo River near Santa Cruz, California in 1915 and the Sacramento River in northern California in the 1950s. In fall 2017 a half dozen chum salmon were counted in Lagunitas Creek about 25 miles (40 km) north of San Francisco, California. + 2021-04-26T20:18:47Z + NCBI:txid8018 +ITIS: 161976 (https://itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161976#null) +GBIF: 5204014 (https://www.gbif.org/species/5204014) +EOL: 46563136 (https://eol.org/pages/46563136) +COL: 49JF6 (https://www.catalogueoflife.org/data/taxon/49JF6) +Wikidata: Q475211 (https://www.wikidata.org/wiki/Q475211) + O. keta + + + Oncorhynchus keta + + + http://www.adfg.alaska.gov/index.cfm%3Fadfg=dollyvarden.main + Some Dolly Varden individuals are anadromous + + + + + + A fish length measurement of the entire length of a fish's body, taken from the most anterior part of the fish to the tip of the longest caudal fin rays. + TL + + Total length + 2021-03-31T18:21:18Z + + + + + + + + + + + 2021-05-27T00:08:33Z + + + The class which contains all instances of Oncorhynchus clarkii. + Oncorhynchus clarkii (i.e. cutthroat trout) is a species of Pacific trout. + +Physical Description: Throughout their native and introduced ranges, cutthroat trout vary widely in size, coloration and habitat selection. Their coloration can range from golden to gray to green on the back. Cutthroat trout can generally be distinguished from rainbow trout by the presence of basibranchial teeth at the base of tongue and a maxillary that extends beyond the posterior edge of the eye. Depending on subspecies, strain and habitat, most have distinctive red, pink, or orange linear marks along the underside of their mandibles in the lower folds of the gill plates. + +At maturity, different populations and subspecies of cutthroat trout can range from 6 to 40 inches (15 to 102 cm) in length, depending on habitat and food availability. Sea-run forms of coastal cutthroat trout average 2 to 5 pounds (0.9 to 2.3 kg). The length and weights of mature inland forms vary widely depending on their particular environment and availability of food. Stream-resident fish are much smaller, 0.4 to 3.2 ounces (11 to 91 g), while lacustrine populations have attained weights ranging from 12 to 17 lb (5.4 to 7.7 kg) in ideal conditions. The largest cutthroat trout subspecies is the Lahontan cutthroat trout (O. c. henshawi). These fish average 8 to 9 in (20 to 23 cm) in small streams and 8 to 22 in (20 to 56 cm) in larger rivers and lakes. In ideal environments, the Lahontan cutthroat trout attains typical weights of 0.25 to 8 lb (0.11 to 3.63 kg). The world record cutthroat trout is a Lahontan at 39 in (99 cm) and 41 lb (19 kg). + +Range: Cutthroat trout are native to western North America and have evolved through geographic isolation into 14 subspecies, each native to a different major drainage basin. Native cutthroat trout species are found along the Pacific Northwest coast from Alaska through British Columbia into northern California, in the Cascade Range, the Great Basin and throughout the Rocky Mountains including southern Alberta. Some coastal populations of the coastal cutthroat trout (O. c. clarkii) are semianadromous, spending a few months in marine environments to feed as adults and returning to fresh water from fall through early spring to feed on insects and spawn. Cutthroat trout have the second-largest historic native range of North American trout; the lake trout (Salvelinus namaycush) having the largest. Ranges of some subspecies, particularly the westslope cutthroat trout (O. c. lewisi), have been reduced to less than 10 percent of their historic range due to habitat loss and introduction of non-native species. + +Although members of Oncorhynchus, the Pacific trout/salmon species, three subspecies—the westslope (O. c. lewisi), the greenback (O. c. stomias) and Yellowstone cutthroat trout (O. c. bouvierii)—evolved populations east of the Continental Divide in the upper Missouri River basin, upper Arkansas and Platte River basins and upper Yellowstone River basin, each which drain into the Atlantic basin via the Mississippi River. Scientists believe that the climatic and geologic conditions 3-5 million years ago allowed cutthroat trout from the Snake River to migrate over the divide into the Yellowstone plateau via Two Ocean Pass. There is also evidence that Yellowstone Lake once drained south into the Snake River drainage. Evidence suggests that the westslope cutthroat trout was able to establish populations east of the divide via Summit Lake at Marias Pass which at one time connected the Flathead River drainage with the upper Missouri River drainage. Scientists speculate that there are several mountain passes associated with the headwaters of the Colorado River drainage and Arkansas/Platte River drainages that would have allowed migration of cutthroat trout east of the divide. + +Cutthroat trout have been introduced into non-native waters outside their historic native range, but not to the extent of the rainbow trout (O. mykiss). Within the native range of the Yellowstone cutthroat trout, U.S. Fisheries Bureau and National Park Service authorities introduced Yellowstone cutthroat trout into many fishless lakes in Yellowstone National Park. Cutthroat trout were introduced into Lake Michigan tributaries in the 1890s and sporadically in the early 20th century, but never established wild populations. A population of Yellowstone cutthroat trout purportedly has been established in Lake Huron. Although cutthroat trout are not native to Arizona, they are routinely introduced by the Arizona Game and Fish Department into high mountain lakes in the White Mountains in the northeastern region of that state. + NCBI:txid30962 +ITIS: 161983 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161983#null) +GBIF: 5711980 (https://www.gbif.org/species/5711980) +EOL: 212910 (https://eol.org/pages/212910) +COL: 6SN65 (https://www.catalogueoflife.org/data/taxon/6SN65) +Wikidata: Q2717060 (https://www.wikidata.org/wiki/Q2717060) + O. clarkii + Oncorhynchus clarkii + + + + External sex determination method + Sex determined on basis of organism's external morphology + 2021-04-27T23:56:52Z + + + + + + https://www.adfg.alaska.gov/static/license/fishing/pdfs/coar_fish_codes.pdf, accessed 04May2021 + The Alaska Department of Fish and Game defines unique three-digit "Codes for the Commercial Operator's Annual Report" which represent each of the commercially harvested aquatic species. + + + + + + + Oncorhynchus kisutch +O. kisutch +"silver salmon" @en +"silvers" @en + "Saanlaaghe" [Denaakk'e, Koyukon Athabaskan] +"Khwyhts'en'" [Benhti Kenaga, Lower Tanana] +"Shii" @gwi +"Caayuryaq" @ypk +"Qakiiyaq" @ypk +"Qavlunaq" @ypk +"Uqurliq" @ypk +"Qakiidax̂: @ale [Unangam tunuu variant] +"Qakiiyaq" [Alutiiq/Sugpiaq] +"ta'ay" @eyk +"ÜÜx" @tsi @tli +"L'ook" @tsi @tli + Coho salmon + 2021-04-16T18:11:22Z + + + + + + https://en.wikipedia.org/wiki/Standard_weight_in_fish, accessed 2021-06-16 +https://www.wikidata.org/wiki/Q7598325, accessed 2021-06-16 + The typical or expected weight at a given total length for a specific species of fish. Most standard weight equations are for freshwater fish species. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A metal plate with a unique identifying code, which is attached to a fish below the dorsal fin via two stainless steel wires. + + + + + + A large wall of netting deployed around an entire area or school of fish. The seine has floats along the top line with a lead line threaded through rings along the bottom. Once a school of fish is located, a skiff encircles the school with the net. The lead line is then pulled in, "pursing" the net closed on the bottom, preventing fish from escaping by swimming downward. The catch is harvested by either hauling the net aboard or bringing it alongside the vessel. + + Purse seine + 2021-04-01T18:02:44Z + + + + + + https://en.wikipedia.org/wiki/Oxygen_saturation, accessed 22April2021 +https://www.wikidata.org/wiki/Q6294669, accessed 22April2021 + A relative measure of the concentration of oxygen that is dissolved or carried in a given medium as a proportion of the maximal concentration that can be dissolved in that medium. + + + + + + Salvelinus spp. + Salvelinus is a genus of salmonid fish often called char or charr; some species are called "trout". Salvelinus is a member of the subfamily Salmoninae within the family Salmonidae. + 2021-05-27T00:07:24Z + + + + + + latitude and longitude coordinates + 2019-01-29T00:50:47Z + + + + + + + http://courses.washington.edu/fish450/Lecture%20PDFs/Salmon_age_and_size_at_maturity.pdf, accessed 2021-04-06 + The sum of freshwater and marine annuli plus one to account for time spent in the gravel before hatching. + + + + + + https://arcos.disl.org/main/whatisDO#:~:text=Dissolved%20Oxygen%20is%20the%20amount,can%20affect%20dissolved%20oxygen%20levels, accessed 2021-04-22 + The amount of gaseous oxygen (O2) dissolved in water. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + There are four main methods for collecting tissue samples for DNA sequencing: (1) collecting a fin sample, (2) swabbing the mucus layer of the fish, (3) collecting a scale sample, and (4) blood sampling. Genetic identification can provide better answers to some questions that are also answered through typical fish marking and tagging, such as effective population size, whether populations differ and the degree of inbreeding. However, genetic identification cannot answer questions about, for example migration patterns, movement in the water and growth. + + + + + + https://www.fws.gov/guidance/sites/default/files/documents/Calcein_%28SE%20Mark%29_Study_Protocol.pdf, accessed 2021-05-05 + SE-MARK + + + + + + + Oncorhynchus nerka +O. nerka +"red salmon" @en +"kokanee" @en +"kokanee salmon" @en +"blueback salmon" @en +"blue-back" @en +"Fraser River salmon" @en +"redfish" @en +"sock-eye salmon" @en +"sox" @en + "Cayak" @ypk +"Sayak" @ypk +"Niklliq" [Alutiiq/Sugpiaq] +"Nulaeggi" [Ahtna] +"Sesluugge"' [Ahtna] +"Natael luugge'" [Ahtna] +"k'q'uya" [Kenai Dena'ina] +"tahi'id" @eyk +"cha'ch" @eyk +"Misoo" @tsi @tli +"g̲aat" @tsi @tli + Sockeye salmon + 2021-04-16T18:11:02Z + + + + + + + + Salvelinus malma (i.e. the dolly varden trout) is a species of Pacific trout, belonging to the genus Salvelinus of true chars. + +Physical Description: The back and sides are olive green or muddy gray, shading to white on the belly. The body has scattered pale yellow or pinkish-yellow spots. There are no black spots or wavy lines on the body or fins. Small red spots are present on the lower sides. These are frequently indistinct. The fins are plain and unmarked except for a few light spots on the base of the caudal fin rays. S. malma is extremely similar in appearance to the bull trout (S. confluentus) and Arctic char (S. alpinus), so much so that they are sometimes referred to as "native char" without a distinction. + +Range: The Dolly Varden trout is found in coastal waters of the North Pacific from Puget Sound north along the British Columbia Coast to the Alaska Peninsula and into the eastern Aleutian Islands, along the Bering Sea and the Arctic Sea to the Mackenzie River. The range in Asia extends south through the Kamchatka Peninsula into northern Japan. + Salvelinus malma + + S. malma + 2021-05-27T00:07:31Z + NCBI:txid8039 +ITIS: 162000 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=162000#null) +GBIF: 4284020 (https://www.gbif.org/species/4284020) +EOL: 225241 (https://eol.org/pages/225241) +COL: 79FQR (https://www.catalogueoflife.org/data/taxon/79FQR) +Wikidata: Q327067 (https://www.wikidata.org/wiki/Q327067) + The class which contains all instances of Salvelinus malma. + + + + A fish length measurement taken from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + MEFK +Mid-eye to fork of tail + + Mid-orbit to fork of tail length + 2021-03-31T18:20:33Z + + + + + + A variable that is not in itself directly measured but inferred, and that serves in place of an unobservable or immeasurable variable. In order for a variable to be a good proxy, it must have a close correlation, not necessarily linear, with the variable of interest. This correlation might be either positive or negative. + Proxy measurement type + [ADDRESS COMMENT, THEN DELETE] + +This probably isn't the best place for this, since there may be proxy measures for non-fish measurement types; leaving for now but need input on the best way to model these in general + 2021-04-27T22:01:23Z + + + + + + A gillnet which is kept afloat at the proper depth using a system of weights and buoys attached to the headrope, footrope, or floatline. + Drift gillnet + 2021-04-01T18:02:38Z + + + + + + + ITIS: 161989 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161989#null) +GBIF: 5204019 (https://www.gbif.org/species/5204019) +EOL: 46563138 (https://eol.org/pages/46563138, NOTE: refers to 'rainbow trout') +COL: 49JFF (https://www.catalogueoflife.org/data/taxon/49JFF) +Wikidata: Q64437771 (https://www.wikidata.org/wiki/Q64437771) + + + O. mykiss + NCBI:txid8022 +ITIS: 161989 (https://itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161989#null) +GBIF: 5204019 (https://www.gbif.org/species/5204019) +EOL: 46563138 (https://eol.org/pages/46563138) +COL: 49JFF (https://www.catalogueoflife.org/data/taxon/49JFF) +Wikidata: Q187986 (https://www.wikidata.org/wiki/Q187986) + + + Oncorhynchus mykiss + + The class which contains all instances of Oncorhynchus mykiss. + 2021-05-27T00:06:44Z + Oncorhynchus mykiss (i.e. rainbow trout) is a species of Pacific trout. + +Physical Description: Resident freshwater rainbow trout adults average between 1 and 5 lb (0.5 and 2.3 kg) in riverine environments, while lake-dwelling and anadromous forms may reach 20 lb (9 kg). Coloration varies widely between regions and subspecies. Adult freshwater forms are generally blue-green or olive green with heavy black spotting over the length of the body. Adult fish have a broad reddish stripe along the lateral line, from gills to the tail, which is most pronounced in breeding males. The caudal fin is squarish and only mildly forked. Lake-dwelling and anadromous forms are usually more silvery in color with the reddish stripe almost completely gone. Juvenile rainbow trout display parr marks (dark vertical bars) typical of most salmonid juveniles. In some redband and golden trout forms parr marks are typically retained into adulthood. Some coastal rainbow trout (O. m. irideus) and Columbia River redband trout (O. m. gairdneri) populations and cutbow hybrids may also display reddish or pink throat markings similar to cutthroat trout. In many regions, hatchery-bred trout can be distinguished from native trout via fin clips. Fin clipping the adipose fin is a management tool used to identify hatchery-reared fish. + +Range: The native range of Oncorhynchus mykiss is in the coastal waters and tributary streams of the Pacific basin, from the Kamchatka Peninsula in Russia, east along the Aleutian Islands, throughout southwest Alaska, the Pacific coast of British Columbia and southeast Alaska, and south along the west coast of the U.S. to northern Mexico. It is claimed that the Mexican forms of Oncorhynchus mykiss represent the southernmost native range of any trout or salmon (Salmonidae), though the Formosan landlocked salmon (O. masou formosanus) in Asia inhabits a similar latitude. The range of coastal rainbow trout (O. m. irideus) extends north from the Pacific basin into tributaries of the Bering Sea in northwest Alaska, while forms of the Columbia River redband trout (O. m. gairdneri) extend east into the upper Mackenzie River and Peace River watersheds in British Columbia and Alberta, Canada, which eventually drain into the Beaufort Sea, part of the Arctic Ocean. Since 1875, the rainbow trout has been widely introduced into suitable lacustrine and riverine environments throughout the United States and around the world. Many of these introductions have established wild, self-sustaining populations. + + + + Oncorhynchus keta +O. keta +"dog salmon" @en +"keta salmon" @en +"silverbrite salmon" @en + "Iqalugruaq" @ipk +"Aqalugruaq" @ipk +"Noolaaghe" [Denaakk'e, Koyukon Athabaskan] +"Nahdlii" @gwi +"Shii" @gwi +"Aluyak" @ypk +"Iqalluk" @ypk +"Kangitneq" @ypk +"Mac'utaq" @ypk +"Teggmaarrluk" @ypk [Unangam tunuu variant] +"x̂aykix̂" @ale +"Alimaq" [Alutiiq/Sugpiaq] +"alima" [Kenai Dena'ina] +"tiitl'" @eya +"Gaynii"@tsi @tli +"téel'" @tsi @tli + Chum salmon + 2021-04-16T18:10:52Z + + + + + + Bycatch abundance + Amount of Bycatch + 2021-04-26T23:38:07Z + + + + + + The full scientific name, with authorship and date information if known. When forming part of an Identification, this should be the name in lowest level taxonomic rank that can be determined. This term should not contain identification qualifications, which should instead be supplied in the IdentificationQualifier term. + As of 30April2021, Darwin Core (DWC) does not specify domains and ranges. Currently, I am considering 'Vernacular name' to be the domain and 'Salmon specimen and occurrence' to be the range. + + + + + + The number of annuli on a given otolith. + Number of otolith annuli + Otoliths, or "earstones" (structures formed of calcium in the heads of bony fishes, and which function as organs of balance), grow concentrically from the center origin. Factors, such as watertemperature, that affect fish growth cause seasonal changes in the density of layers laid down in otoliths and in some cases it is possible to determine fish age from the banding that results. When otoliths are viewed under a low-power microscope, the layers making up spring and summer growth appear as a white, opaque band. Layers laid down in the fall, and also in the winter in some fishes, appear as a dark translucent band. A light and a dark band together make up the annual growth, and age in years is determined by counting the number of dark bands. + 2021-04-27T21:37:46Z + + + + + + A multi-pronged spear, typically ranging in length from 8 to 14 feet, which is used to spear (or "gig") fishes for harvest. + Gig + 2021-04-01T18:02:33Z + + + + + + + Oncorhynchus gorbuscha +O. gorbuscha +"humpback salmon" @en +"humpbacked salmon" @en + "Amaqtuq" @ipk +"Amaqaayak" @ypk +"Amaqsuq" @ypk +"Cuqpeq" @ypk +"Terteq" @ypk +"Qungaayux" @ale [Unangam tunuu variant] +"Amartuq" [Alutiiq/Sugpiaq] +"Amaqaayak" [Alutiiq/Sugpiaq] +"Dak'aay" [Ahtna] +"Dak'aagi" [Ahtna] +"qughuna" [Kenai Dena'ina] +"giyah sdilahL" @eyk +"kaashk'" @eyk +"Sti'moon" @tsi @tli +"Cháas'" @tsi @tli + Pink salmon + 2021-04-16T18:10:57Z + + + + + + A fish length measurement taken from the mid-orbit (i.e. eye) to the posterior insertion of the anal fin. + Mid-eye to posterior insertion of anal fin + + Mid-orbit to posterior insertion of anal fin length + The insertion of a fin is the posterior-most point where the fin connects with the body. + 2021-03-31T18:20:26Z + + + + + + A fish length measurement taken from the hind margin of the orbit to the hypural plate. + POHL + + Post orbit to hypural plate length + 2021-03-31T18:19:49Z + + + + + + geographic position measurement type + 2019-01-17T18:54:57Z + + + + + + S. salar + NCBI:txid8030 +ITIS: 161996 (https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=161996#null) +GBIF: 7595433 (https://www.gbif.org/species/7595433) +EOL: 46563143 (https://eol.org/pages/46563143) +COL: 6XCXT (https://www.catalogueoflife.org/data/taxon/6XCXT) +Wikidata: Q188879 (https://www.wikidata.org/wiki/Q188879) + + + Salmo salar is the only species of Atlantic salmon. + +Physical Description: Atlantic salmon are the largest species in their genus, Salmo. After two years at sea, the fish average 71 to 76 cm (28 to 30 in) in length and 3.6 to 5.4 kg (7.9 to 11.9 lb) in weight. The colouration of young Atlantic salmon does not resemble the adult stage. While they live in fresh water, they have blue and red spots. At maturity, they take on a silver-blue sheen. The easiest way of identifying them as an adult is by the black spots predominantly above the lateral line, though the caudal fin is usually unspotted. When they reproduce, males take on a slight green or red colouration. The salmon has a fusiform body, and well-developed teeth. All fins, except the adipose fin, are bordered with black. + The class which contains all instances of Salmo salar. + + 2021-05-27T00:02:46Z + Salmo salar + + + + Total number of recruits of age class 2.1. + Age class 2.1 recruits + 2021-07-15T18:49:46Z + + + + + + The number of salmon from a given population that escape the fishery in a day. + Daily escapement count + Compare with "Annual escapement count" + +Need to think more about how to model time over which measurement is taken. E.g. do we want to have separate terms for annual escapement counts vs. daily escapement counts, OR have a predicate which encapsulates the time period over which a measurement occurs, OR something else? + 2021-04-26T23:24:56Z + + + + + + latitude degree component + 2019-01-28T21:57:42Z + + + + + + https://en.wikipedia.org/wiki/Chum_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q475211, accessed 2021-06-15 + Oncorhynchus keta (i.e. chum salmon) is one of the five species of Pacific salmon. + +Physical Description: The body of the chum salmon is deeper than most salmonid species. In common with other species found in the Pacific, the anal fin has 12 to 20 rays, compared with a maximum of 12 in European species. Chum have an ocean coloration of silvery blue green with some indistinct spotting in a darker shade, and a rather paler belly. When they move into fresh water the color changes to dark olive green and the belly color deepens. When adults are near spawning, they have purple blotchy streaks near the caudal peduncle, darker towards the tail. Spawning males typically grow an elongated snout or kype, their lower fins become tipped with white and they have enlarged teeth. Some researchers speculate these characteristics are used to compete for mates. + +Range: Chum salmon have the largest natural range of any Pacific salmon, and undergo the longest migrations within the genus Oncorhynchus, far up the Yukon River and deep into the Amur River basin in Asia. In lesser numbers they migrate thousands of kilometres up the Mackenzie River. Chum are found around the north Pacific, in the waters of Korea, Japan, and the Okhotsk and Bering seas (Kamchatka, Chukotka, Kuril Islands, Sakhalin, Khabarovsk Krai, Primorsky Krai), British Columbia in Canada, and from Alaska to California in the United States. In the Arctic Ocean they are found in limited numbers from the Laptev Sea to the Beaufort Sea. In North America chum salmon spawn from the Mackenzie River in the Arctic to as far south as Tillamook Bay, Oregon, although they were also reported in the San Lorenzo River near Santa Cruz, California in 1915 and the Sacramento River in northern California in the 1950s. In fall 2017 a half dozen chum salmon were counted in Lagunitas Creek about 25 miles (40 km) north of San Francisco, California. + + + + + + One or more fishing lines, which are baited with lures or bait fish and drawn through the water (often behind a moving vessel) to catch pelagic fishes. + Troll + 2021-04-01T18:02:30Z + + + + + + A fish length measurement taken from the middle of the orbit (i.e. eye) to the hypural plate. + Mid-eye to hypural plate +MEHL +MEPS +Mid-eye to posterior scale + + Mid-orbit to hypural plate length + 2021-03-31T18:19:56Z + + + + + + https://en.wikipedia.org/wiki/Sockeye_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q44064, accessed 2021-06-15 + Oncorhynchus nerka (i.e. sockeye salmon) is one of the five species of Pacific salmon. + +Physical Description: The sockeye salmon is sometimes called red or blueback salmon, due to its color. Sockeye are blue tinged with silver in color while living in the ocean. When they return to spawning grounds, their bodies become red and their heads turn green. Sockeye can be anywhere from 60 to 84 cm (2 ft 0 in–2 ft 9 in) in length and weigh from 2.3 to 7 kg (5–15 lb). Two distinguishing features are their long, serrated gill rakers that range from 30 to 40 in number, and their lack of a spot on their tail or back. + +Range: Sockeye salmon range as far south as the Columbia River in the eastern Pacific (although individuals have been spotted as far south as the 10 Mile River on the Mendocino Coast of California) and in northern Hokkaidō Island in Japan in the western Pacific. They range as far north as the Bathurst Inlet in the Canadian Arctic in the east and the Anadyr River in Siberia in the west. The farthest inland sockeye salmon travel is to Redfish Lake, Idaho, over 1,400 km (900 mi) from the ocean and 2,000 m (6,500 ft) in elevation. In the United States, populations of sockeye salmon have been extirpated from Idaho and Oregon. + + + + + + + + + + + + + Dissolved oxygen saturation can be measured with a dissolved oxygen probe such as an oxygen sensor or an optode in liquid media, usually water. The standard unit of oxygen saturation is percent (%). + http://purl.dataone.org/odo/ECSO_00002386 + Dissolved oxygen saturation + DOsat + 2021-04-22T18:13:22Z + + A relative measure of the concentration of oxygen that is dissolved or carried in a given medium as a proportion of the maximal concentration that can be dissolved in that medium. + http://purl.dataone.org/odo/ECSO_00002386 + + + + Fish weight proxy measurement type + 2021-07-16T19:32:02Z + + + + + + A small, electronic, sound-emitting device which may be placed inside or attached to a fish and collects information on that fish's physiology, environmentm and/or movement patterns. + Acoustic tag + 2021-05-05T23:05:51Z + + + + + + Rainbow trout + 2021-06-15T20:05:20Z + + + + + + + + Total number of recruits of age class 6.8. + Age class 6.8 recruits + 2021-07-15T18:58:23Z + + + + + + + + + + + + 2021-04-30T17:44:59Z + + Oncorhynchus kisutch + + + + + + time of measurement + 2019-01-14T20:43:43Z + + + + + + The age class or life stage of the biological individual(s) at the time the occurrence was recorded. + http://rs.tdwg.org/dwc/terms/lifeStage + Life history stage of salmonid fish + 2021-04-21T23:42:02Z + + + + + + A small, electronic, sound-emitting device which is placed inside a fish and collects information on that fish's physiology and/or movement patterns. + Internal acoustic tag + This type of identification can remain in a fish for several years, is used for individual tagging, and is most suitable for fish that weigh at least 100g (given current technology). Tags may be inserted several different ways: (a) placed in a fish's stomach using a finger or guide, (b) implanted in the abdominal cavity, or (c) anchored inside the abdomen, usually to the abdominal wall with stiches. Data is transmitted wirelessly, usually through the use of radio waves (in fresh water and air), acoustic signals (in water; the receiver must also be in the water) or via satellite communication (in air; the tag sends data after it releases from the fish and floats up to the surface). Many types of telemetry devices also act as bio-loggers and store information locally on the device. Reading is done using the tag’s associated equipment, often through a computer connection. + 2021-05-05T16:20:13Z + + + + + + Total number of recruits of age class three. + Age class 3.x recruits + 2021-06-17T16:30:49Z + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=adult&language=english&sc=is, accessed 2021-04-21 + Fish that have fully developed morphological and meristic characters and that have attained sexual maturity. + + + + + + https://en.wikipedia.org/wiki/Radio-frequency_identification, accessed 2021-05-05 +https://www.wikidata.org/wiki/Q104954, accessed 2021-05-05 + An RFID system consists of a tiny transponder, a radio receiver, and an transmitter. When triggered by an electromagnetic interrogation pulse from a nearby FRID reader device, the tag transmits digital data, usually an identifying inventory number, back to the reader. + + + + + + The alteration of a physical bodily feature of a fish, either internally or externally, for identification purposes. + Fish body modification + 2021-05-05T17:26:06Z + + + + + + Total number of recruits of age class two. + Age class 2.x recruits + 2021-06-17T16:30:43Z + + + + + + + Oncorhychus mykiss +O. mykiss +"lake trout" @en +"rainbow" @en +"silver trout" @en +"steelhead" @en +"brook trout" @en + Rainbow trout + 2021-06-15T20:05:01Z + + + + + + Total number of recruits of age class 6.7. + Age class 6.7 recruits + 2021-07-15T18:58:16Z + + + + + + Taxon (name) + 2022-02-04T02:06:35Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1548, accessed 2021-06-14 + Measurements of specific parts of a fish are sometimes necessary when intact fish are not available. For instance, spawning or dead salmon often have eroded tails (from redd excavation) or enlarged or damaged jaws. When researchers want to compare fish lengths of male spawners versus female spawners or hatchery spawned females versus carcasses, it is a good idea to use this type of length measurement to remove the bias of the eroded tails on female spawners. So length measurements are made from specific parts of the body that are intact, such as the orbit and the hypural plate. The hypural plate is comprised of modified vertebrae that support the rays of the caudal fin and originate from the posterior end of the vertebral column. + + + + + + Immature + 2021-04-21T21:15:55Z + + + + + + The use of a DNA sample to identify fish which have known biomarkers. + Genetic identification + There are four main methods for collecting tissue samples for DNA sequencing: (1) collecting a fin sample, (2) swabbing the mucus layer of the fish, (3) collecting a scale sample, and (4) blood sampling. Genetic identification can provide better answers to some questions that are also answered through typical fish marking and tagging, such as effective population size, whether populations differ and the degree of inbreeding. However, genetic identification cannot answer questions about, for example migration patterns, movement in the water and growth. + 2021-05-04T23:17:57Z + + + + + + The amount of gaseous oxygen (O2) dissolved in water. + DO + Dissolved oxygen measurement type + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-22T18:12:58Z + + + + + + + Gum cards are used to mount and label the identity of sampled fish scales. + + + + + + hour and minute of measurement time + 2019-01-16T00:19:09Z + + + + + + station identifier + Identifier associated, in some context, with a "station", i.e. a location having some established facilities for doing scientific research + 2019-02-20T18:41:50Z + + + + + + longitude minute component + 2019-01-17T22:52:26Z + + + + + + + + Oncorhynchus kisutch +O. kisutch +"silver salmon" @en +"silvers" @en + + + + + + Total number of recruits of age class one. + Age class 1.x recruits + 2021-06-17T16:30:32Z + + + + + + The manner, procedure or technique by which a morphological or physiological state or property in a single individual or sample or a group of individuals or samples is assessed and a quantitative or qualitative value assigned. + Measurement method + 2021-04-12T23:21:32Z + + + + + Simultaneous hermaphrodite + Used to designate that some individual or individuals in a group of organisms possessed functional qualities of more than one gender "simultaneously", i.e. "at one time" or within a single spawning event or season. + 2022-02-03T22:55:07Z + + + + + + An integer, which represents the sum of freshwater and marine annuli plus one to account for time spent in the gravel before hatching. + Fish total age + 2021-06-15T19:26:05Z + + + + + + A stream that is usually smaller than a river. + Brook + Creek + Term not currently in ENVO, will be submitted for consideration to ENVO curation team. 03AUG2021 + 2021-04-15T18:50:11Z + + + + + + Total number of recruits of age class 6.6. + Age class 6.6 recruits + 2021-07-15T18:58:10Z + + + + + + + A colored marking, which is placed beneath the skin of a fish for identification. + + + + + + + A community species diversity that is the mean species diversity at a site or within a specific habitat. + + + + + + A small metal pin which is inserted into the fish, usually into the cartilage of the snout. + CWT + Coded wire tag + This identification type will often last the entire life of the fish, is primarily used for group marking, and is most suitable for fish at least 2.5cm in length. The fish must be euthanized for reading. The tags are delivered on a spool, and the tagging machine magnetises, cuts and inserts the tag into the fish. While a detector can be used to determine if a fish is marked or not, a fish must be euthanized in order to remove the tag and read the engraved code. + 2021-05-04T23:17:44Z + + + + + + + Alkalinity which is measured in seawater. + Seawater alkalinity + 2021-04-22T17:45:58Z + + + + + + A colored marking, which is placed beneath the skin of a fish for identification. + Subcutaneous color mark + 2021-05-05T17:00:38Z + + + + + + search for '[NEEDS ALIGNMENT]' to find terms that should have owl:equivalentClass assertions (but were removed for now b/c Protege was having issues) + Salmonid species identification and classification still needs work. + +Instances of 'Pink salmon', for example, will not be inferred as instances of 'Oncorhynchus gorbuscha' (and vice versa) at the moment. Asserting owl:equivalentClass between these classes causes weird protege behavior after saving/closing/reopening Protege. Went with skos:exactMatch for now to avoid this problem. + search for '[ADDRESS COMMENT, THEN DELETE]' to find terms that need further review + + + https://en.wikipedia.org/wiki/Cutthroat_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q2717060, accessed 2021-06-15 + Oncorhynchus clarkii (i.e. cutthroat trout) is a species of Pacific trout. + +Physical Description: Throughout their native and introduced ranges, cutthroat trout vary widely in size, coloration and habitat selection. Their coloration can range from golden to gray to green on the back. Cutthroat trout can generally be distinguished from rainbow trout by the presence of basibranchial teeth at the base of tongue and a maxillary that extends beyond the posterior edge of the eye. Depending on subspecies, strain and habitat, most have distinctive red, pink, or orange linear marks along the underside of their mandibles in the lower folds of the gill plates. + +At maturity, different populations and subspecies of cutthroat trout can range from 6 to 40 inches (15 to 102 cm) in length, depending on habitat and food availability. Sea-run forms of coastal cutthroat trout average 2 to 5 pounds (0.9 to 2.3 kg). The length and weights of mature inland forms vary widely depending on their particular environment and availability of food. Stream-resident fish are much smaller, 0.4 to 3.2 ounces (11 to 91 g), while lacustrine populations have attained weights ranging from 12 to 17 lb (5.4 to 7.7 kg) in ideal conditions. The largest cutthroat trout subspecies is the Lahontan cutthroat trout (O. c. henshawi). These fish average 8 to 9 in (20 to 23 cm) in small streams and 8 to 22 in (20 to 56 cm) in larger rivers and lakes. In ideal environments, the Lahontan cutthroat trout attains typical weights of 0.25 to 8 lb (0.11 to 3.63 kg). The world record cutthroat trout is a Lahontan at 39 in (99 cm) and 41 lb (19 kg). + +Range: Cutthroat trout are native to western North America and have evolved through geographic isolation into 14 subspecies, each native to a different major drainage basin. Native cutthroat trout species are found along the Pacific Northwest coast from Alaska through British Columbia into northern California, in the Cascade Range, the Great Basin and throughout the Rocky Mountains including southern Alberta. Some coastal populations of the coastal cutthroat trout (O. c. clarkii) are semianadromous, spending a few months in marine environments to feed as adults and returning to fresh water from fall through early spring to feed on insects and spawn. Cutthroat trout have the second-largest historic native range of North American trout; the lake trout (Salvelinus namaycush) having the largest. Ranges of some subspecies, particularly the westslope cutthroat trout (O. c. lewisi), have been reduced to less than 10 percent of their historic range due to habitat loss and introduction of non-native species. + +Although members of Oncorhynchus, the Pacific trout/salmon species, three subspecies—the westslope (O. c. lewisi), the greenback (O. c. stomias) and Yellowstone cutthroat trout (O. c. bouvierii)—evolved populations east of the Continental Divide in the upper Missouri River basin, upper Arkansas and Platte River basins and upper Yellowstone River basin, each which drain into the Atlantic basin via the Mississippi River. Scientists believe that the climatic and geologic conditions 3-5 million years ago allowed cutthroat trout from the Snake River to migrate over the divide into the Yellowstone plateau via Two Ocean Pass. There is also evidence that Yellowstone Lake once drained south into the Snake River drainage. Evidence suggests that the westslope cutthroat trout was able to establish populations east of the divide via Summit Lake at Marias Pass which at one time connected the Flathead River drainage with the upper Missouri River drainage. Scientists speculate that there are several mountain passes associated with the headwaters of the Colorado River drainage and Arkansas/Platte River drainages that would have allowed migration of cutthroat trout east of the divide. + +Cutthroat trout have been introduced into non-native waters outside their historic native range, but not to the extent of the rainbow trout (O. mykiss). Within the native range of the Yellowstone cutthroat trout, U.S. Fisheries Bureau and National Park Service authorities introduced Yellowstone cutthroat trout into many fishless lakes in Yellowstone National Park. Cutthroat trout were introduced into Lake Michigan tributaries in the 1890s and sporadically in the early 20th century, but never established wild populations. A population of Yellowstone cutthroat trout purportedly has been established in Lake Huron. Although cutthroat trout are not native to Arizona, they are routinely introduced by the Arizona Game and Fish Department into high mountain lakes in the White Mountains in the northeastern region of that state. + + + + + + + Volume of precipitation, which is any product of the condensation of atmospheric water vapor that falls under gravity. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000476 + An opening of a lake into its shore. + Lake inlet + 2021-04-15T18:47:50Z + + + + + + The number of sea lice counted on an individual fish. + Sea lice count + A sea louse (plural sea lice, not to be confused with sea fleas), is a member of the Caligidae family of copepods (small crustaceans) within the order Siphonostomatoida. The roughly 559 species in 37 genera include around 162 Lepeophtheirus and 268 Caligus species. Sea lice are marine ectoparasites (external parasites) that feed on the mucus, epidermal tissue, and blood of host marine fish. + 2021-06-23T18:54:56Z + + + + + + Total number of recruits of age class zero. + Age class 0.x recruits + 2021-06-17T16:30:26Z + + + + + + Total number of recruits of age class 8.9. + Age class 8.9 recruits + 2021-07-15T19:36:45Z + + + + + + Indigenous names for salmon can be found by exploring each SASAP region's page on the State of Alaska's Salmon and People website (for example, see the Arctic Region here: https://alaskasalmonandpeople.org/region/arctic/) + https://alaskasalmonandpeople.org/regions/, accessed 2021-04-16 + "Cayak" @ypk +"Sayak" @ypk +"Niklliq" [Alutiiq/Sugpiaq] +"Nulaeggi" [Ahtna] +"Sesluugge"' [Ahtna] +"Natael luugge'" [Ahtna] +"k'q'uya" [Kenai Dena'ina] +"tahi'id" @eyk +"cha'ch" @eyk +"Misoo" @tsi @tli +"g̲aat" @tsi @tli + + + + + + http://www.fishbase.us/glossary/Glossary.php?q=parr&language=english&sc=is, accessed 2021-06-15 + A young salmonid (salmon or trout) with parr-marks before migration to the sea and after dispersal from the redd. + + + + + + + A stock that is sustained by natural spawning and rearing in the natural habitat, regardless of parentage or origin. + Wild stock + 2021-06-14T23:05:21Z + + + + + + Sequential hermaphrodite + Used to designate that some individual or individuals in a group of organisms possessed functional qualities of more than one gender "sequentially", i.e. not at the "same time" or within a single spawning event or season, but more typically across spawning events or seasons. + 2022-02-03T22:54:57Z + + + + + + + A community species diversity that is the ratio between regional and local species diversity. + + + + + + http://purl.dataone.org/odo/ECSO_00002895 + Alkalinity which is measured in freshwater. + Freshwater alkalinity + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-04-22T17:45:49Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000016 + A large expanse of saline water usually connected with an ocean. + Sea + 2021-04-12T21:38:14Z + + + + + + station name + 2019-02-20T18:28:45Z + + + + + + An ink solution, which is injected into the skin. + Tattoo + This type of identification is usually visible for one year on salmon, is primarily used for group marking, and is suitable for fish that weigh at least 20g. An ink solution (often Alcian blue dissolved in distilled water) is typically injected under the skin using a syringe with a cannula. Marking a fish using the "square dot system" with up to 3x3 dots is common. Unlike VIE, tattoos do not require transparent skin to be visible. However, in salmon, the tattoo should be placed in areas in front of the pelvic fins, under the pectoral fins and/or behind the anal fins to enable reading during spawning, when the fish's natural pigmentation may cover up the tattoo. + 2021-05-05T17:00:08Z + + + + + + measurement start time + 2019-01-14T21:55:20Z + + + + + + elapsed time + 2019-01-16T00:27:36Z + + + + + + http://orcid.org/0000-0002-5300-3075 + A measurement type taken of some physical, biological, or ecological aspect of a fish or fishes. + + + + + + + The unique alphanumeric code or marking color(s) of a tagged fish. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000039 + A long and narrow sea inlet with high steeply sloped walled sides. A fjord is a landform created during a period of glaciation. + Fjord + 2021-04-15T18:40:03Z + + + + + + Fish parasite measurement type + 2021-06-23T18:53:19Z + + + + + + + + + The number of salmon which survive to reach legal age and/or size for harvest. Recruits include both individuals that are captured by a fishery and individuals that escape the fishery -- total recruitment is calculated as catch plus escapement. + Total recruit abundance + Recruits do not include individuals lost to predation. + 2021-06-17T16:16:10Z + + + + + + Total number of recruits of age class 8.8. + Age class 8.8 recruits + 2021-07-15T19:36:40Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + +https://en.wikipedia.org/wiki/Acoustic_tag, accessed 2021-05-05 + A small, electronic, sound-emitting device which is attached externally to a fish and collects information on fish movement patterns and the physical environment. + + + + + + A marking which is used to differentiate individual fish or groups of fish(es). + Fish tag or identification type + An overview of many popular tag types and methods: https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + 2021-05-04T22:55:08Z + + + + + A colored two-component plastic which is injected into the fish's epidermis or fins. + VIE + Visible implant elastomer + When done correctly, this identification type will remain visible for the entire lifetime of the fish and can be used for group or individual marking. Neon or fluorescent colors are often used, and best placement is in light areas and fin rays, though even semi-transparent and transparent tissue may be suitable for easy visual reading. + 2021-05-05T16:58:54Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00001999 + A significant accumulation of saline water which is part of a marine biome. + marine waterbody +body of marine water + Marine water body + On average, seawater in the world's oceans has a salinity of about 3.5% (35 g/l, 35 ppt, 599 mM). + 2021-04-12T21:36:50Z + + + + + + date and time of measurement + 2019-01-14T21:16:02Z + + + + + + Chose not to assert owl:equivalentClass here, because all Rainbow trout are Oncorhynchus mykiss, but not all Oncorhynchus mykiss are considered Rainbow trout. + + + + + + + https://en.wikipedia.org/wiki/Taxonomy_(biology), accessed 2021-04-28 + For example, in 1758 Linnaeus gave the Asian elephant the scientific name Elephas maximus, so the name is sometimes written as "Elephas maximus Linnaeus, 1758". + + + + + + https://www.fishbase.in/glossary/Glossary.php?q=standard+length, accessed 2021-03-31 + The measurement from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). + + + + + + "POFK" is an acronym used by Alaska Department of Fish & Game (ADF&G) + POFK + + + + + + hours elapsed + 2019-01-16T00:23:41Z + + + + + + http://purl.obolibrary.org/obo/ENVO_01000617 + A water body in which the accumulated water, in its totality, has very little to no directed flow. + + + + + + + + + The weight of a specimen's stomach, taken after the stomach has been dissected from the fish and emptied of its contents. + Weight of empty stomach + 2021-06-23T18:47:15Z + + + + + + https://www.fisheries.noaa.gov/national/bycatch/fishing-gear-gillnets + A gillnet which is kept afloat at the proper depth using a system of weights and buoys attached to the headrope, footrope, or floatline. + + + + + + A group of individuals of the same species that have the same age. + Age class + For example, salmon of age class 2 include all individuals in a population of interest that are two years old. + 2021-06-17T16:11:34Z + + + + + + Total number of recruits of age class 8.7. + Age class 8.7 recruits + 2021-07-15T19:36:34Z + + + + + + http://purl.dataone.org/odo/ECSO_00001749 + A measure of the quantitative capacity of an aqueous solution to neutralize an acid. + Alkalinity measurement type + 2021-04-22T17:28:15Z + + + + + + The appearance of the otoliths (located in the inner ear of the fish) are changed. + Otolith marking + This identification type will last the entire life of the fish and is primarily used for group marking, though the fish must be euthanized for reading. Altering the appearance of otoliths may be achieved in a variety of ways, including (a) exposing a fish to variations in water temperature of at least 3 degrees Celsius a number of times to create darker and lighter bands in the otoliths, (b) bathing the fish or eggs in an aqueous solution with fluorescent dye, which is absorbed into the otoliths, or (c) bathing the fish in strontium chloride solution or feeding the fish food that contains the metallic substance strontium. + 2021-05-05T16:55:56Z + + + + + + A material entity which determines an environmental system. + http://purl.obolibrary.org/obo/ENVO_00002297 + Environmental feature + This Class and all its Subclasses are taken from the Environment Ontology, ENVO-- where the Class "Environmental feature" is now deprecated. + +To address this issue, we have imported the "astronomical-body-parts--hierarchy.owl" file from the ENVO ontology framework into this Salmon ontology. That subset of ENVO includes all the relevant subclass terms included here, except for "Creek". We will put in a request to ENVO curators to add the term "Creek", probably as a subclass of "Stream". + +Aside from Creek, we would recommend using the Classes included under the ENVO "water body" Class hierarchy for annotation of Salmon data as to "features" of their habitat, because these are more comprehensive than the terms in this native "salmon ontology" subClass hierarchy. + +(Mark Schildhauer, 2021Jul20) + 2021-04-12T19:49:29Z + + + + + http://purl.obolibrary.org/obo/ENVO_00000393 + A large sea or ocean inlet larger than a bay, deeper than a bight, wider than a fjord, or it may identify a narrow sea or ocean channel between two bodies of land. + Sound + 2021-04-15T18:39:58Z + + + + + + https://en.wikipedia.org/wiki/Region + In geography, regions are areas that are broadly divided by physical characteristics (physical geography), human impact characteristics (human geography), and the interaction of humanity and the environment (environmental geography). Geographic regions and sub-regions are mostly described by their imprecisely defined, and sometimes transitory boundaries, except in human geography, where jurisdiction areas such as national borders are defined in law. + + + + + + The weight of a specimen's stomach, taken after the stomach has been dissected from the fish but before being emptied of its contents. + Weight of full stomach + 2021-06-23T18:47:09Z + + + + + + https://www.salmonography.com/Salmonid-Topic/Jack-Salmon/ + Jacks are precocial male salmon that have spent one winter less in the ocean than the youngest females of a given species. Because they are younger, jack salmon are smaller than other age classes of conspecifics. Coho jacks return to spawn the same year they smolted and so are particularly small. Jack coloration can differ from that of older adults. Jacks are able to successfully sneak-spawn in spite of efforts by the female and occasionally the other males. + + + + + + https://www.seagrant.wisc.edu/our-work/focus-areas/fish-and-fisheries/fish-glossary/, accessed 2021-03-31 + The insertion of a fin is the posterior-most point where the fin connects with the body. + + + + + + The typical or expected weight at a given total length for a specific species of fish. Most standard weight equations are for freshwater fish species. + Standard weight + 2021-06-16T22:57:49Z + + + + + + Total number of recruits of age class 8.6. + Age class 8.6 recruits + 2021-07-15T19:36:25Z + + + + + + An appearance that varies between individuals. + Natural pattern or unique marking + Natural patterns or unique markings are primarily used for identification of individuals. This type of identification does not involve marking a fish in any way, but rather relies on stable and individual differences in appareance, such as color, patterns, and scars. This method is based on the use of still images or videos taken of individual fish, which are then analyzed manually or using digital image processing. + 2021-05-05T16:54:30Z + + + + + + An age designation notation that includes two numbers, of which the second is a subscript. The first numeral indicates the total age of the fish and the subscript indicates the time spent in freshwater prior to saltwater immigration. + G-R notation +G-R + Fish age (Gilbert-Rich notation) + e.g. An age written in Gilbert-Rich notation as '5sub2' (spoken as "five sub two") is interpreted as a fish that is in its fifth year of life (i.e. a fish that will be 5 on its next "birthday" or the number of winters from its deposition in the gravel as an egg to the time of sampling) and which migrated to the ocean during its second year of life. The European notation equivalent age is written as '1.3'. + 2021-04-09T18:52:00Z + + + + + + https://en.wikipedia.org/wiki/Atlantic_Ocean, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q97, accessed 2021-06-15 + An ocean bounded on the west by North and South America. In the north and northeast, it is separated from the Arctic Ocean by the Canadian Arctic Archipelago, Greenland, Iceland, Svalbard, and mainland Europe. It connects to the Arctic Ocean through the Denmark Strait, Greenland Sea, Norwegian Sea, and Barents Sea. To the east, the boundaries of the ocean proper are Europe, the Strait of Gibraltar (where it connects with the Mediterranean Sea, one of its marginal seas), and Africa. In the southeast, the Atlantic merges into the Indian Ocean, the border being defined by the 20 East meridian, running south from Cape Agulhas to Antarctica. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000138 + A circular or round inlet with a narrow entrance. + Cove + 2021-04-15T18:39:55Z + + + + + + + A marking which is used to differentiate individual fish or groups of fish(es). + + + + + + latitude coordinate + In geography, latitude is a geographic coordinate that specifies the north–south position of a point on the Earth's surface. Latitude is an angle (defined below) which ranges from 0° at the Equator to 90° (North or South) at the poles. Lines of constant latitude, or parallels, run east–west as circles parallel to the equator. Latitude is used together with longitude to specify the precise location of features on the surface of the Earth. On its own, the term latitude should be taken to be the geodetic latitude as defined below. Briefly, geodetic latitude at a point is the angle formed by the vector perpendicular (or normal) to the ellipsoidal surface from that point, and the equatorial plane. Also defined are six auxiliary latitudes that are used in special applications. + 2019-01-17T18:57:21Z + + + + + + https://en.wikipedia.org/wiki/Dolly_Varden_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q327067, accessed 2021-06-15 + Salvelinus malma (i.e. the dolly varden trout) is a species of Pacific trout, belonging to the genus Salvelinus of true chars. + +Physical Description: The back and sides are olive green or muddy gray, shading to white on the belly. The body has scattered pale yellow or pinkish-yellow spots. There are no black spots or wavy lines on the body or fins. Small red spots are present on the lower sides. These are frequently indistinct. The fins are plain and unmarked except for a few light spots on the base of the caudal fin rays. S. malma is extremely similar in appearance to the bull trout (S. confluentus) and Arctic char (S. alpinus), so much so that they are sometimes referred to as "native char" without a distinction. + +Range: The Dolly Varden trout is found in coastal waters of the North Pacific from Puget Sound north along the British Columbia Coast to the Alaska Peninsula and into the eastern Aleutian Islands, along the Bering Sea and the Arctic Sea to the Mackenzie River. The range in Asia extends south through the Kamchatka Peninsula into northern Japan. + + + + + + minute of hour + minute of measurement time + minute of hour + 2019-01-16T00:29:17Z + + + + + + measurement end time + 2019-01-14T21:55:34Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + A colored two-component plastic which is injected into the fish's epidermis or fins. + + + + + + https://en.wikipedia.org/wiki/Identifier, accessed 2021-06-22 +https://www.wikidata.org/wiki/Q853614, accessed 2021-06-22 + A name that identifies (that is, labels the identity of) either a unique object or a unique class of objects, where the "object" of class may be an idea, physical countable object (of class thereof), or physical noncountable substance (or class thereof). The abbreviation ID often refers to identity, identification (the process of identifying), or an identifier (that is, an instance of identification). An identifier may be a word, number, letter, symbol, or any combination of those. + + + + + + https://en.wikipedia.org/wiki/Creek, accessed 2021-04-15 +https://www.wikidata.org/wiki/Q63565252, accessed 2021-04-15 + A stream that is usually smaller than a river. + + + + + + Stomach weight + 2021-06-23T18:46:59Z + + + + + + The weight of a fish, taken after the specimen has been frozen. + Frozen weight + 2021-06-16T22:54:03Z + + + + + + https://www.fishbase.se/Glossary/Glossary.php?q=wild+stock&language=english&sc=is, accessed 2021-06-15 + A stock that is sustained by natural spawning and rearing in the natural habitat, regardless of parentage or origin. + + + + + + This identification type may last for several years or up to the lifetime of a fish, and is used for individual tagging. The tag is placed in the abdominal cavity or in the muscular tissue. Reading PIT tags can be done (a) automatically by detecting fish as they swim past (this is usually done by building an obstacle so that fish must pass close to the reader), or (b) manually by taking the fish up in the air to be scanned with a reader. + A small, passive (i.e. does not actively send out a signal and does not require a battery) radio transponder tag which, when in range, is activated by a signal emitted from a tag reader. The tag then emits a unique identification code back to the reader. + Passive Integrated Transponder tag +Microchip + PIT tag + 2021-05-05T16:47:58Z + + + + + + An age designation notation that includes two number separated by a period. The first number represents the number of years or winters a salmon has spent in freshwater after emergence from the gravel, and the second number represents the number of years spent in the ocean. Added together, these numbers can provide the total age or age class of a salmon. (although see Comment for further detail). + Fish age (European notation) + The European Age System Designation is based on a count of Freshwater (FW) and Saltwater (SW) Annuli in recruit otoliths, represented as "number of FW annuli" "." "number of SW annuli", e.g "1.4" indicating 1 FW annulus and 4 SW annuli. + +Some interpret the "Total Age" of a recruit with an "Age designation= 0.0" as a 1-year old salmon, while others interpret "Total Age" as a 0-year old salmon. + +That is, in some cases "Total Age" might be reported FW+SW+1, while in other cases it would simply be FW+SW: + +1.3=total age of 4, or 5 years +2.3=total age of 5, or 6 years + e.g. An age written in European notation as '1.3' is interpreted as 1 year over-wintered in freshwater and 3 years in the ocean. The total age is 4 years (1 + 3 years). The Gilbert-Rich equivalent age is written as '5sub2'. + 2021-04-09T18:49:30Z + + + + + + An area of water bordered by land on three sides. + Bay + 2021-04-15T18:39:18Z + + + + + + Salmo salar + 2021-05-27T19:45:43Z + + + + + + + + + + https://www.fws.gov/guidance/sites/default/files/documents/Calcein_%28SE%20Mark%29_Study_Protocol.pdf, accessed 2021-05-05 + Tag based on application of a dilution of fluorochrome dye in which fish are immersed and which binds to bony structures (such as fin rays, jaw bones, and scales), manifesting as a green fluorescence. + + + + + + https://en.wikipedia.org/wiki/Electrofishing, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q1249133, accessed 2021-04-01 + A type of fishing gear which uses direct current electricity flowing between a submerged cathod and anode to cause galvanotaxis, or an uncontrolled muscular convulsion, which affects the movement of the fish such that it swims towards the anode, where it is then collected. + + + + + + Year of fish harvest + The Year in which some commercial fish harvest was taken. Given a Class structure here to enable filtering by Year(s) of interest, although this temporal descriptor could and should also be assigned to any observations of "Commercial Fish Harvest", e.g. potentially by using the SOSA:PhenomenonTime attribute. + 2021-05-04T17:21:40Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-03-31 + A fish length measurement taken from the middle of the orbit (i.e. eye) to the hypural plate. + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-15 + A method which is used to approximate the age of a fish, and which generally involves removing and preserving a scale from a fish, then counting the number of annuli (i.e. year marks). + + + + + + http://orcid.org/0000-0002-5300-3075 + Objective comparative measure of hot or cold of water temperature in an aquatic environment. + + + + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 2021-04-06 + The number of years or winters a salmon spends in a freshwater environment as a free-swimming fish. + + + + + + http://purl.obolibrary.org/obo/PCO_0000076 + A community species diversity that is the total species diversity in a landscape. The area or landscape of interest may be of very different sizes in different situations, but it should encompass multiple sites or habitats as measured by alpha diversity. + γ-diversity + Gamma diversity + 2021-06-04T22:01:04Z + + + + + + + The right pectoral fin of the fish is removed. + + + + + + Total number of recruits of age class 5.1. + Age class 5.1 recruits + 2021-07-15T18:55:44Z + + + + + + + King salmon + 2021-10-07T01:05:10Z + + + + + + Cutthroat trout + 2021-05-27T19:58:56Z + + + + + + + + https://en.wikipedia.org/wiki/Fishery, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q180538, accessed 2021-04-01 +http://www.fao.org/faoterm/en/?defaultCollId=21, accessed 2021-04-01 + +Fletcher, W.J., Chesson, J. Fisher, M., Sainsbury K.J., Hundloe, T. Smith A.D.M., and B. Whitworth (2002): National ESD reporting framework for Australian fisheries: The "How To" guide for wild capture fisheries. FRDC Project 2000/145. Canberra, Australia + The Food and Agriculture Organization of the United Nations (FAO) defines a fishery as "...an activity leading to harvesting of fish. It may involve capture of wild fish or raising of fish through aquaculture." + + + + + + Total number of recruits of age class 2.4. + Age class 2.4 recruits + 2021-07-15T18:50:08Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1551, accessed 2021-06-14 + A fish measurement method in which the length from the most anterior tip of the body to the tip of the longest caudal fin rays is recorded. +Total length can be measured by two conventions -- by leaving the caudal fin spread in a natural position or by compressing the lobes of the caudal fin dorsoventrally. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior tip of the body to the tip of the longest caudal fin rays. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior tip of the body to the tip of the longest caudal fin rays. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + https://en.wikipedia.org/wiki/Coastal_cutthroat_trout, accessed 2021-06-18 +https://www.wikidata.org/wiki/Q5138345, accessed 2021-06-18 + O. c. clarkii +Onchorhynchus c. clarkii +sea-run cutthroat trout +blueback trout +harvest trout + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-06-14 + A fish measurement method in which the length from the middle of the orbit (i.e. eye) to the hypural plate is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the hypural plate. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the hypural plate. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + +In the case that hypural plate is not visible, the measurement may be made to some external feature (e.g. the position of the last lateral line scale; end of the fleshy caudal peduncle; midline of a crease that forms when the tail is bent sharply). It is important to note this adjustment in measurement protocol. + + + + + + creek name + 2019-03-15T23:46:34Z + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-15 + Circuli are more widely spaced in warmer months when food is abundant and growth is rapid, and more narrowly spaced in colder months when food availability is low and growth slows. + + + + + + + + Kokanee salmon + + 2021-08-03T22:40:10Z + + + + + + 2021-04-30T17:45:49Z + Sockeye salmon + + + + + + + 420 + + + + A standardized notation format for describing the age of a salmon. + Fish age notation type + 2021-04-22T00:00:42Z + + + + + + https://en.wikipedia.org/wiki/Atlantic_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q188879, accessed 2021-06-15 + Salmo salar is the only species of Atlantic salmon. + +Physical Description: Atlantic salmon are the largest species in their genus, Salmo. After two years at sea, the fish average 71 to 76 cm (28 to 30 in) in length and 3.6 to 5.4 kg (7.9 to 11.9 lb) in weight. The colouration of young Atlantic salmon does not resemble the adult stage. While they live in fresh water, they have blue and red spots. At maturity, they take on a silver-blue sheen. The easiest way of identifying them as an adult is by the black spots predominantly above the lateral line, though the caudal fin is usually unspotted. When they reproduce, males take on a slight green or red colouration. The salmon has a fusiform body, and well-developed teeth. All fins, except the adipose fin, are bordered with black. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000138 + A circular or round inlet with a narrow entrance. + + + + + + https://en.wikipedia.org/wiki/Chinook_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q833503, accessed 2021-06-15 + Oncorhynchus tshawytscha (i.e. Chinook salmon) is the largest of the five species of Pacific salmon. + +Physical Description: The Chinook is blue-green, red, or purple on the back and top of the head, with silvery sides and white ventral surfaces. It has black spots on its tail and the upper half of its body. Although spots are seen on the tail in pink salmon, and silver on the tail in coho and chum salmon, Chinook are unique among the Pacific salmon in combining black spots and silver on the tail. Another distinctive feature is a black gum line that is present in both salt and freshwater. Adult fish range in size from 24 to 36 in (61 to 91 cm), but may be up to 58 in (150 cm) in length; they average 10 to 50 lb (4.5 to 22.7 kg), but may reach 130 lb (59 kg). The meat can be either pink or white in color, depending on what the salmon have been feeding on. + +Range: Chinook are anadromous fish native to the North Pacific Ocean and the river systems of western North America, ranging from California to Alaska, as well as Asian rivers ranging from northern Japan to the Palyavaam River in the Arctic northeast Siberia. They have been introduced to other parts of the world, including New Zealand, thriving in Lake Michigan Great Lakes of North America and Michigan's western rivers, and Patagonia. + + + + + + Total number of recruits of age class 7.4. + Age class 7.4 recruits + 2021-07-15T19:35:09Z + + + + + + http://purl.obolibrary.org/obo/PCO_0000075 + A community species diversity that is the ratio between regional and local species diversity. + β-diversity + Beta diversity + 2021-06-04T22:00:59Z + + + + + + Total number of recruits of age class 4.9. + Age class 4.9 recruits + 2021-07-15T18:54:45Z + + + + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 20212-04-09 + +https://www.pac.dfo-mpo.gc.ca/fm-gp/fraser/docs/abor-autoc/2010FrasRvrChkInformDoc.htm, accessed 20212-04-09 + e.g. An age written in Gilbert-Rich notation as '5sub2' (spoken as "five sub two") is interpreted as a fish that is in its fifth year of life (i.e. a fish that will be 5 on its next "birthday" or the number of winters from its deposition in the gravel as an egg to the time of sampling) and which migrated to the ocean during its second year of life. The European notation equivalent age is written as '1.3'. + + + + + + Dolly Varden trout + 2021-05-27T19:58:43Z + + 531 + + + + + + + Total number of recruits of age class 2.3. + Age class 2.3 recruits + 2021-07-15T18:50:00Z + + + + + + https://en.wikipedia.org/wiki/Oncorhynchus, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q133325, accessed 2021-06-15 + Oncorhynchus is a genus of fish in the family Salmonidae; it contains the Pacific salmon and Pacific trout. The name of the genus is derived from the Greek ὄγκος (ónkos, “lump, bend”) + ῥύγχος (rhúnkhos, “snout”), in reference to the hooked jaws of males in the mating season (the "kype"). + + + + + + "MEHL" is an acronym used by Alaska Department of Fish & Game (ADF&G) + Mid-eye to hypural plate +MEHL +MEPS +Mid-eye to posterior scale + + + + + + https://www.monitoringresources.org/Document/Method/Details/1548, accessed 2021-03-31 +https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-03-31 + A fish length measurement taken from the hind margin of the orbit to the tip of the median caudal fin rays. + + + + + + https://en.wikipedia.org/wiki/Fish_wheel, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q5454688, accessed 2021-04-01 + A device which (a) is situated in rivers for catching fish, and (b) looks and operates like a watermill that is outfitted with wire baskets designed to catch and carry fish from the water and into a nearby holding tank. + + + + + + + + + + Total number of recruits of age class 2.2. + Age class 2.2 recruits + 2021-07-15T18:49:54Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000039 + A long and narrow sea inlet with high steeply sloped walled sides. A fjord is a landform created during a period of glaciation. + + + + + + Pink salmon + + 440 + + + + + + + + + + + + + Elapsed time, typically expressed in years, (a) since birth or (b) which describes the how long a salmon has spent in a particular environment (e.g. saltwater vs. freshwater). + Numeric age of fish + 2021-04-22T00:00:18Z + + + + + + Indigenous names for salmon can be found by exploring each SASAP region's page on the State of Alaska's Salmon and People website (for example, see the Arctic Region here: https://alaskasalmonandpeople.org/region/arctic/) + https://alaskasalmonandpeople.org/regions/, accessed 2021-04-16 + "Saanlaaghe" [Denaakk'e, Koyukon Athabaskan] +"Khwyhts'en'" [Benhti Kenaga, Lower Tanana] +"Shii" @gwi +"Caayuryaq" @ypk +"Qakiiyaq" @ypk +"Qavlunaq" @ypk +"Uqurliq" @ypk +"Qakiidax̂: @ale [Unangam tunuu variant] +"Qakiiyaq" [Alutiiq/Sugpiaq] +"ta'ay" @eyk +"ÜÜx" @tsi @tli +"L'ook" @tsi @tli + + + + + + http://purl.dataone.org/odo/ECSO_00001164 + A measure of the saltiness or dissolved salt content of a body of water. + + + + + + A young salmonid (salmon or trout) with parr-marks before migration to the sea and after dispersal from the redd. + Parr + 2021-06-16T04:18:20Z + + + + + + https://en.wikipedia.org/wiki/Longitude + Longitude (/ˈlɒndʒɪtjuːd/, AU and UK also /ˈlɒŋɡɪ-/)[1][2] is a geographic coordinate that specifies the east–west position of a point on the Earth's surface, or the surface of a celestial body. It is an angular measurement, usually expressed in degrees and denoted by the Greek letter lambda (λ). Meridians (lines running from pole to pole) connect points with the same longitude. The prime meridian, which passes near the Royal Observatory, Greenwich, England, is defined as 0° longitude by convention. Positive longitudes are east of the prime meridian, and negative ones are west. + + + + + + Total number of recruits of age class 7.3. + Age class 7.3 recruits + 2021-07-15T19:35:00Z + + + + + + http://purl.obolibrary.org/obo/PCO_0000074 + A community species diversity that is the mean species diversity at a site or within a specific habitat. + α-diversity + Alpha diversity + 2021-06-04T22:00:56Z + + + + + + Total number of recruits of age class 4.8. + Age class 4.8 recruits + 2021-07-15T18:54:40Z + + + + + + Atlantic salmon + 2021-05-27T19:58:37Z + + + + + + + http://orcid.org/0000-0002-5300-3075 + Equipment which is used to harvest aquatic resources, and in particular fish(es). + + + + + + https://en.wikipedia.org/wiki/Body_of_water, accessed 2021-03-30 + The term body of water most often refers to large accumulations of water, such as oceans, seas, and lakes, but it includes smaller pools of water such as ponds, wetlands, or more rarely, puddles. A body of water does not have to be still or contained; Rivers, streams, canals, and other geographical features where water moves from one place to another are also considered bodies of water. + + + + + + + The number of salmon which survive to reach legal age and/or size for harvest. Recruits include both individuals that are captured by a fishery and individuals that escape the fishery -- total recruitment is calculated as catch plus escapement. + + + + + + Salvelinus malma + Some Dolly Varden individuals are anadromous + 2021-05-27T19:45:59Z + + + + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + If performed correctly, this type of identification can remain in place for at least a year, is used for individual tagging, and is suitable for fish at lest 20cm in length and which live in open environments. With the cannula attached to a special tag applicator, a scale is removed just below the base of the dorsal fin and the tag is attached. The barb on the tag must hook securely into the pterygiophores (the bones that supports the dorsal fin), otherwise the tag will come loose. Most of the tag then hangs outside the fish’s body like a stiff, narrow tube. The tag is colour-coded, pre-printed with relevant text and numbered by the manufacturer according to the requests of the end user. + + + + + + has scientific name + + + + + Coho salmon + + + + + + + 2021-04-30T17:45:43Z + + + 430 + + + + Fish that have fully developed morphological and meristic characters and that have attained sexual maturity. + Adult + 2021-04-21T23:42:40Z + + + + + + study location name + 2019-04-24T00:15:35Z + + + + + + Tag based on application of chemical agents used to enhance the color or contrast of target materials or samples. Dyes have some affinity for their substrates and are usually applied in a solution. + Dye tag + [NEEDS ALIGHMENT] + +http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C461 + The URI http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C461 does not resolve to the term. Including the URL to BioPortal to ensure findability: https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C461 + 2021-05-05T16:26:27Z + + + + + + https://en.wikipedia.org/wiki/Rainbow_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q187986, accessed 2021-06-15 + Oncorhynchus mykiss (i.e. rainbow trout) is a species of Pacific trout. + +Physical Description: Resident freshwater rainbow trout adults average between 1 and 5 lb (0.5 and 2.3 kg) in riverine environments, while lake-dwelling and anadromous forms may reach 20 lb (9 kg). Coloration varies widely between regions and subspecies. Adult freshwater forms are generally blue-green or olive green with heavy black spotting over the length of the body. Adult fish have a broad reddish stripe along the lateral line, from gills to the tail, which is most pronounced in breeding males. The caudal fin is squarish and only mildly forked. Lake-dwelling and anadromous forms are usually more silvery in color with the reddish stripe almost completely gone. Juvenile rainbow trout display parr marks (dark vertical bars) typical of most salmonid juveniles. In some redband and golden trout forms parr marks are typically retained into adulthood. Some coastal rainbow trout (O. m. irideus) and Columbia River redband trout (O. m. gairdneri) populations and cutbow hybrids may also display reddish or pink throat markings similar to cutthroat trout. In many regions, hatchery-bred trout can be distinguished from native trout via fin clips. Fin clipping the adipose fin is a management tool used to identify hatchery-reared fish. + +Range: The native range of Oncorhynchus mykiss is in the coastal waters and tributary streams of the Pacific basin, from the Kamchatka Peninsula in Russia, east along the Aleutian Islands, throughout southwest Alaska, the Pacific coast of British Columbia and southeast Alaska, and south along the west coast of the U.S. to northern Mexico. It is claimed that the Mexican forms of Oncorhynchus mykiss represent the southernmost native range of any trout or salmon (Salmonidae), though the Formosan landlocked salmon (O. masou formosanus) in Asia inhabits a similar latitude. The range of coastal rainbow trout (O. m. irideus) extends north from the Pacific basin into tributaries of the Bering Sea in northwest Alaska, while forms of the Columbia River redband trout (O. m. gairdneri) extend east into the upper Mackenzie River and Peace River watersheds in British Columbia and Alberta, Canada, which eventually drain into the Beaufort Sea, part of the Arctic Ocean. Since 1875, the rainbow trout has been widely introduced into suitable lacustrine and riverine environments throughout the United States and around the world. Many of these introductions have established wild, self-sustaining populations. + + + + + + https://spo.nmfs.noaa.gov/sites/default/files/legacy-pdfs/leaflet488.pdf, accessed 2021-04-15 + The measured distance between the fine ridges of a scale (i.e. circuli) which are laid down annually in a circular pattern around the focus, or center, of a scale as the growth of the fish proceeds. + + + + + + + + + 2021-06-15T23:43:41Z + Coastal rainbow trout + + + + + + + + Total number of recruits of age class 7.2. + Age class 7.2 recruits + 2021-07-15T19:34:51Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00002297 [DEPRECATED] + A material entity which determines an environmental system. + + + + + + http://purl.obolibrary.org/obo/PCO_0000019 + The number of different species that are represented in a given community, weighted by their abundance. Community species diversity can be calculated in different ways, but consists of two components: species richness and species evenness. + Species diversity + 2021-06-04T22:00:50Z + + + + + + Total number of recruits of age class 4.7. + Age class 4.7 recruits + 2021-07-15T18:54:35Z + + + + + + http://purl.obolibrary.org/obo/ENVO_01000618 + A water body in which the accumulated water, in its totality, is flowing. + + + + + + https://www.monitoringresources.org/Document/Method/Details/1551, accessed 2021-03-31 + A fish length measurement of the entire length of a fish's body, taken from the most anterior part of the fish to the tip of the longest caudal fin rays. + + + + + + https://en.wikipedia.org/wiki/Semelparity_and_iteroparity#Semelparity, accessed 01June2021 +https://www.wikidata.org/wiki/Q522960, accessed 01June2021 + A reproductive strategy which is characterized by multiple reproductive cycles over the course of an organism's lifetime. + + + + + + has vernacular name + + + + + Total number of recruits of age class 4.6. + Age class 4.6 recruits + 2021-07-15T18:54:29Z + + + + + + + 2021-04-30T17:45:41Z + + 450 + + + + + + Chum salmon + + + A young fish at the post-larval stage. May include all fish stages from hatching to fingerling. An advanced fry is any young fish from the start of exogenous feeding after the yolk is absorbed while a sac fry is from hatching to yolk sac absorption. In Salmonidae the stage from end of dependence on the yolk sac as the primary source of nutrition to dispersal from the redd. + Fry + 2021-04-21T23:42:38Z + + + + + + A scar made on the dermal tissue using liquid nitrogen. + Freeze brand + This identification type may be clearly visible for several months and can be felt for up to a year, is primarily used for group marking, and is most suitable for salmonids that are at least 7.5cm in length. Freeze branding is done by cooling a metal rod and/or brand in liquid nitrogen, then pressing the rod lightly against the fish for ~3sec. A dark spot is temporarily created and the fish's scales are deformed. The dark spot disappears after about a month, while the deformation of the scales can be seen at certain light angles and felt with fingers for up to a year. + 2021-05-05T16:25:55Z + + + + + + Indigenous names for salmon can be found by exploring each SASAP region's page on the State of Alaska's Salmon and People website (for example, see the Arctic Region here: https://alaskasalmonandpeople.org/region/arctic/) + https://alaskasalmonandpeople.org/regions/, accessed 2021-04-16 + "Amaqtuq" @ipk +"Amaqaayak" @ypk +"Amaqsuq" @ypk +"Cuqpeq" @ypk +"Terteq" @ypk +"Qungaayux" @ale [Unangam tunuu variant] +"Amartuq" [Alutiiq/Sugpiaq] +"Amaqaayak" [Alutiiq/Sugpiaq] +"Dak'aay" [Ahtna] +"Dak'aagi" [Ahtna] +"qughuna" [Kenai Dena'ina] +"giyah sdilahL" @eyk +"kaashk'" @eyk +"Sti'moon" @tsi @tli +"Cháas'" @tsi @tli + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This type of identification can remain on a fish for several years, is used for individual tagging, and is most suitable for fish that weigh at least 100g (given current technology). One or more sutures are typically used to attach the tag to the fish's skin using a needle. Data is transmitted wirelessly, usually through the use of radio waves (in fresh water and air), acoustic signals (in water; the receiver must also be in the water) or via satellite communication (in air; the tag sends data after it releases from the fish and floats up to the surface). Many types of telemetry devices also act as bio-loggers and store information locally on the device. Reading is done using the tag’s associated equipment, often through a computer connection. + + + + + + + + + Sea-running, i.e. anadromous individuals of Rainbow Trout are called Steelhead. + + Oncorhynchus mykiss irideus + + 2021-06-15T23:34:02Z + + + + + Total number of recruits of age class 7.1. + Age class 7.1 recruits + 2021-07-15T19:34:44Z + + + + + + http://purl.dataone.org/odo/ECSO_00001237 + Volume of precipitation, which is any product of the condensation of atmospheric water vapor that falls under gravity. + Precipitation volume + 2021-06-04T21:13:21Z + + + + + + + 410 + + + 2021-04-30T17:45:38Z + + + + Chinook salmon + + + + Egg abundance + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-06-01T22:28:19Z + + + + + + 1) A young salmonid which has developed silvery coloring on its sides, obscuring the parr marks, and which is about to migrate or has just migrated into the sea, 2) to undergo the transformation from parr to smolt. + Smolt + 2021-04-21T23:42:21Z + + + + + + https://en.wikipedia.org/wiki/John_Richardson_(naturalist), accessed 2021-06-15 +https://www.wikidata.org/wiki/Q545944, accessed 2021-06-15 + Sir John Richardson (5 ovember 1787 - 5 June 1865) was a Scottish naval surgeon, naturalist and arctic explorer. + + + + + + Total number of recruits of age class 4.5. + Age class 4.5 recruits + 2021-07-15T18:54:24Z + + + + + + Tag based on application of a dilution of fluorochrome dye in which fish are immersed and which binds to bony structures (such as fin rays, jaw bones, and scales), manifesting as a green fluorescence. + SE-MARK + Calcein dye tag + Though not well studied, this type of identification may last up to 3 years post-immersion, and is used for group marking. + 2021-05-05T16:24:43Z + + + + + + + Dog salmon + + + + + A method which is used to approximate the total weight of a fish and which involves wrapping a cloth tape measure perpendicular to the longitudinal axis of the fish to measure its circumference at the thickest point. + Measuring the girth of a fish + 2021-07-16T19:37:41Z + + + + + + + + + + Gibbons, 1855 + In 1855, William P. Gibbons, the curator of Geology and Mineralogy at the California Academy of Sciences, found a population and named it Salmo iridia (Latin: rainbow), later corrected to Salmo irideus. These names faded once it was determined that Walbaum's description of type specimens was conspecific and therefore had precedence. In 1989, morphological and genetic studies indicated that trout of the Pacific Basin were genetically closer to Pacific salmon (Oncorhynchus species) than to the Salmos – brown trout (Salmo trutta) or Atlantic salmon (Salmo salar) of the Atlantic Basin. Thus, in 1989, taxonomic authorities moved the rainbow, cutthroat, and other Pacific Basin trout into the genus Oncorhynchus. Walbaum's name had precedence, so the species name Oncorhynchus mykiss became the scientific name of the rainbow trout. The previous species names irideus and gairdneri were adopted as subspecies names for the coastal rainbow and Columbia River redband trout, respectively. + 2021-06-15T23:33:16Z + + + + + + Age class 8.x recruits + Total number of recruits of age class 8 + + + + + + + Oncorhynchus gorbuscha +O. gorbuscha +"humpback salmon" @en +"humpbacked salmon" @en + + + + + + https://www.monitoringresources.org/Document/Method/Details/1548, accessed 2021-03-31 + A fish length measurement taken from the hind margin of the orbit to the hypural plate. + + + + + + + The weight of a fish, typically taken when the specimen is still alive or freshly deceased, but before being frozen or further processed. + + + + + + + An identifier, which may be assigned to a physical sample taken from a fish (e.g. tissue, fin, otolith) or an entire fish specimen. + + + + + + https://www.solitudelakemanagement.com/blog/know-your-pond-life-fin-clipping-for-fisheries-management-success/, accessed 2021-05-05 + A portion of the upper caudal fin lobe is removed. + + + + + + Larval salmon that have hatched but have not yet completely absorbed their yolk sacs and usually have not yet emerged from the gravel. + Alevin + 2021-04-21T23:42:13Z + + + + + + Age class 7.x recruits + Total number of recruits of age class 7 + + + + + Tag based on application of a dilution of diazo dye in which fish are immersed and which stains the fins a brown/tan color. + Bismarck brown +Machester brown +Phenylene brown +Bismarck brown Y +C.I. 21000 +C.I. Basic Brown 1 +Basic Brown 1 +Vesuvine BA + Bismarck brown dye tag + This type of identification can remain on a fish from a couple days up to several weeks, and is used for group marking. and is most suitable for fish + 2021-05-05T16:23:36Z + + + + + + Smolt abundance + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + 2021-06-01T22:27:09Z + + + + + + Total number of recruits of age class 4.4. + Age class 4.4 recruits + 2021-07-15T18:54:20Z + + + + + + + A standardized notation format for describing the age of a salmon. + + + + + + Total number of recruits of age class five. + Age class 5.x recruits + 2021-06-17T16:31:10Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-06-14 + Measurements of specific parts of a fish are sometimes necessary when intact fish are not available. For instance, spawning or dead salmon often have eroded tails (from redd excavation) or enlarged or damaged jaws. When researchers want to compare fish lengths of male spawners versus female spawners or hatchery spawned females versus carcasses, it is a good idea to use this type of length measurement to remove the bias of the eroded tails on female spawners. So length measurements are made from specific parts of the body that are intact, such as the orbit and the hypural plate. The hypural plate is comprised of modified vertebrae that support the rays of the caudal fin and originate from the posterior end of the vertebral column. This measurement is also commonly referred to as MEPS, or mid-eye to posterior scale, noting that researchers typically take the measurement to an external feature when the hypural plate is not visible. + + + + + + Fish weight determination method + 2021-07-16T19:37:18Z + + + + + + + + + 2021-04-30T17:45:30Z + + + Oncorhynchus tshawytscha + + + + + + + + + + + data quality flag + 2018-11-30T05:06:08Z + + + + + + https://en.wikipedia.org/wiki/Temperature, accessed 2021-04-22 +https://www.wikidata.org/wiki/Q11466, accessed 2021-04-22 + The objective measure of hot or cold in freshwater (i.e. non-saline water). + + + + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 20212-04-09 + e.g. An age written in European notation as '1.3' is interpreted as 1 year over-wintered in freshwater and 3 years in the ocean. The total age is 4 years (1 + 3 years). The Gilbert-Rich equivalent age is written as '5sub2'. + + + + + + The adipose fin is removed using scissors or a razor blade. + Adipose fin clip + When done correctly, this identification type will last the entire life of the fish, and is used for group marking. + 2021-05-05T16:20:22Z + + + + + + Oncorhynchus mykiss irideus + + + + + Total number of recruits of age class 6.9. + Age class 6.9 recruits + 2021-07-15T18:58:29Z + + + + + + A concentration of the amount of oxygen present in water. + DO concentration + Dissolved oxygen concentration + http://purl.dataone.org/odo/ECSO_00001669 + 2021-04-22T18:13:32Z + + + + + + migratoryPatternOf + 2021-06-01T20:31:46Z + + + + + + https://en.wikipedia.org/wiki/Trolling_(fishing), accessed 2021-04-01 + One or more fishing lines, which are baited with lures or bait fish and drawn through the water (often behind a moving vessel) to catch pelagic fishes. + + + + + + Subcutaneous tag + A mark or tag which is placed beneath the skin of a fish. + 2021-05-05T23:07:11Z + + + + + + Julian day fractional + fractional day of year + Julian day fractional + 2019-01-15T18:52:39Z + + + + + + Total number of recruits of age class four. + Age class 4.x recruits + 2021-06-17T16:31:03Z + + + + + + + + + + + + + Oncorhynchus nerka + + + + + + 2021-04-30T17:45:08Z + + + In fish, the term egg usually refers to female haploid gametes. + Egg + 2021-04-21T23:42:09Z + + + + + + A measurement taken around the thickest portion of the midsection of a fish. + Girth of fish + 2021-07-16T19:32:26Z + + + + + + + The number of sea lice counted on an individual fish. + + + + + + Organism name or identifier + 2021-08-12T17:29:30Z + + + + + Commercial harvest count + Estimates of number of fish caught based on some commerical harvest + 2021-04-28T18:15:54Z + + + + + + Unknown sex + 2021-04-19T18:26:55Z + + + + + + minutes elapsed + 2019-05-04T00:30:14Z + + + + + + + A static tag, which is attached externally to the body of the fish and visually read or interpreted (as opposed to read with an electronic device e.g. an acoustic tag reader). + + + + + + https://www.fishbase.in/glossary/Glossary.php?q=standard+length, accessed 2021-03-31 + A fish measurement method in which the length from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the most anterior tip of the body to the midlateral posterior edge of the hypural plate (in fish with a hypural plate) or to the posterior end of the vertebral column (in fish lacking hypural plates). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + Jack + Jacks are precocial male salmon that have spent one winter less in the ocean than the youngest females of a given species. Because they are younger, jack salmon are smaller than other age classes of conspecifics. Coho jacks return to spawn the same year they smolted and so are particularly small. Jack coloration can differ from that of older adults. Jacks are able to successfully sneak-spawn in spite of efforts by the female and occasionally the other males. + 2021-07-22T02:55:24Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 05May2021 + This identification type may last for several years or up to the lifetime of a fish, and is used for individual tagging. The tag is placed in the abdominal cavity or in the muscular tissue. Reading PIT tags can be done (a) automatically by detecting fish as they swim past (this is usually done by building an obstacle so that fish must pass close to the reader), or (b) manually by taking the fish up in the air to be scanned with a reader. + + + + + + https://en.wikipedia.org/wiki/Hand_net, accessed 2021-04-01 +https://www.wikidata.org/wiki/Q640082, accessed 2021-04-01 + A net or mesh basket held open by a hoop which may or may not be on the end of a handle and is used for scopping fish near the surface of the water. + + + + + + Fishing gear type + [ADDRESS THIS COMMENT, THEN DELETE] + +Could use some input on subclass hierarchy. E.g. 'Hand collection' includes methods which are largely done with tools that can be operated by hand. 'Netting' includes things like gillnets and seines, which, while largely set from fishing vessels (particularly in commercial fisheries), can also be set by hand at smaller scales. + Equipment which is used to harvest aquatic resources, and in particular fish(es). + 2021-04-01T18:00:22Z + + + + + + Alaska Department of Fish and Game (ADF&G) uses a list of numeric codes to describe (a) commercially-harvested aquatic species, (b) gear used for harvest, (c) method of catch processing, and (d) delivery form and product type. + + + + + + https://en.wikipedia.org/wiki/Rainbow_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q187986, accessed 2021-06-15 + Oncorhychus mykiss +O. mykiss +"lake trout" @en +"rainbow" @en +"silver trout" @en +"steelhead" @en +"brook trout" @en + + + + + + + + + + The number of recruits which survive to a legal age and/or size and are captured by a fishery. + Salmon harvest count + 2021-04-28T18:15:41Z + + + + + + Total number of recruits of age class 3.2. + Age class 3.2 recruits + 2021-07-15T18:52:05Z + + + + + + + + + + https://en.wikipedia.org/wiki/Stream, accessed 2021-04-07 +https://www.wikidata.org/wiki/Q47521, accessed 2021-04-07 + http://purl.obolibrary.org/obo/ENVO_00000023 + A watercourse which is linear and flows across the solid portion of a planetary surface. + + + + + + contains occurrence data about + Object property to enable linking an information-bearing object such as a dataset, to its assertion of some organismal occurrence (sensu Darwin Core) + 2021-08-12T01:42:16Z + + + + + + + The number of years or winters a salmon spends in a saltwater environment. + Saltwater age + 2021-04-06T23:14:20Z + + + + + + King salmon + 2021-07-21T23:27:40Z + + + + + + + + + + + + + Netting + 2021-04-01T18:46:07Z + + + + + + The reference to the source in which the specific taxon concept circumscription is defined or implied - traditionally signified by the Latin "sensu" or "sec." (from secundum, meaning "according to"). For taxa that result from identifications, a reference to the keys, monographs, experts and other sources should be given. + As of 30April2021, Darwin Core (DWC) does not specify domains and ranges. Currently, I am considering 'Salmon specimen and occurrence' to be the domain and 'Author citation' to be the range. + + + + + https://en.wikipedia.org/wiki/Salmo, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q310436, accessed 2021-06-15 + Salmo is a genus of fish in the salmon family Salmonidae that includes the European species of salmon and trout, among them the familiar Atlantic salmon Salmo salar and the brown trout Salmo trutta. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + When done correctly, this identification type will last the entire life of the fish, and is used for group marking. + + + + + + Occurrence record(s) + http://rs.tdwg.org/dwc/terms/Occurrence + Instances of this Class contain one or more occurrence records, and may contain other information associated with those occurrences. + +"Occurrence" is used here in the sense of its Darwin Core definition: + +"An existence of an Organism (sensu http://rs.tdwg.org/dwc/terms/Organism) at a particular place at a particular time." + 2021-08-12T01:31:25Z + + + + + + The number of years or winters a salmon spends in a freshwater environment as a free-swimming fish. + Freshwater age + 2021-04-06T23:10:05Z + + + + + + Total number of recruits of age class 3.1. + Age class 3.1 recruits + 2021-07-15T18:51:54Z + + + + + + Red salmon + 2021-07-21T23:26:30Z + + + + + + + + Fishing gear which is used to collect fish and can be operated by hand by one or few people. Hand collection methods may also include the collection of fish without the aid of any gear (i.e. gathering live fish or carcasses using only one's hands). + Hand collection + 2021-04-01T18:47:27Z + + + + + + A MeasurementType describes the type of a Measurement in which the Measurement would follow the associated Protocol to record the value of the associated Characteristic of the associated Entity using the associated Standard. Any of these associated properties may be omitted, in which case the MeasurementType is only constrained by the provided associations. A MeasurementType is a hypothetical construct, in that it is not associated with a particular instance of a Measurement. + + + + A type of net which hangs vertically in the water with its bottom edge held down by weights and its top edge buoyed by floats. Seine nets can be deployed from the shore as a beach seine, or from a boat. + + Seine + 2021-04-01T18:32:41Z + + + + + + lake name + 2019-03-26T22:54:25Z + + + + + + longitude degree component + 2019-01-28T21:35:36Z + + + + + + + Tag based on application of chemical agents used to enhance the color or contrast of target materials or samples. Dyes have some affinity for their substrates and are usually applied in a solution. + + + + + + I altered the definition slightly from ENVO to include "...accumulation of SALINE water..." but have left this as owl:equivalentClass since ENVO axiomatizes 'marine water body' (http://purl.obolibrary.org/obo/ENVO_00001999) as 'composed primarily of some sea water'. MPS changed from owl:equivalentClass being used as an Annot Prop to skos:exactMatch + http://purl.obolibrary.org/obo/ENVO_00001999 + + + + + + Total number of recruits of age class 2.9. + Age class 2.9 recruits + 2021-07-15T18:50:43Z + + + + + + The sum of freshwater and marine annuli plus one to account for time spent in the gravel before hatching. + Total age + 2021-04-06T22:51:22Z + + + + + + Silver salmon + 2021-07-21T23:15:02Z + + + + + + + https://en.wikipedia.org/wiki/Fish_hatchery, accessed 2021-04-02 +https://www.wikidata.org/wiki/Q15615109, accessed 2021-04-02 + The artificial breeding, hatching, and rearing through the early life stages of animals -- finfish and shellfish in particular. Hatcheries produce larval and juvenile fish, shellfish, and crustaceans, primarily to support the aquaculture industry where they are transferred to on-growing systems, such as fish farms, to reach harvest size. + + + + + + The way in which age is determined for a given individual. + http://purl.dataone.org/odo/ECSO_00001602 + Fish age determination method + There are three basic methods for age and growth determination of fishes: (1) observation of the growth of fishes of known age, (2) study of fish size-frequencies, and (3) study of seasonal ring formation in hard body parts such as scales and bones. + 2021-04-06T22:49:05Z + + + + + + + + + + Duration of a temporal entity. + + + + The way in which sex is determined for a given individual. + http://purl.dataone.org/odo/ECSO_00001601 + Fish sex determination method + 2021-04-06T22:50:14Z + + + + + + Total number of recruits of age class 2.8. + Age class 2.8 recruits + 2021-07-15T18:50:39Z + + + + + + Bristol Bay + 2021-08-10T22:44:31Z + + + + + + Dog salmon + 2021-07-21T23:13:40Z + + + + + + + https://en.wikipedia.org/wiki/Subregion + A subregion is a part of a larger region or continent and is usually based on location. Cardinal directions, such as south or sou commonly used to define a subregion. + + + + + + https://www.adfg.alaska.gov/static/license/fishing/pdfs/coar_fish_codes.pdf, accessed 04May2021 + The Alaska Department of Fish and Game defines unique two-digit "Codes for the Commercial Operator's Annual Report" which represent each of the gear types and harvest methods used Alaskan fisheries. + + + + + + The duration of time for which a fish has been alive. + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C25150 + Fish age measurement type + 2021-04-06T22:46:36Z + + + + + + + A wall of netting which hangs in the water column, typically made of monofilament or multifilament nylon. Mesh sizes are designed to allow fish to get only their head through the netting but not their body. The fish's gills then get caught in the mesh as the fish tries to back out of the net. As the fish struggles to free itself, it becomes more and more entangled. + Gillnet + 2021-04-01T18:31:54Z + + + + + + + A numeric or alphanumeric code, which represents a particular species and may be recorded in place of a formal scientific or vernacular name. + + + + + + + + + + http://www.touchngo.com/lglcntr/akstats/statutes/title16/chapter05/section258.htm, accessed 2021-04-27 + In Alaska, subsistence fisheries may not operate in "nonsubsistence areas" as designated by the state (AS 16.05.258(c)). + + + + + + https://github.com/DataONEorg/sem-prov-ontologies + Salmon Ontology + Draft ontology to support Semantic Annotation of SASAP and salmon-related datasets housed in the SASAP Data Portal (https://knb.ecoinformatics.org/portals/SASAP/About). + +April 7, 2022 UPDATE (Mark Schildhauer; schild@nceas.ucsb.edu) +This version of the salmon ontology preserves all terms and their original URI identifiers ("GUIDS") used to semantically annotate datasets in the SASAP data archives as of April 7, 2022, while also containing a number of additional terms that are not yet used. + +There are a number of "provisional" terms that have been added throughout the Ontology, i.e. as Classes, Individuals, Object, Datatype and Annotation Properties-- some are stubs for further axiomatization, other patterns are experimental and need to be cleaned up or revised as work progresses. + +In addition, a number of relationships have been created-- using Object Properties, Existential and Universal Quantifier Axioms, and "Annotation Properties as Flags"-- are in this Ontology due to experimentation with various approaches to inferencing. These are especially apparent in the treatment of Taxonomic and Vernacular names of Pacific Salmon. These should also be considered provisional and experimental. + +None of these issues should impact proper interpretation of annotated items in our SASAP archive + +Developed with Protege 5.5.0 +Inferences using Pellet + +============== +creator: Samantha Csik, scsik@nceas.ucsb.edu +created: 2021-04-12 +updated: 2021-06-14 +2021-07-20 mps (schild@nceas.ucsb.edu) +2021-08-05 mps (schild@nceas.ucsb.edu) +2021-08-09 mps (schild@nceas.ucsb.edu) +2021-08-11 mps (schild@nceas.ucsb.edu) +2021-08-13 mps (schild@nceas.ucsb.edu) + merged in missing Classes from Sam's earlier version +2021-09-08 mps (schild@nceas.ucsb.edu) + corrected all ID's to be 8 chars long +2021-10-04 mps with import of ENVO "ecology" subset +2021-10-13 mps added fisheries types; test modeling of different representation of taxonomies-- scoped domains/ranges? +2021-11-15 mps fixed "Age class Y" recruits to "Age class Y.x recruits" etc +removed some test Classes 2021-12-21 mps +2022-01-13 mps: reorganized the "Names" and "Code" Classes and added comments +2022-01-13 mps: added comments where flagged by Sam as missing +2022-01-28 mps: imported Geosparql 1.0 +2022-02-03 mps:added some classes; refined descriptions that Sam had flagged as needing attention +2022-02-17 mps: the ENVO Subset import is now deprecated due to change in the build workflow of ENVO, making its original import materialization inaccessible. +2022-03-24 mps: added more salmon common names, searching for most concise way to infer equivalences of vernacular and scientifically named types/individuals...NOT YET FULLY RESOLVED +2022-03-31 mps: removed SKOS-DL import from Object Properties but a number of "Usages" of SKOS-DL structures still need to be cleansed +2022-04-06 mps: discussed Import process with ENVO folks, and was able to successfully re-import the "astronomical-body-part-hiearchy.owl" subset that contains a number of useful entities that are nicely organized and axiomatized. +2022-04-07 mps: sent current revision to Bryce for upload to Ontology dereference PURLs that are provided as semantic annotations to data components in our SASAP data archive + +EOF + https://creativecommons.org/publicdomain/zero/1.0/ + + https://orcid.org/0000-0002-5300-3075 +https://orcid.org/0000-0002-0381-3766 +https://orcid.org/0000-0003-0632-7576 +https://orcid.org/0000-0003-0077-4738 + + SALMON + 2021-04-12T11:02:10-07:00 + + + 0.3.1 + + An ontology representing knowledge about salmon, features of their habitats, salmon stakeholders, and related entities. This ontology is considered to be in the early stages of development, though it is based upon considerable previous work. Contributions of all kinds are welcome and encouraged, including alignments, updates to existing terms, and new terms. + https://github.com/DataONEorg/sem-prov-ontologies/issues + + + + In biological taxonomy, Type generically refers to the official name applied to a taxon. This Class constrains Type members as belonging to family Salmonidae + + + + + + https://en.wikipedia.org/wiki/Rainbow_trout, accessed 2021-06-16 +https://www.wikidata.org/wiki/Q187986, accessed 20212-06-16 + In 1855, William P. Gibbons, the curator of Geology and Mineralogy at the California Academy of Sciences, found a population and named it Salmo iridia (Latin: rainbow), later corrected to Salmo irideus. These names faded once it was determined that Walbaum's description of type specimens was conspecific and therefore had precedence. In 1989, morphological and genetic studies indicated that trout of the Pacific Basin were genetically closer to Pacific salmon (Oncorhynchus species) than to the Salmos – brown trout (Salmo trutta) or Atlantic salmon (Salmo salar) of the Atlantic Basin. Thus, in 1989, taxonomic authorities moved the rainbow, cutthroat, and other Pacific Basin trout into the genus Oncorhynchus. Walbaum's name had precedence, so the species name Oncorhynchus mykiss became the scientific name of the rainbow trout. The previous species names irideus and gairdneri were adopted as subspecies names for the coastal rainbow and Columbia River redband trout, respectively. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000475 + An opening of the sea into the land, or of a lake into its shore. + + + + + + Total number of recruits of age class 5.4. + Age class 5.4 recruits + 2021-07-15T18:56:01Z + + + + + + + The weight of a fish, taken after the specimen has been frozen. + + + + + + Total number of recruits of age class 2.7. + Age class 2.7 recruits + 2021-07-15T18:50:32Z + + + + + + Humpback salmon + 2021-07-21T23:13:14Z + + + + + + http://vocab.nerc.ac.uk/collection/M13/current/018/, accessed 2021-04-02 + https://en.wikipedia.org/wiki/Aquaculture, accessed 2021-04-02 +https://www.wikidata.org/wiki/Q188989, accessed 2021-04-02 + The culturing of fish, shellfish, aquatic plants, and/or other organisms in captivity or under controlled conditions in the near shore environment. + + + + + + + Includes qualities like population size, population growth rate, carrying capacity, immigration rate, emigration rate, fecundity, and death rate. A population quality may depend on the qualities of individual organisms in the population, but cannot be measured or described for a single organism. + + + + + + valley name + 2019-03-25T22:43:37Z + + + + + + https://risaa.org/newsletter/0516/0516_09.pdf, accessed 2021-05-06 + A pectoral fin is removed, typically as close to the body as possible, using scissors or a razor blade. + + + + + + http://purl.obolibrary.org/obo/PCO_0000010 + The number of different species represented in an ecological community. + Species richness + 2021-06-04T22:06:09Z + + + + + + Total number of recruits of age class 5.3. + Age class 5.3 recruits + 2021-07-15T18:55:54Z + + + + + + + Humpback salmon + 2021-10-07T01:18:28Z + + + + + + Total number of recruits of age class 2.6. + Age class 2.6 recruits + 2021-07-15T18:50:27Z + + + + + + non-anadromous + Fish belonging to a taxon that is typically anadromous, that do not migrate seaward at some time in their life-cycle. + 2021-08-06T06:33:41Z + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This identification type will last the lifetime of the fish, is used for group marking, and is most suitable for salmonids that are at least 7cm in length. + + + + + + The manner, procedure or technique by which a morphological or physiological state or property in a single fish or sample or a group of fish(es) or samples is assessed and a quantitative or qualitative value assigned. + Fish measurement method + 2021-04-05T21:55:12Z + + + + + + http://purl.obolibrary.org/obo/MMO_0000000 + The manner, procedure or technique by which a morphological or physiological state or property in a single fish or sample or a group of fish(es) or samples is assessed and a quantitative or qualitative value assigned. + + + + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 20212-04-09 + +https://pdxscholar.library.pdx.edu/cgi/viewcontent.cgi?article=3220&context=open_access_etds, accessed 20212-04-09 + An age designation notation that includes two numbers, of which the second is a subscript. The first numeral indicates the total age of the fish and the subscript indicates the time spent in freshwater prior to saltwater immigration. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + An ink solution, which is injected into the skin. + + + + + + http://purl.dataone.org/odo/ECSO_00000553 + A numerical value which represents the length of a fish, typically in units of millimeters, centimeters, or inches. + + + + + + + + + + + Year of commercial fish harvest + The Year in which some commercial fish harvest was taken. Given a Class structure here to enable filtering by Year(s) of interest, although this temporal descriptor could and should also be assigned to any observations of "Commercial Fish Harvest", e.g. potentially by using the SOSA:PhenomenonTime attribute. + 2021-05-04T17:21:48Z + + + + + + http://purl.obolibrary.org/obo/PCO_0000023 + A quality of an ecological community that reflects how close in abundance all species in a community are. + Species evenness + 2021-06-04T22:05:10Z + + + + + + Total number of recruits of age class 5.2. + Age class 5.2 recruits + 2021-07-15T18:55:50Z + + + + + + + A quality that inheres in a population of organisms. + + + + + + + Silver salmon + 2021-10-07T01:15:21Z + + + + + + Total number of recruits of age class 2.5. + Age class 2.5 recruits + 2021-07-15T18:50:22Z + + + + + + https://www.fisheries.noaa.gov/national/bycatch/fishing-gear-traps-and-pots, accessed 2021-04-01 + A three-dimensional wire or wood device which is submerged and commonly baited. A pot (or "trap") permits organisms to enter the enclosure, but makes escape extremely difficult or impossible. + + + + + + year and season + 2019-01-22T22:55:13Z + + + + + + + + + + + + + http://purl.dataone.org/odo/ECSO_00001104 + Temperature is measured with thermometers that may be calibrated to a variety of temperature scales. Most scientists measure temperature using the Celsius scale and thermodynamic temperature using the Kelvin scale, which is the Celsius scale offset so that its null point is 0K = −273.15°C, or absolute zero. The basic unit of temperature in the International System of Units (SI) is the kelvin. It has the symbol K. + + + + + + A body of structured information describing some topic(s) of interest. (schema.org) + + + + Total number of recruits of age class 0.5. + Age class 0.5 recruits + 2021-07-15T18:45:39Z + + + + + + A numeric or alphanumeric code, which represents a particular salmon stock and may be recorded in place of a formal scientific or vernacular name. + Fish stock code + 2021-06-17T17:12:48Z + + + + + + Anadromous Waters Catalog water body code +State of Alaska's Anadromous Waters Stream Catalog + AWC water body code + 2021-07-19T20:55:57Z + + + + + + https://en.wikipedia.org/wiki/Seine_fishing, accessed 01April2021 +https://www.wikidata.org/wiki/Q600580, accessed 01April2021 + A type of net which hangs vertically in the water with its bottom edge held down by weights and its top edge buoyed by floats. Seine nets can be deployed from the shore as a beach seine, or from a boat. + + + + + + + A quality that inheres in a community. + + + + + + Pacific trout and char + 2021-03-30T21:00:02Z + + + + + + The measured distance between the fine ridges of a scale (i.e. circuli) which are laid down annually in a circular pattern around the focus, or center, of a scale as the growth of the fish proceeds. + Distance between scale circuli + An Essential Salmon Variable (ESV) from the working list being developed by Graeme Diack et al. at the Atlantic Salmon Trust. + Circuli are more widely spaced in warmer months when food is abundant and growth is rapid, and more narrowly spaced in colder months when food availability is low and growth slows. + 2021-04-15T19:38:49Z + + + + + + + Salmo salar +S. salar + Atlantic salmon + Atlantic salmon are the only anadromous salmonid native to the Atlantic coast of North America. + 2021-05-26T23:51:30Z + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + If performed correctly, this identification type may remain attached for the entire life of the fish, is used for individual tagging, and is most suitable for fish at least 15cm in length and which live in open environments. To attach a Carlin tag, double cannulas are first inserted through the fish at the height of the center of the pterygiophores (the bones that support the dorsal fin). Two stainless steel wires are then pulled through the cannulas and then the cannulas are pulled out of the fish. A small metal plate with an alphanumeric code is atached to the steel wires, which are then twisted tightly against the fish's body to hold the plate in place. + + + + + + https://en.wikipedia.org/wiki/Fish_migration, accessed 01June2021 +https://www.wikidata.org/wiki/Q852569, accessed 01June2021 + A classification of fishes which spawn in marine habitats, migrate to freshwater areas to forage and mature, then return to marine habitats to spawn. + + + + + + + + + Total number of recruits of age class 0.4. + Age class 0.4 recruits + 2021-07-15T18:45:17Z + + + + + + Total number of recruits of age class six. + Age class 6.x recruits + 2021-06-17T16:31:20Z + + + + + + The right pectoral fin of the fish is removed. + Right pectoral fin clip + 2021-05-06T16:58:12Z + + + + + + A quality that inheres in a population of organisms. + Quality of a population measurement type + [NEEDS ALIGNMENT] + +http://purl.obolibrary.org/obo/PCO_0000003 + Includes qualities like population size, population growth rate, carrying capacity, immigration rate, emigration rate, fecundity, and death rate. A population quality may depend on the qualities of individual organisms in the population, but cannot be measured or described for a single organism. + 2021-04-26T22:37:24Z + + + + + + Fish age proxy measurement type + Fish ages are often estimated using proxy measurements, such as the space or distance between scale circuli. + 2021-04-15T19:38:17Z + + + + + + data quality assessment measurement type + 2018-11-30T05:06:00Z + + + + + + + + Oncorhynchus keta +O. keta +"dog salmon" @en +"keta salmon" @en +"silverbrite salmon" @en + + + + + + https://www.monitoringresources.org/Document/Method/Details/1548, accessed 2021-06-14 +https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-06-14 + A fish measurement method in which the length from the hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork) is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the hind margin of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + http://purl.obolibrary.org/obo/ENVO_00000063 + An accumulation of water of varying size. + waterbody +body of water +aquatic feature + Water body + The term body of water most often refers to large accumulations of water, such as oceans, seas, and lakes, but it includes smaller pools of water such as ponds, wetlands, or more rarely, puddles. A body of water does not have to be still or contained; Rivers, streams, canals, and other geographical features where water moves from one place to another are also considered bodies of water. + 2021-03-30T20:59:53Z + + + + + + observer confidence + 2019-03-19T21:55:20Z + + + + + + https://www.fisheries.noaa.gov/national/bycatch/fishing-gear-gillnets, accessed 01April2021 + A wall of netting which hangs in the water column, typically made of monofilament or multifilament nylon. Mesh sizes are designed to allow fish to get only their head through the netting but not their body. The fish's gills then get caught in the mesh as the fish tries to back out of the net. As the fish struggles to free itself, it becomes more and more entangled. + + + + + + days elapsed + 2019-01-16T21:22:28Z + + + + + + + + + + https://en.wikipedia.org/wiki/Semelparity_and_iteroparity#Semelparity, accessed 01June2021 +https://www.wikidata.org/wiki/Q522960, accessed 01June2021 + A reproductive strategy which is characterized by a single reproductive episode, typically before death. + + + + + + https://code.iczn.org/authorship/article-51-citation-of-names-of-authors/?frame=1, accessed 2021-04-28 + The International Code of Zoological Nomenclature (ICZN), a widely accepted convention in zoology that rules the formal scientific naming of organisms treated as animals, establishes guidelines for author citation. See Chapter 11 of the Fourth Edition. + + + + + + https://en.wikipedia.org/wiki/Tributary, accessed 2021-04-07 +https://www.wikidata.org/wiki/Q159675, accessed 2021-04-07 + http://purl.obolibrary.org/obo/ENVO_00000495 + A stream or river which flows into another river (a parent river) or body of water but which may not flow directly into the sea. + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + This identification type may be clearly visible for several months and can be felt for up to a year, is primarily used for group marking, and is most suitable for salmonids that are at least 7.5cm in length. Freeze branding is done by cooling a metal rod and/or brand in liquid nitrogen, then pressing the rod lightly against the fish for ~3sec. A dark spot is temporarily created and the fish's scales are deformed. The dark spot disappears after about a month, while the deformation of the scales can be seen at certain light angles and felt with fingers for up to a year. + + + + + + Total number of recruits of age class 0.3. + Age class 0.3 recruits + 2021-07-15T18:44:58Z + + + + + + A pectoral fin is removed, typically as close to the body as possible, using scissors or a razor blade. + Pectoral fin clip + 2021-05-06T16:58:02Z + + + + + + https://www.geonames.org/3373405/atlantic-ocean.html + http://purl.obolibrary.org/obo/GAZ_0000034 + An ocean bounded on the west by North and South America. In the north and northeast, it is separated from the Arctic Ocean by the Canadian Arctic Archipelago, Greenland, Iceland, Svalbard, and mainland Europe. It connects to the Arctic Ocean through the Denmark Strait, Greenland Sea, Norwegian Sea, and Barents Sea. To the east, the boundaries of the ocean proper are Europe, the Strait of Gibraltar (where it connects with the Mediterranean Sea, one of its marginal seas), and Africa. In the southeast, the Atlantic merges into the Indian Ocean, the border being defined by the 20 East meridian, running south from Cape Agulhas to Antarctica. + Atlantic Ocean + 2021-05-26T22:07:26Z + + + + + + Walbaum, 1792 + Johann Julius Walbaum (30 June 1724, Wolfenbüttel, Brunswick-Wolfenbüttel – 21 August 1799, Lübeck) was a German physician, naturalist and fauna taxonomist. + 2021-04-26T22:06:58Z + + + + + + An obstruction placed in tidal waters, or wholly or partially across a river, to direct the passage of, or trap fish. + fish weir +fishing weir +fishgarth +kiddle + Weir + 2021-04-01T18:01:41Z + + + + + + Fish abundance + General Class for organizing various measurements and estimates of the Abundance of Fish, that can involve methods focusing on assessments during different life-stages, using different harvest methods, etc. + 2021-04-28T21:29:53Z + + + + + + Place or location or region + Union of Place and Location to enable searching over both less and more precise named designations of Regions + 2021-03-30T20:59:48Z + + + + + + + day of month + 2019-01-16T21:15:01Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000032 + An area of water bordered by land on three sides. + + + + + + Total number of recruits of age class 0.1. + Age class 0.1 recruits + 2021-07-15T18:43:45Z + + + + + + Note that this ENVO term, 'environmental feature' is deprecated + http://purl.obolibrary.org/obo/ENVO_00002297 + + + + + + Temporal Measurement Type + temporal_MeasurementType + temporal_MeasurementType + + + + + Total number of recruits of age class 0.2. + Age class 0.2 recruits + 2021-07-15T18:44:37Z + + + + + + https://www.geonames.org/2363254/pacific-ocean.html + http://purl.obolibrary.org/obo/GAZ_00000360 + An ocean that extends from the Arctic in the north to the Antarctic in the south, bounded by Asia and Australia on the west and the Americas on the east. + Pacific Ocean + 2021-05-26T22:07:09Z + + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-03-31 +https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-03-31 + A fish length measurement taken from the middle of the orbit (i.e. eye) to the tip of the median caudal fin rays (i.e. fork). + + + + + + A method which is used to approximate the age of a fish and which generally involves extracting the otoliths from a fish, then counting the number of annuli (i.e. year marks). + Counting otolith annuli + Alaska Department of Fish & Game, Division of Fisheries Rehabilitation, Enchancement and Development's report on Juvenile Salmonid Otolith Extraction and Preparation Techniques for Microscopic Examination can be accessed at: https://www.adfg.alaska.gov/fedaidpdfs/FRED.132.pdf + 2021-04-15T19:27:37Z + + + + + + A gillnet which is attached to poles fixed in the substrate or an anchor system to prevent movement of the net. + set net + Set gillnet + 2021-04-01T18:01:36Z + + + + + + Traditional fishery + http://www.oceansatlas.org/subtopic/en/c/1303/ + Fisheries established long ago, usually by specific communities that have developed customary patterns of rules and operations. Traditional fisheries reflect cultural traits and attitudes and may be strongly influenced by religious practices or social customs. Knowledge is transmitted between generations by word of mouth. They are usually small-scale and/or artisanal. + 2021-07-22T05:57:23Z + + + + + + hasNativeWaterbody + 2021-05-26T21:41:26Z + + + + + + http://purl.dataone.org/odo/ECSO_00001225 + Objective comparative measure of hot or cold of air. + + + + + + A method which is used to approximate the age of a fish, and which generally involves removing and preserving a scale from a fish, then counting the number of annuli (i.e. year marks). + Measuring the distance between scale circuli + A Basic Guide to Aging & Identification of Pacific Salmon Scales by Alaska Department of Fish & Game is available at: https://www.adfg.alaska.gov/static/education/educators/curricula/pdfs/salmon_scales_guide_aging_identification.pdf + 2021-04-15T19:25:23Z + + + + + + + Oncorhynchus clarkii +O. clarkii + Cutthroat trout + 2021-05-26T21:45:56Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000137 + An opening of the sea into the land. + + + + + + A barbed pole, which is used to strike and collect a fish. Spearheads come in a variety of different shapes (e.g. arrow, trident), and can be thrown by hand or deployed using elastic-powered spearguns and slings or compressed gas pneumatic powered spearguns. + Spear + 2021-04-01T18:01:30Z + + + + + + https://en.wikipedia.org/wiki/Pink_salmon, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q673380, accessed 2021-06-15 + Oncorhynchus gorbuscha (i.e. pink salmon) is the smallest and most abundant of the five species of Pacific salmon. + +Physical Description: In the ocean, pink salmon are bright silver fish. After returning to their spawning streams, their coloring changes to pale grey on the back with yellowish-white belly (although some turn an overall dull green color). As with all salmon, in addition to the dorsal fin, they also have an adipose fin. The fish is characterized by a white mouth with black gums, no teeth on the tongue, large oval-shaped black spots on the back, a v-shaped tail, and an anal fin with 13-17 soft rays. During their spawning migration, males develop a pronounced humped back, hence their nickname "humpies". Pink salmon average 4.8 pounds (2.2 kg) in weight. The maximum recorded size was 30 inches (76 cm) and 15 pounds (6.8 kg). + +Range: The native range of the species is in the Pacific and Arctic coastal waters and rivers, from the Sacramento River in northern California to the Mackenzie River in Canada; and in the west from the Lena River in Siberia to Korea and Honshu in Japan. In North America pink salmon spawn from the Mackenzie River in the Arctic to as far south as tributaries of Puget Sound, Washington, although they were also reported in the San Lorenzo River near Santa Cruz, California in 1915 and the Sacramento River in northern California in the 1950s. In 2013 a new record for the southernmost extent of spawning pink salmon was published for the Salinas River. In the fall of 2017 a dozen pink salmon were counted in Lagunitas Creek about 25 miles (40 km) north of San Francisco, California. + + + + + + + + + + + + + Sea-running, i.e. anadromous individuals of Rainbow Trout, are called Steelhead. + + + + + + Oncorhynchus mykiss + + 2021-05-26T21:27:02Z + + + https://www.researchgate.net/profile/Darlene-Gillespie/publication/281285926_Chinook_Salmon_Oncorhynchus_tshawytscha_Scale_Age_Determination_Procedures/links/55df66d708aede0b572b8de7/Chinook-Salmon-Oncorhynchus-tshawytscha-Scale-Age-Determination-Procedures.pdf, accessed 2021-04-06 + The number of years or winters a salmon spends in a saltwater environment. + + + + + + Industrial Fishery + http://www.oceansatlas.org/subtopic/en/c/1303/ + Capital-intensive fisheries using relatively large vessels with a high degree of mechanization and that normally have advanced fish finding and navigational equipment. Such fisheries have a high production capacity and the catch per unit effort is normally relatively high. In some areas of the world, the term "industrial fisheries" is synonymous with fisheries for species that are used for reduction to fishmeal and fish oil (e.g. the trawl fishery for sandeel in the North Sea or the Peruvian ourse-seine fishery for anchoveta). + 2021-07-22T05:53:20Z + + + + + + season + 2019-05-17T22:41:45Z + + + + + + http://semanticscience.org/resource/SIO_000414 + A spatial region whose boundaries are typically defined against some material frame of reference (like the earth). + + + + + + http://purl.obolibrary.org/obo/ENVO_00001999 + A significant accumulation of saline water which is part of a marine biome. + + + + + + + + + A device which (a) is situated in rivers for catching fish, and (b) looks and operates like a watermill that is outfitted with wire baskets designed to catch and carry fish from the water and into a nearby holding tank. + salmon wheel + Fish wheel + 2021-04-01T18:01:23Z + + + + + + http://purl.obolibrary.org/obo/ENVO_00000029 + A flowing body of water. + Watercourse + 2021-04-15T18:52:49Z + + + + + + A fishery in which fishes and other seafood are harvested for commercial profit, mostly from wild fisheries. + Commercial fishery + 2021-04-02T19:59:17Z + + + + + + https://en.wikipedia.org/wiki/Cutthroat_trout, accessed 2021-06-15 +https://www.wikidata.org/wiki/Q2717060, accessed 2021-06-15 + Oncorhynchus clarkii +O. clarkii + + + + + + Small-scale fishery + http://www.oceansatlas.org/subtopic/en/c/1303/ + Labour-intensive fisheries using relatively small crafts (if any) and little capital and equipment per person-on-board. Most often family-owned. May be commercial or for subsistence (see below). Usually low fuel consumption. Often equated with artisanal fisheries. + 2021-07-22T05:52:51Z + + + + + + "MEFK" is an acronym used by Alaska Department of Fish & Game (ADF&G) + MEFK +Mid-eye to fork of tail + + + + + + https://jordbruksverket.se/download/18.38d764e9177375620998e232/1611738582157/Rapport-Fish-identification-marking-and-tagging-methods.pdf, accessed 2021-05-05 + An appearance that varies between individuals. + + + + + + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C28421 + A categorical measurement type which describes the sex of a fish or group of fish(es), where sex is defined as the assemblage of physical properties or qualities of a fish by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female. + + + + + + + Salinity is an important factor in determining many aspects of the chemistry of natural waters and of biological processes within it, and is a thermodynamic state variable that, along with temperature and pressure, governs physical characteristics like the density and heat capacity of the water. + + + + + + + The number of different species represented in an ecological community. + + + + + + + + + + Fishing by means of an "angle" (fish hook). The hook is usually attached to a fishing line and baited with natural bait or artificial lures to attract fish. The line is often attached to a fishing rod. + hook and line + Angling + 2021-04-01T18:01:18Z + + + + + + The name of the scientist or scientists who first validly published the scientific name of a particular organism. + taxonomic authority +authority + Author citation + For example, in 1758 Linnaeus gave the Asian elephant the scientific name Elephas maximus, so the name is sometimes written as "Elephas maximus Linnaeus, 1758". + The International Code of Zoological Nomenclature (ICZN), a widely accepted convention in zoology that rules the formal scientific naming of organisms treated as animals, establishes guidelines for author citation. See Chapter 11 of the Fourth Edition. + 2021-04-28T20:18:16Z + + + + + https://www.monitoringresources.org/Document/Method/Details/1549, accessed 2021-06-14 +https://www.seagrant.wisc.edu/our-work/focus-areas/fish-and-fisheries/fish-glossary/, accessed 2021-06-14 + A fish measurement method in which the length from the middle of the orbit (i.e. eye) to the the posterior-most point where the fin connects with the body is recorded. Two common procedures are: + +(a) Using a measuring board: A fish is placed on its side on a measuring board with its snout against the rigid headpiece. A measurement is taken from the middle of the orbit (i.e. eye) to the posterior-most point where the fin connects with the body. + +(b) Using a tape measure: A fish is placed on its side, either on top of a tape measure or the tape measure is placed just above the dorsal side of the fish to record the measurement from the middle of the orbit (i.e. eye) to the posterior-most point where the fin connects with the body. It is important to not allow the tape to curve along the contoured side of the fish that is facing up, which can introduce bias into the measurement due to girth. + + + + + + + + + + https://www.monitoringresources.org/Document/Method/Details/4041, accessed 2021-06-14 + The fork length measurement method is commonly used in fish species that have forked caudal fins -- where the dorsal and ventral rays are longer than median rays. Longer rays are often damaged or eroded by contact with rocks, debris, or hatchery walls. + + + + + + Fish biomass + A measurement of the weight of a fish, or of a sample of fish/fishes + 2021-04-28T18:42:51Z + + + + + + + + + + http://purl.obolibrary.org/obo/ENVO_00000393 + A large sea or ocean inlet larger than a bay, deeper than a bight, wider than a fjord, or it may identify a narrow sea or ocean channel between two bodies of land. + + + + + + http://vocab.nerc.ac.uk/collection/M13/current/015/, accessed 01April2021 + https://www.fisheries.noaa.gov/national/bycatch/fishing-gear-purse-seines, accessed 01April2021 + A large wall of netting deployed around an entire area or school of fish. The seine has floats along the top line with a lead line threaded through rings along the bottom. Once a school of fish is located, a skiff encircles the school with the net. The lead line is then pulled in, "pursing" the net closed on the bottom, preventing fish from escaping by swimming downward. The catch is harvested by either hauling the net aboard or bringing it alongside the vessel. + + + + + + https://en.wikipedia.org/wiki/Location + In geography, location or place are used to denote a region (point, line, or area) on Earth’s surface or elsewhere. The term location generally implies a higher degree of certainty than place, the latter often indicating an entity with an ambiguous boundary, relying more on human or social attributes of place identity and sense of place than on geometry. + + + + + + https://en.wikipedia.org/wiki/River, accessed 2021-04-07 +https://www.wikidata.org/wiki/Q4022, accessed 2021-04-07 + http://purl.obolibrary.org/obo/ENVO_00000022 + A stream which, through permanent or seasonal flow processes, moves from elevated land towards lower elevations through a definite channel and empties either into a sea, lake, or another river or ends on land as bed seepage and evapotranspiration exceed water supply. + + + + + + + + + A reference which is made to a taxon name along with a publication which explains how the author intends for the name to be applied. + taxonomic concept + Taxon concept + 2021-04-28T19:23:01Z + + + + + + + A measurement type taken of some physical, biological, or ecological aspect of a fish or fishes. + Fish measurement type + 2021-04-01T21:37:39Z + + + + + + Grilse + a young Atlantic salmon returning to its native river to spawn for the first time after one winter at sea + 2021-07-22T02:58:24Z + + + + + + https://en.wikipedia.org/wiki/Location + In geography, location or place are used to denote a region (point, line, or area) on Earth’s surface or elsewhere. The term location generally implies a higher degree of certainty than place, the latter often indicating an entity with an ambiguous boundary, relying more on human or social attributes of place identity and sense of place than on geometry. + + + + + diff --git a/src/main/resources/ontologies/SALMON_alignment.owl b/src/main/resources/ontologies/SALMON_alignment.owl new file mode 100644 index 00000000..c6c4c76b --- /dev/null +++ b/src/main/resources/ontologies/SALMON_alignment.owl @@ -0,0 +1,639 @@ + + + + true + Age class 4.2 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000728. Existing uses should be updated where possible. + + + + + + true + Wet weight + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000659. Existing uses should be updated where possible. + + + + + + true + Oncorhynchus mykiss irideus + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000647. Existing uses should be updated where possible. + + + + + + true + Age class 2.4 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000712. Existing uses should be updated where possible. + + + + + + true + Age class 1.5 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000700. Existing uses should be updated where possible. + + + + + + true + Age class 3.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000667. Existing uses should be updated where possible. + + + + + + true + Age class 1.4 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000699. Existing uses should be updated where possible. + + + + + + true + Age class 3.3 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000720. Existing uses should be updated where possible. + + + + + + true + Total recruit abundance + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000663. Existing uses should be updated where possible. + + + + + + true + Age class 0.5 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000695. Existing uses should be updated where possible. + + + + + + true + Annual escapement count + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000480. Existing uses should be updated where possible. + + + + + term replaced by + + + + + true + Commercial harvest count + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000492. Existing uses should be updated where possible. + + + + + + true + Fish stock code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000671. Existing uses should be updated where possible. + + + + + + true + AWC water body code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000780. Existing uses should be updated where possible. + + + + + + true + Cutthroat trout + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000582. Existing uses should be updated where possible. + + + + + + true + Fish sex determination method + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000186. Existing uses should be updated where possible. + + + + + + true + Fishing gear type + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000142. Existing uses should be updated where possible. + + + + + + true + Coho salmon + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000243. Existing uses should be updated where possible. + + + + + + true + Distance between scale circuli + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000235. Existing uses should be updated where possible. + + + + + + true + Chinook salmon + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000239. Existing uses should be updated where possible. + + + + + + true + Age class 4.1 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000727. Existing uses should be updated where possible. + + + + + + true + Age class 8.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000755. Existing uses should be updated where possible. + + + + + 0.1 + Alignment ontology for The Salmon Ontology (SALMON) + + + + + This ontology contains a set of classes (and their alignments) for deprecated terms from The Salmon Ontology (SALMON). While patterns for deprecating terms in ontologies commonly involve retaining the deprecated term(s) in the main ontology, we've opted to move the deprecated terms into an alignment ontology. Our main justification for this choice is (1) that all publicly-accessible instances of deprecated terms were created before the first published release of SALMON and (2) we have sufficient authorship access to update these instances to use published terms. + 2022-07-18 + + + + true + Age class 2.3 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000711. Existing uses should be updated where possible. + + + + + + true + Age class 2.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000666. Existing uses should be updated where possible. + + + + + + true + Age class 1.3 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000698. Existing uses should be updated where possible. + + + + + + true + Rainbow trout + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000642. Existing uses should be updated where possible. + + + + + + true + Fish length determination method + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000630. Existing uses should be updated where possible. + + + + + + true + Subsistence fishery harvest count + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000783. Existing uses should be updated where possible. + + + + + + true + Age class 0.4 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000694. Existing uses should be updated where possible. + + + + + + true + Age class 6.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000670. Existing uses should be updated where possible. + + + + + + true + Sockeye salmon + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000242. Existing uses should be updated where possible. + + + + + + true + Mid-orbit to fork of tail length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000133. Existing uses should be updated where possible. + + + + + + true + Saltwater age + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000189. Existing uses should be updated where possible. + + + + + + true + ADF&G species code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000525. Existing uses should be updated where possible. + + + + + + true + Dolly Varden trout + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000569. Existing uses should be updated where possible. + + + + + + true + Post-orbit to fork of tail length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000129. Existing uses should be updated where possible. + + + + + + true + Fish sample code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000529. Existing uses should be updated where possible. + + + + + + true + Age class 3.2 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000719. Existing uses should be updated where possible. + + + + + + true + Age class 3.1 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000718. Existing uses should be updated where possible. + + + + + + true + Age class 5.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000669. Existing uses should be updated where possible. + + + + + + true + Age class 7.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000754. Existing uses should be updated where possible. + + + + + + true + Age class 2.2 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000710. Existing uses should be updated where possible. + + + + + + true + Age class 1.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000665. Existing uses should be updated where possible. + + + + + + true + Age class 1.2 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000697. Existing uses should be updated where possible. + + + + + + true + Recruits per spawner + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000782. Existing uses should be updated where possible. + + + + + + true + Chum salmon + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000240. Existing uses should be updated where possible. + + + + + + true + Age class 0.3 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000693. Existing uses should be updated where possible. + + + + + + true + Age error code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000681. Existing uses should be updated where possible. + + + + + + true + Gum card number + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000680. Existing uses should be updated where possible. + + + + + + true + Pink salmon + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000241. Existing uses should be updated where possible. + + + + + + true + Freshwater age + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000188. Existing uses should be updated where possible. + + + + + + true + Mid-orbit to posterior insertion of anal fin length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000132. Existing uses should be updated where possible. + + + + + + true + Brood year + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000520. Existing uses should be updated where possible. + + + + + + true + Fork length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000128. Existing uses should be updated where possible. + + + + + + true + Salmon abundance + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000504. Existing uses should be updated where possible. + + + + + + true + Age class 4.3 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000729. Existing uses should be updated where possible. + + + + + + true + Age class 0.6 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000705. Existing uses should be updated where possible. + + + + + + true + Age class 2.5 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000713. Existing uses should be updated where possible. + + + + + + true + Age class 4.x recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000668. Existing uses should be updated where possible. + + + + + + true + Age class 1.6 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000701. Existing uses should be updated where possible. + + + + + + true + Girth of fish + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000777. Existing uses should be updated where possible. + + + + + + true + Age class 3.4 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000721. Existing uses should be updated where possible. + + + + + + true + Sport fishery harvest count + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000785. Existing uses should be updated where possible. + + + + + + true + Age class 1.1 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000696. Existing uses should be updated where possible. + + + + + + true + Post orbit to hypural plate length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000130. Existing uses should be updated where possible. + + + + + + true + Daily escapement count + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000481. Existing uses should be updated where possible. + + + + + + true + Steelhead trout + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000570. Existing uses should be updated where possible. + + + + + + true + Fish biomass + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000493. Existing uses should be updated where possible. + + + + + + true + Age class 0.2 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000692. Existing uses should be updated where possible. + + + + + + true + Total age + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000187. Existing uses should be updated where possible. + + + + + + true + Age class 0.1 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000691. Existing uses should be updated where possible. + + + + + + true + Fish age (European notation) + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000200. Existing uses should be updated where possible. + + + + + + true + Mid-orbit to hypural plate length + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000131. Existing uses should be updated where possible. + + + + + + true + Fish length measurement type + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000127. Existing uses should be updated where possible. + + + + + + true + Fish sex measurement type + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000216. Existing uses should be updated where possible. + + + + + + true + ADF&G gear code + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000527. Existing uses should be updated where possible. + + + + + + true + Age class 2.1 recruits + This term is deprecated in favor of http://purl.dataone.org/odo/SALMON_00000709. Existing uses should be updated where possible. + + + + diff --git a/src/main/resources/ontologies/SASAP.owl b/src/main/resources/ontologies/SASAP.owl new file mode 100644 index 00000000..cbe7bd5d --- /dev/null +++ b/src/main/resources/ontologies/SASAP.owl @@ -0,0 +1,3592 @@ + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#arctic +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + In the Arctic region of Alaska, connections between salmon and people are in their infancy. Salmon are just one harbinger of change in this region. + +The bounding coordinates for this SASAP region are: +North: 71.4396 degrees +South: 67.7408 degrees +East: -136.684 degrees +West: -166.311 degrees + + + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.sfmission + A department within the government of Alaska with a mission to protect and improve the state's sport fishery resources. + + + + + + Working Group + SASAP working group and project support + Beginning in 2016, nine SASAP working groups formed – each composed of between 12 and 24 knowledge experts from a range of disciplines, backgrounds, and regions. Each participant brought his or her data and experiences for synthesis and analysis, while NCEAS provided logistical and technical support to facilitate each group’s innovative work. + +Each of the nine groups focused on specific issues related to salmon and people in Alaska: + +Four SASAP groups were tasked with integrating knowledge across multiple disciplines to understand the fundamental state of knowledge of Alaska’s salmon systems. The work of each group is presented for each of the major watersheds in Alaska in the Region section (https://alaskasalmonandpeople.org/regions/). + +An additional five working groups were selected to focus on specific research questions that provide insight into the pressures on salmon and salmon communities, as well as options for response to those pressures. Their work is presented in the Special Topics section (https://alaskasalmonandpeople.org/topics/). + 2021-03-25T18:45:38Z + + + + + Greg Roscicza + 2021-04-20T15:49:34Z + + + + + + + + + https://schema.org/affiliation + + 2021-03-25T19:00:26Z + An organization that this person is affiliated with. For example, a school/university, a club, or a team. + + isAffiliateOf + The SASAP project and its associated working groups were made up of researchers from a variety of academic, govenmental, etc. organizations from across the United States. The 'affiliateOf' object property connects SASAP researchers with their respective employer(s)/home institution(s) (at least what was considered to be their employer/home institution during the time when they worked on the SASAP project). + + + + + Matthew Catalano + 2021-04-20T15:32:36Z + + + + + + + + American-based college or university + 2021-04-21T17:33:35Z + + + + + + https://orcid.org/0000-0002-4244-2865 + Jorge Cornejo-Donoso + 2021-03-25T20:08:09Z + + + + + + + + Erika Gavenus + 2021-04-19T23:48:58Z + + + + + + + + + UC Berkeley +Berkeley + https://ror.org/01an7q238 + University of California, Berkeley + UC Berkeley's website is accessible at: https://www.berkeley.edu/ + 2021-04-21T16:38:19Z + + + + + + A department within the government of Alaska which manages commercial, subsistence, and personal use fisheries within the jurisdiction of the State of Alaska. + Alaska Department of Fish and Game, Division of Commercial Fisheries + The Division of Commercial Fisheries website is accessible at: https://www.adfg.alaska.gov/index.cfm?adfg=fishingcommercial.main + 2021-03-25T18:03:36Z + + + + + + + + A community-based nonprofit organization that combines advocacy, education and science toward its mission to protect Alaska’s Cook Inlet watershed and the life it sustains. Inletkeeper’s monitoring and science work builds credibility with scientists and resource managers, its education and advocacy efforts enhance stewardship and citizen participation, and together, these efforts translate into Inletkeeper’s ability to effectively ensure a vibrant and healthy Cook Inlet watershed. + Cook Inletkeeper + The Cook Inletkeeper's website is accessible at: https://inletkeeper.org/ + 2021-03-25T18:04:51Z + + + + + + + https://orcid.org/0000-0002-6689-9392 + Madeline Javonovich + 2021-04-20T16:09:17Z + + + + + + + + https://en.wikipedia.org/wiki/North_Slope_Borough,_Alaska +https://www.wikidata.org/wiki/Q511806 + The North Slope Borough is the northernmost borough in the US state of Alaska. + + + + + + + + + + + + + + + + + Peter Westley + 2021-03-25T18:58:18Z + + + + + + + + + + An institution of higher education and research, which grants academic degrees in a variety of subjects, and provides both undergraduate education and postgraduate education. + College or university + 2021-04-02T20:22:02Z + + + + + + + https://orcid.org/0000-0002-5415-3534 + Krista Oke + 2021-04-20T16:08:39Z + + + + + + + + https://orcid.org/0000-0003-4703-1974 + Jeanette Clark + 2021-03-25T20:08:02Z + + + + + + + + Lamont Albertson + 2021-04-20T15:48:56Z + + + + + + + + https://orcid.org/0000-0002-0258-9264 + Kristen B. Gorman + 2021-03-25T20:09:26Z + + + + + + + + Lewis Coggins + 2021-04-20T15:29:14Z + + + + + + + + McGill + https://ror.org/01pxwe438 + McGill University + McGill University's website is accessible at: https://www.mcgill.ca/ + 2021-04-21T17:32:35Z + + + + + + UCSC + https://ror.org/03s65by71 + University of California, Santa Cruz + UCSC's website is accessible at: https://www.ucsc.edu/ + 2021-04-21T16:34:58Z + + + + + + https://www.fws.gov/ + A bureau of the United States Department of the Interior whose mission is to work with others to conserve, protect and enhance fish, wildlife and plants and their habitats for the continuing benefit of the American people. + + + + + + A department within the government of Alaska which provides non-partisan budgetary and fiscal analysis to the Alaska Legislature. + LFD + Alaska Department of Legislative Finance + LFD's webpage is accessible at: https://www.legfin.akleg.gov/ + 2021-03-25T18:04:43Z + + + + + + + + + + + + + + + https://www.nhgis.org/ + The National Historical Geographic Information System (NHGIS) provides easy access to summary tables and time series of population, housing, agriculture, and economic data, along with GIS-compatible boundary files, for years from 1790 through the present and for all levels of U.S. census geography, including states, counties, tracts, and blocks. + + + + + + https://orcid.org/0000-0001-5923-4133 + Patricial M. Clay + 2021-04-19T23:53:46Z + + + + + + + + + UBC + https://ror.org/03rmrcq20 + The University of British Columbia + UBC's website is accessible at: https://www.ubc.ca/ + 2021-04-21T16:40:45Z + + + + + + A department within the government of Alaska and a sub-division of the Alaska Department of Fish and Wildlife, Division of Commercial Fisheries which manages the Central Region. + Alaska Department of Fish and Game, Division of Commercial Fisheries, Central Region + Central Region Alaska commercial fisheries are composed of four distinct management areas that include Bristol Bay, Prince William Sound and Copper River, Upper Cook Inlet, and Lower Cook Inlet. Although all 5 species of salmon are harvested in each area, sockeye and pink salmon are the most abundant and most valuable. This area encompasses some of the largest and most valuable salmon fisheries in the world. From Bristol Bay, home of the largest sockeye salmon fishery in the world, to the Copper River where sockeye and Chinook salmon fetch some of the highest prices per pound paid to commercial fishermen. Cook Inlet commercial fisheries occur near the largest population center in Alaska, providing salmon to numerous niche and local markets, as well as fresh salmon to markets in other states. Prince William Sound adds productive healthy pink, chum, and sockeye salmon fisheries to the region. Southcentral groundfish fisheries are small, yet diverse, targeting pollock, Pacific cod, rockfish, sablefish, lingcod, and skate while small shrimp and scallop fisheries in Prince William Sound cater predominately to local markets. Southcentral commercial fisheries are of tremendous importance and an integral part of many communities and local economies in the state. + 2021-03-25T18:04:02Z + + + + + + + + DFO + Fisheries and Oceans Canada + DFO's website is accessible at: https://www.dfo-mpo.gc.ca/index-eng.html + 2021-04-20T23:04:01Z + + + + + + https://ror.org/01qn7cs15 + A principle agency of the U.S. Federal Satistical System, whose responsibility and mission is to serve as the nation's leading provider of quality data about its people and economy. + United States Census Bureau + The U.S. Census Bureau's website is accessible at: https://www.census.gov/ + 2021-03-25T18:05:22Z + + + + + + + Sociocultural working group + Social and cultural dimensions of salmon systems working group + Learn more about the Social and Cultural Dimensions of Salmon Systems Working Group here: https://alaskasalmonandpeople.org/working-group/social-and-cultural-dimensions-of-salmon-systems/ + The topics explored by the Sociocultural working group are (1) social and cultural values and relationships between people and salmon, (2) trends in human populations and communities and uses of salmon, and (3) key threads to salmon-dependent communities + 2021-03-25T18:47:05Z + + + + + + Dan Rinella + 2021-03-25T19:07:18Z + + + + + + + + + + + + https://alaskasalmonandpeople.org/about/process-people/ + A research center of the University of California, Santa Barbara which fosters collaborative synthesis research by assembling interdisciplinary teams to distill existing data, ideas, theories, or methods drawn from many sources, across multiple fields of inquiry, in order to accelerate the generation of new knowledge on a broad scale. + + + + + + Steve Munch + 2021-04-20T16:11:15Z + + + + + + + + Kevin Whitworth + The SASAP website lists Kevin Whitworth's affiliation as 'Up-River Stakeholder', but I've been unable to find information about that online to include as an 'Organization' instance. + 2021-04-20T15:50:25Z + + + + + + + Steve Fleischman + 2021-04-20T15:34:26Z + + + + + + + + McGill Biology + Department of Biology + McGill's Department of Biology's website is accessible at: https://www.mcgill.ca/biology/ + 2021-04-21T17:36:24Z + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#kotzebue +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Straddling the Arctic Circle, the Kotzebue region is twice the size of West Virginia and categorized as among the driest areas of Alaska. Chum salmon is the primary species in this region and is harvested by local users in both subsistence and commercial fisheries. + +The bounding coordinates for this SASAP region are: +North: 68.9178 degrees +South: 65.3082 degrees +East: 65.3082 degrees +West: -169.0513 degrees + + + + + + 2021-03-25T18:04:57Z + National Park Service + + An agency of the federal government of the United States that manages all national parks, many national monuments, and other conservation and hisotrical properties with various title designations. + + + + Visit the National Park Service's website at: https://www.nps.gov/index.htm + NPS + https://ror.org/044zqqy65 + + + https://orcid.org/0000-0002-2342-3482 + Ben Staton + 2021-04-20T15:33:36Z + + + + + + + Canadian-based college or university + 2021-04-21T17:33:46Z + + + + + + http://dnr.alaska.gov/ssd/irm/ + A division within the government of Alaska's Department of Natural Resources (DNR) which maintains the department's land records repository and oversees DNR's computer systems and networks services. It provides for the department's data processing functions including development, training, operations, and maintenance. The Department of Natural Resources' (DNR) systems include the Land Administration System (LAS), the Geographic Information System, the Revenue and Billing System, and others. The section also produces and maintains the state's land status maps. + + + + + + Biophysical working group + Learn more about the Biophysical Working Group here: https://alaskasalmonandpeople.org/working-group/biophysical-information-on-salmon-distribution-and-habitat/ + The goal of the to Biophysical working group is to compare and contrast the status of Alaska salmon and their habitats across regions. + 2021-03-25T18:46:55Z + + + + + + Caroline Brown + 2021-04-19T23:51:22Z + + + + + + + + + MSU + https://ror.org/05hs6h993 + Michigan State University + MSU's website is accessible at: https://msu.edu/ + 2021-04-21T16:39:46Z + + + + + + isLeadResearcherOf + Each SASAP working group has an affiliated researcher(s) leading the working group's research efforts. The 'isLeadResearcherOf' object property connects lead researchers to their respective working groups. + 2021-03-25T19:00:44Z + + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.sfmission + The Division of Sport Fisheries provides the following core services: (a) fisheries management, (b) fisheries research, (c) fisheries enhancement, (d) protection and restoration of fish habitats for the ebefit of fish and sport anglers, (e) communication and outreach, and (f) providing leadership and administrative support for the Division's core functions. + + + + + + NOAA Fisheries Northwest Fisheries Science Center + NOAA Fisheries Northwest Fisheries Science Center's website is accessible at: https://www.fisheries.noaa.gov/about/northwest-fisheries-science-center + 2021-04-20T22:59:58Z + + + + + + + https://orcid.org/0000-0002-1513-9078 + Courtney Carothers + 2021-03-25T20:08:16Z + + + + + + + + + + + + + Neala Kendall + 2021-04-20T16:10:15Z + + + + + + + + + + A department within the government of Alaska and a sub-division of the Alaska Department of Fish and Wildlife, Division of Commercial Fisheries which manages the Arctic-Yukon-Kuskokwim Region. + 2021-03-25T18:03:57Z + + Alaska Department of Fish and Game, Division of Commercial Fisheries, Arctic-Yukon-Kuskokwim Region + + AYK + + The Arctic-Yukon-Kuskokwim (AYK) Region encompasses the coastal waters of Alaska and includes the rivers and streams that drain into the Bering, Chukchi, and Beaufort Seas. It stretches from its boundary at Cape Newenham with the Bristol Bay area to the border with Canada on the Arctic Ocean. The Yukon River, with the fifth largest drainage in North America, lies within this management region, as do many other major rivers; the Kuskokwim being second in size next to the Yukon. With the exception of Fairbanks, Bethel, and Nome, this is a region of villages. Salmon and herring are the most important fisheries resources in this region. Large numbers of salmon are taken for subsistence and subsistence harvests can equal or surpass the numbers of fish harvested in commercial fisheries, especially Chinook salmon. King crab is harvested near Nome in both commercial and subsistence fisheries. Whitefish are also important to the residents of this region. + + + Nick Kameroff + 2021-04-20T15:50:03Z + + + + + + + + http://nativecouncil.org/welcome/ + A federally recognized governing body for the community of Bethel, Alaska whose mission is to promote the general welfare, enhance independence, encourage self-sufficiency/self-motivation, enhance quality of life, and preserve cultural and traditional values of the Tribe, and to exercise tribal authority over resources through educational, economic, and social development opportunities. + + + + + + + Organization + 2021-03-25T21:14:05Z + + + + + Consulting firm + Consultancy + 2021-04-06T17:24:47Z + + + + + + Holly Kindsvter + 2021-04-20T15:55:31Z + + + + + + + + + + + Zach Liller + 2021-04-20T15:46:53Z + + + + + + + + A federally recognized governing body for the community of Bethel, Alaska whose mission is to promote the general welfare, enhance independence, encourage self-sufficiency/self-motivation, enhance quality of life, and preserve cultural and traditional values of the Tribe, and to exercise tribal authority over resources through educational, economic, and social development opportunities. + ONC + Orutsararmiut Traditional Native Council + The ONC website is accessible at: http://nativecouncil.org/welcome/ + 2021-03-25T18:06:45Z + + + + + + + Kenai lowlands working group + 2021-03-25T18:47:37Z + + + + + + https://orcid.org/0000-0001-5722-5073 + Ian Dutton + 2021-03-25T20:07:45Z + + + + + + + + + Rachel Donkersloot + 2021-03-25T20:09:04Z + + + + + + + + + + + + + + + + https://orcid.org/0000-0002-4807-6667 + Andrew P. Hendry + 2021-04-20T15:54:54Z + + + + + + + + + Community engagement working group +Community based monitoring working group + Comunity monitoring working group + Community based monitoring working group + 2021-03-25T18:47:30Z + + + + + + https://orcid.org/0000-0002-5496-7263 + Eric P. Palkovacs + 2021-03-25T20:08:54Z + + + + + + + + Indigenous-led organization + 2021-03-25T21:04:36Z + + + + + + http://en.wikipedia.org/wiki/Kodiak_Island +https://www.wikidata.org/wiki/Q514093 + A large island on the south coast of the State of Alaska, separated from the Alaska mainland by the Shelikof Strait. + + + + + + + + + + https://alaskasalmonandpeople.org/about/process-people/ + An essential component of the SASAP working group process is the support each group received from a stellar group of “data wranglers”, a team of geospatial analysis experts from NCEAS known as the Data Task Force. + +The Task Force coordinated hundreds of data requests from Alaska Department of Fish and Game and other agencies and organizations, then worked to reformat, integrate, and run quality control on millions of lines of data in over 125 data sets. + +The graphs, figures, and infograms generated by the Task Force greatly enhanced the ability of users to visualize often complex information about Alaska salmon. + + + + + + + + + https://orcid.org/0000-0001-8874-7595 + Jared Kibele + 2021-03-25T20:07:56Z + + + + + + + + Robert W. Campbell + 2021-03-25T20:09:14Z + + + + + + + + https://orcid.org/0000-0002-8900-9479 + Katie Kobayashi + 2021-04-20T16:07:08Z + + + + + + + + Stephanie Quinn-Davidson + 2021-04-20T15:48:32Z + + + + + + + + + + + + Redpath Museum + The Redpath Museum's website is accessible at: https://www.mcgill.ca/redpath/ + 2021-04-21T17:31:49Z + + + + + + + http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C54073 + An organization whose primary objective is to support some issue or matter of private interest or public concern for non-commercial purposes. Nonprofits generally do not operate to generate profit, and this characteristic is popularly considered to be the defining characterisitic of such organizations. However, a non-profit organization may accept, hold and disburse money and other things of value. It may also legally and ethically trade at a profit. The extent to which it can generate income may be constrained, or the use of those profits may be restricted. + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=about.cfec#:~:text=Department%20of%20Fish%20and%20Game%3B%20Commercial%20Fisheries%20Entry%20Commission,the%20number%20of%20participating%20fishers. + A department within the government of Alaska which helps to conserve and maintain the economic health of Alaska’s commercial fisheries by limiting the number of participating fishers. The Commission issues permits and vessel licenses to qualified individuals in both limited and unlimited fisheries, and provides due process hearings and appeal processes for disputes related to limitations on fishery participation. + + + + + + A division wihtin Alaska's Department of Public Safety with a mission to protect Alaska's Natural Resources through the enfrocement wildlife statutes and regulations. + AWT + Alaska Department of Public Safety, Division of Alaska Wildlife Troopers + 2021-03-25T18:04:39Z + + + + + + + + Person + 2021-03-25T18:48:44Z + + + + + This URI does not appear to dereference to the term. Including this URL, https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C54073, to ensure findability. + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/About + The State of Alaska's Salmon and People (SASAP) project is a collaboration of researchers, cultural leaders, and others working to bring together integrated, accurate, and up-to-date information that will help to support better salmon decision-making. + + + + + + Peter S. Rand + 2021-03-25T20:09:09Z + + + + + + + + John Reynolds + 2021-04-20T16:06:12Z + + + + + + + + Nick Smith + 2021-04-20T15:47:30Z + + + + + + + + Smithsonian +SI + Smithsonian Institution + The Smithsonian's website is accessible at: https://www.si.edu/ + 2021-04-21T17:30:23Z + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=fishingcommercialbyarea.interior + The Arctic-Yukon-Kuskokwim (AYK) Region encompasses the coastal waters of Alaska and includes the rivers and streams that drain into the Bering, Chukchi, and Beaufort Seas. It stretches from its boundary at Cape Newenham with the Bristol Bay area to the border with Canada on the Arctic Ocean. The Yukon River, with the fifth largest drainage in North America, lies within this management region, as do many other major rivers; the Kuskokwim being second in size next to the Yukon. With the exception of Fairbanks, Bethel, and Nome, this is a region of villages. Salmon and herring are the most important fisheries resources in this region. Large numbers of salmon are taken for subsistence and subsistence harvests can equal or surpass the numbers of fish harvested in commercial fisheries, especially Chinook salmon. King crab is harvested near Nome in both commercial and subsistence fisheries. Whitefish are also important to the residents of this region. + + + + + + https://en.wikipedia.org/wiki/National_Park_Service + An agency of the federal government of the United States that manages all national parks, many national monuments, and other conservation and hisotrical properties with various title designations. + + + + + + https://en.wikipedia.org/wiki/Intergovernmental_organization +https://www.wikidata.org/wiki/Q245065 + https://hls.harvard.edu/dept/opia/what-is-public-interest-law/public-service-practice-settings/public-international-law/intergovernmental-organizations-igos/ + An entity created by treaty, involving two or more nations, to work in good faith, on issues of common interest. + + + + + + Well-being working group + Well-being and salmon systems working group + 2021-03-25T18:47:41Z + + + + + + https://orcid.org/0000-0003-0077-4738 + Matthew Jones + 2021-03-25T20:07:50Z + + + + + + + + + + + + https://schema.org/Project + An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. + + + + + + + + + http://en.wikipedia.org/wiki/Bristol_Bay +https://www.wikidata.org/wiki/Q917872 + The eastern-most arm of the Bering Sea. It is located between the southwest part of the Alaska mainland to its north, and the Alaska Peninsula to its south and east. Bristol Bay is 400 km long and 290 km wide at its mouth. A number of rivers flow into the bay, including the Cinder, Igushik, Kvichak, Meshik, Nushagak, Naknek, Togiak, and Ugashik. + + + + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.subsoverview + A department within the government of Alaska with a mission to scientifically gather, quantify, evaluate, and report information about customary and traditional uses of Alaska's fish and wildlife resources. + + + + + + https://en.wikipedia.org/wiki/Category:Independent_research_institutes#:~:text=From%20Wikipedia%2C%20the%20free%20encyclopedia,operate%20under%20their%20own%20authority. + A research institute which is not part of a university, government, hospital or corporation. An independent research institute may have a close relationship with a larger institution such as a university, but is not part of the larger insitution and operates under its own authority. + + + + + + + + + + Steven J. Langdon + 2021-03-25T20:08:34Z + + + + + + + + + https://orcid.org/0000-0001-8384-3385 + Charles A. Simenstad + 2021-03-25T20:09:56Z + + + + + + + + Willy Dunne + 2021-04-20T16:21:59Z + + + + + + + + + Tobias Schworer + 2021-03-25T20:08:28Z + + + + + + + + https://orcid.org/0000-0002-8103-475X + Mark Rains + 2021-03-25T20:09:48Z + + + + + + + + + + + + + contributedDataTo + 2021-04-22T03:47:22Z + + + + + + + + Using skos:closeMatch rather than skos:exactMatch because schema.org does not provide an inverse property to https://schema.org/affiliation. We define the inverse of 'affiliateOf' as 'hasAffiliate'. + https://schema.org/affiliation + + + + + + http://en.wikipedia.org/wiki/Alaska_panhandle +https://www.wikidata.org/wiki/Q198710 + The southeastern portion of the coast of the State of Alaska, which lies just west of the northern half of the Canadian province of British Columbia. The majority of the panhandle's area is part of the Tongass National Forest, the United States's largest national forest. In many places, the international border runs along the crest of the Boundary Ranges of the Coast Mountains. + + + + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#yukon +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Larger than the state of Texas and home to the third longest river in the United States, the Yukon region is a governance mosaic of state and federal fisheries management. + +The bounding coordinates for this SASAP region are: +North: 69.0792 degrees +South: 58.8686 degrees +East: -129.1775 degrees +West: -166.281 degrees + + + + + + http://en.wikipedia.org/wiki/Alaska_Peninsula +https://www.wikidata.org/wiki/Q119285 + A peninsula extending about 800 km to the southwest from the mainland of Alaska and ending in the Aleutian Islands. The peninsula separates the Pacific Ocean from Bristol Bay, an arm of the Bering Sea. + + + + + + http://en.wikipedia.org/wiki/Norton_Sound +https://www.wikidata.org/wiki/Q1973692 + An inlet of the Bering Sea on the western coast of the State of Alaska, south of the Seward Peninsula. It is about 240 km long and 200 km wide. The Yukon River delta forms a portion of the south shore and water from the Yukon influences this body of water. + + + + + + The National Historical Geographic Information System (NHGIS) provides easy access to summary tables and time series of population, housing, agriculture, and economic data, along with GIS-compatible boundary files, for years from 1790 through the present and for all levels of U.S. census geography, including states, counties, tracts, and blocks. + + A historical GIS project to create and freely disseminate a database incorporating all available aggregate census information for the United States between 1790 and 2010. + NHGIS + **Unsure how to classify this** + 2021-04-05T20:19:55Z + + + + National Historic Geographic Information System + + + Stephanie M. Carlson + 2021-04-20T15:54:16Z + + + + + + + + Ocean climate working group + Changing ocean working group + 2021-03-25T18:47:23Z + + + + + + https://orcid.org/0000-0002-4643-5718 + Frank Davis + 2021-03-25T19:55:01Z + + + + + + + + James Fall + 2021-03-25T20:08:46Z + + + + + + + + An Organization (or ProgramMembership) to which this Person or Organization belongs. + memberOf + + + + + + + + + + https://en.wikipedia.org/wiki/Tribe_(Native_American) +https://www.wikidata.org/wiki/Q7840353 + In the United States, an American Indian tribe, Native American tribe, Alaska Native village, tribal nation, or similar concept is any extant or historical clan, tribe, band, nation, or other group or community of Native Americans in the United States. + + + + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=about.mission + A department within the government of Alaska which manages approximately 750 active fisheries, 26 game management units, and 32 special areas, with a mission, "To protect, maintain, and improve the fish, game, and aquatic plant resources of the state, and manage their use and development in the best interest of the economy and the well-being of the people of the state, consistent with the sustained yield principle." + + + + + + https://firstalaskans.org/Alaska-Native-Policy-Center/overview/ + The Alaska Native Policy Center (Policy Center) is a project of the First Alaskans Institute created to support the Native voice and perspective in the public policy-making process. The Policy Center connects people and ideas producing knowledge that can be used to understand and improve the lives of Alaska Natives and all Alaskans. The Policy Center uses a proactive and forward- thinking approach, a focus that is statewide, and a relationship with the Native community that helps Alaska Native leaders and other policy makers access information they can use to help achieve healthy, thriving communities. + + + + + + http://www.chistochinaenterprises.com/ + Chistochina Enterprises is a wholly owned Section 17 Corporation authorized by the 1934 Indian Reorganization Act, formed under a Federal charter to represent the business interests of Cheesh'na and as a means of investing in the future of the Tribe. Chistochina Enterprises is governed by a five member Board of Director initially appointed by Cheesh'na Tribal Council. The main office is located in Chistochina, Alaska, and the enterprise is licensed to conduct business in the State of Alaska and nationally as outlined in its Federal charter. + + + + + + SALMoN + + + A community-based ecological monitoring program initiated by the Stika Conservation Society and the Sitka Sound Science Center, and with close coordination with the USFS Tongass National Forest, and whose purpose is to engage community members in credible ecological monitoring and adaptive management that supports both the health of the environment of Southeast Alaska and the communities living there. This program implements ecological monitoring projects that provide substantive opportunities for community members, especially students, to practice natural resource stewardship, supports management needs, and informs decision-making. + Southeast Alaska Long-term Monitoring Network + The SALMoN website is accessible at: http://www.seakecology.org/ + 2021-04-05T20:06:49Z + + + **Unsure how to classify this** + + + https://en.wikipedia.org/wiki/Arctic_Alaska +https://www.wikidata.org/wiki/Q3245148 + Arctic Alaska or Far North Alaska is a region of the U.S. state of Alaska generally referring to the northern areas on or close to the Arctic Ocean. + + + + + + hasLeadResearcher + 2021-03-25T19:45:52Z + + + + + + + Taylor Brelsford + 2021-03-25T20:08:42Z + + + + + + + + https://orcid.org/0000-0003-1488-820X + Dennis Whigham + 2021-03-25T20:10:04Z + + + + + + + + Greg Ruggerone + 2021-04-20T16:32:58Z + + + + + + + + + Ginny Litchfield + 2021-04-20T16:19:46Z + + + + + + + + + + + + + + + + http://www.mstc.org/ + Mt. Sanford Tribal Consortium (Kelt’aeni) is a tribal consortium of two federally recognized Tribal Councils of Chistochina and Mentasta Lake. The consortium was established on June 26, 1992 under a joint effort by Chistochina Village and Mentasta Village to advance and protect common interests of the descendants of the Upper Ahtna indigenous people. + + + + + + Michael L. Jones + 2021-03-25T20:09:31Z + + + + + + + + https://mtalab.adfg.alaska.gov/ + A department within the government of Alaska, which aims to provide fisheries managers and researchers with timely, current, and historical biological data to help them manage, preserve, protect, and perpetuate Alaska's fishery resources. The MTA lab refines and develops diverse methods and means for providing critical data, develops new applications to address management issues and fosters a broad information exchange. + + + + + + Andrea Akalleq Sanders + 2021-04-20T17:06:17Z + + + + + + + + Ed Farley + 2021-04-20T16:30:47Z + + + + + + + + + Steve Baird + 2021-04-20T16:18:46Z + + + + + + + + + + + + + http://orcid.org/0000-0002-5300-3075 + A collection of datasets. + + + + + + https://schema.org/affiliation + An organization that this person is affiliated with. For example, a school/university, a club, or a team. + + + + + + + + + + + + + https://inletkeeper.org/about/ + A community-based nonprofit organization that combines advocacy, education and science toward its mission to protect Alaska’s Cook Inlet watershed and the life it sustains. Inletkeeper’s monitoring and science work builds credibility with scientists and resource managers, its education and advocacy efforts enhance stewardship and citizen participation, and together, these efforts translate into Inletkeeper’s ability to effectively ensure a vibrant and healthy Cook Inlet watershed. + + + + + + Karyn DeCino + 2021-04-20T16:21:17Z + + + + + + + + + + + + Jessica Black + 2021-03-25T20:08:20Z + + + + + + + + + + + + Ryan King + 2021-03-25T20:09:43Z + + + + + + + + + 2021-04-20T16:33:31Z + + + + + + + Brendan Connors + + + + Brian Blossom + 2021-04-20T16:20:28Z + + + + + + + + + https://en.wikipedia.org/wiki/Investment_company +https://www.wikidata.org/wiki/Q1752459 + A financial institution principally engaged in investing in securites (i.e. a tradable financial asset). + + + + + + https://dps.alaska.gov/AWT/Home + A division wihtin Alaska's Department of Public Safety with a mission to protect Alaska's Natural Resources through the enfrocement wildlife statutes and regulations. + + + + + + This URI does not appear to dereference to the term. Including this URL, https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C54073, to ensure findability. + + + + + + + + + + + https://en.wikipedia.org/wiki/Government_agency +https://www.wikidata.org/wiki/Q327333 + A permanent or semi-permanent federal govenrment organization which is responsible for the oversight and administration of specific functions. + + + + + + + + + + Coowe Walker + 2021-03-25T20:09:38Z + + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#cookinlet +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Home to over 60% of Alaska’s residents, the Cook Inlet region may provide a glimpse of the future. Issues of urbanization, road building, and the rise of invasive species are increasingly prominent here. These changes are set within a context of a changing climate and increased conflict among user groups for limited salmon resources. + +The bounding coordinates for this SASAP region are: +North: 63.638 degrees +South: 58.6157 degrees +East: -146.1503 degrees +West: -154.7415 degrees + + + + + + http://www.ccthita.org/ + The Central Council of the Tlingit and Haida Indian Tribes of Alaska (Tlingit & Haida) is a tribal government representing over 32,000 Tlingit and Haida Indians worldwide. The are a sovereign entity and have a government to government relationship with the United States. + +Tlingit & Haida's headquarters are in Juneau, Alaska but their commitment to serving the Tlingit and Haida people extends throughout the United States. + + + + + + + + + + The NMFS website is accessible at: https://www.fisheries.noaa.gov/ + NMFS +NOAA Fisheries + National Marine Fisheries Service + 2021-04-20T17:24:33Z + + + + + + + Ann Fienup Riordon + 2021-04-20T17:03:34Z + + + + + + + + https://ror.org/032a13752 + Smithsonian Environmental Research Center + **Unsure how to classify this** + The Smithsonian Environmental Research Center website is accessible at: https://serc.si.edu/ + 2021-03-29T22:59:15Z + + + + + + + + + + + + + + https://www.oldharbornativecorp.com/ + Old Harbor Native Corporation (OHNC) was established in 1971 under the terms of the Alaska Native Claims Settlement Act (ANCSA). + +OHNC’s mission is to preserve and protect the culture, values and traditions of its community, shareholders and descendants; and to work together to create economic and educational opportunities while promoting self-determination and pride. + + + + + + Christian Zimmerman + 2021-04-20T16:41:34Z + + + + + + + + + Mandy Bernard + 2021-04-20T16:26:12Z + + + + + + + + + Rich Brenner + 2021-04-20T16:13:20Z + + + + + + + + containsDataFrom + 2021-04-22T03:47:36Z + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#nortonsound +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + An average of two million pink salmon and 250,000 chum salmon return to the sub-Arctic region of Norton Sound, an area approximately twice the size of Massachusetts. + +The bounding coordinates of this SASAP region are: +North: 65.8544 degrees +South: 62.8268 degrees +East: -159.1906 degrees +West: -171.9762 degrees + + + + + + Bechtol Research + Some information about Bechtol Research may be found at: https://www.alaskabids.us/alaska-contractors/contractor-5277895-BECHTOL-RESEARCH.htm + 2021-04-20T20:04:29Z + + + + + + IRES + The IRES webpage is accessible at: http://ires.ubc.ca/about-ires/ + Institute for Resources, Environment and Sustainability + 2021-04-20T17:21:43Z + + + + + + + https://earthlab.uw.edu/2018/09/center-for-creative-conservation-transitions-to-earthlab/ + Since its establishment, the Center has been a member of UW EarthLab—a new environmental institute housing other groups such as the Climate Impacts Group, the Center for Health and the Global Environment, and the Washington Ocean Acidification Center. EarthLab’s inaugural Executive Director, Ben Packard, has been working over the past year to clarify the vision, priorities and strategic outcomes for EarthLab. As this vision has taken shape, it has become clear that the activities of the Center are a key element of EarthLab. Rather than duplicating the efforts of C3 at the EarthLab level, we have decided to integrate the Center for Creative Conservation into EarthLab. + + + + + + School of Aquatic and Fishery Sciences + The UW School of Aquatic and Fishery Science webpage is accessible at: https://fish.uw.edu/ + 2021-03-29T22:58:06Z + + + + + + + + + + + https://www.usgs.gov/about/about-us + A bureau of the United Sates Departement of the Interior, which provides science about the natural hazards that threaten lives and livelihoods, the water, energy, minerals, and other natural resources we rely on, the health of our ecosystems and environment, and the impacts of climate and land-use change. + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#kuskokwim +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + The Kuskokwim region is the 4th largest of Alaska, and at 154,168 km² is comparable in size to the state of Georgia. The region drains the Kuskokwim – one of the great rivers of the world. The salmon-producing habitat of the Kuskokwim region is diverse and productive. Drier than the neighboring Bristol Bay region, the Kuskokwim region has a larger amount of burn area from forest fires than all other regions but the Yukon. + +The bounding coordinates for this SASAP region are: +North: 64.4166 degrees +South: 58.6262 degrees +East: -151.5105 degrees +West: -173.2164 degrees + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#kodiak +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + The abundance of salmon returning to the largest island in Alaska remain high, though sociocultural challenges loom as large as the 925 glaciers that cling to the island’s coastal and interior mountains. + +The bounding coordinates for this SASAP region are: +North: 59.0261 degrees +South: 56.3492 degrees +East: -151.6884 degrees +West: -156.7838 degrees + + + + + + https://ror.org/01j7nq853 + University of Alaska Fairbanks + UAF + The University of Alaska Fairbanks website is accessible at: https://www.uaf.edu/uaf/ + 2021-04-20T17:17:00Z + + + + + + + + + + + + + + Trent Sutton + 2021-04-20T16:40:42Z + + + + + + + + + Michael Opheim + 2021-04-20T16:25:39Z + + + + + + + + + https://orcid.org/0000-0001-7112-8069 + Vadim Karatayev + 2021-04-20T16:12:35Z + + + + + + + + + + http://vivoweb.org/ontology/core#AcademicDepartment + A distinct, usually specialized educational unit within an educational organization. + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#alaskapeninsulaandaleutianislands +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Although relatively small in landmass (4th smallest region) the total expanse of the Alaska Peninsula and Aleutian Island region is enormous, spanning over 1600 km (1000 miles) and 10 degrees of longitude. + +The bounding coordinates for this SASAP region are: +North: 57.2997 degrees +South: 51.1568 degrees +East: -153.6282 degrees +West: 179.8567 degrees + + + + + + Melissa Poe + 2021-04-20T17:05:18Z + + + + + + + + + + + + + A distinct, usually specialized educational unit within an educational organization. + Academic department + 2021-04-12T23:49:48Z + + + + + + + Andrew Gray + 2021-04-20T16:30:06Z + + + + + + + + + Chris Guo + 2021-04-20T16:17:58Z + + + + + + + + + + SASAP + 0.1.1 + The State of Alaska's Salmon and People Ontology + + https://orcid.org/0000-0002-5300-3075 +https://orcid.org/0000-0002-0381-3766 +https://orcid.org/0000-0003-0632-7576 +https://orcid.org/0000-0003-0077-4738 + https://creativecommons.org/publicdomain/zero/1.0/ + https://github.com/DataONEorg/sem-prov-ontologies + https://github.com/DataONEorg/sem-prov-ontologies/issues + 2021-04-19T12:45:10-07:00 + An ontology which represents information about the State of Alaska's Salmon and People (SASAP) project, as well as knowledge about salmon, features of their habitats, salmon stakeholders, and related entities. + + + https://www.commerce.alaska.gov/web/ + A department within the government of Alaska whose mission is to "Promote a healthy economy, strong communities, and protect consumers in Alaska." + + + + + + https://npafc.org/ + An international inter-governmental organization established by the Convention for the Conservation of Anadromous Stocks in the North Pacific Ocean whose primary objective is to promote the conservation of anadromous stocks in the Convention Area. The Convention Area is the international waters of the North Pacific Ocean and its adjacent seas north of 33° North beyond the 200-mile zones (exclusive economic zones) of the coastal States. + + + + + + + + + + Syverine Bentz + 2021-04-20T16:17:09Z + + + + + + + + + Kawerak, Inc. + Kawerak Inc.'s website is accessible at: https://kawerak.org/ + 2021-04-20T17:45:08Z + + + + + + https://orcid.org/0000-0001-8842-4884 + Sara Jo Breslow + 2021-04-20T17:04:16Z + + + + + + + + Jacob Argueta + 2021-04-20T16:27:25Z + + + + + + + + + http://en.wikipedia.org/wiki/Prince_William_Sound +https://www.wikidata.org/wiki/Q631282 + A sound of the Gulf of Alaska on the south coast of the State of Alaska. It is located on the east side of the Kenai Peninsula. + + + + + + Quatitative Fisheries Center + Department of Fisheries and Wildlife Quantitative Fisheries Center + The Department of Fisheries and Wildlife Quantitative Fisheries Center webpage is accessible at: https://www.canr.msu.edu/qfc/ + 2021-03-29T22:59:25Z + + + + + + + Alice Rademacher + 2021-04-20T16:26:39Z + + + + + + + + + Gale Vick + 2021-04-20T16:14:25Z + + + + + + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#princewilliamsound +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Prince William Sound is a region of rain, icefields, and glaciers. Only two (Whittier and Valdez) of Prince William Sound’s largest human communities are connected via road. The terminus of the Alaska oil pipeline ends in this region and results in a fairly high footprint of human activity in a relatively small region. Pink salmon, chum salmon, and sockeye salmon fisheries are current mainstays of local communities with hatchery enhancement of these species (particularly pink salmon) a fundamental dynamic in the region. + +The bounding coordinates of this SASAP region are: +North: 61.5189 degrees +South: 59.357 degrees +East: -145.1013 degrees +West: -149.1761 degrees + + + + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=fishingcommercialbyarea.southcentral + Central Region Alaska commercial fisheries are composed of four distinct management areas that include Bristol Bay, Prince William Sound and Copper River, Upper Cook Inlet, and Lower Cook Inlet. Although all 5 species of salmon are harvested in each area, sockeye and pink salmon are the most abundant and most valuable. This area encompasses some of the largest and most valuable salmon fisheries in the world. From Bristol Bay, home of the largest sockeye salmon fishery in the world, to the Copper River where sockeye and Chinook salmon fetch some of the highest prices per pound paid to commercial fishermen. Cook Inlet commercial fisheries occur near the largest population center in Alaska, providing salmon to numerous niche and local markets, as well as fresh salmon to markets in other states. Prince William Sound adds productive healthy pink, chum, and sockeye salmon fisheries to the region. Southcentral groundfish fisheries are small, yet diverse, targeting pollock, Pacific cod, rockfish, sablefish, lingcod, and skate while small shrimp and scallop fisheries in Prince William Sound cater predominately to local markets. Southcentral commercial fisheries are of tremendous importance and an integral part of many communities and local economies in the state. + + + + + + A river in south-central Alaska in the United States. It drains a large region of the Wrangell Mountains and Chugach Mountains into the Gulf of Alaska. The Copper River rises out of the Copper Glacier, which lies on the northeast side of Mount Wrangell, in the Wrangell Mountains, within Wrangell-Saint Elias National Park. It begins by flowing almost due north in a valley that lies on the east side of Mount Sanford, and then turns west, forming the northwest edge of the Wrangell Mountains and separating them from the Mentasta Mountains to the northeast. It continues to turn southeast, through a wide marshy plain to Chitina, where it is joined from the southeast by the Chitina River. Downstream from its confluence with the Chitina it flows southwest, passing through a narrow glacier-lined gap in the Chugach Mountains east of Cordova Peak. There is an extensive area of sand dunes between the Copper and Bremner Rivers. Both Miles Glacier and Child's Glacier calve directly into the river. + http://purl.obolibrary.org/obo/GAZ_00197403 + Copper River + Fewer than 2500 people live permanently in the Copper River region, an area comparable in size to the state of West Virginia. Sockeye salmon are dominant here, given the multiple large lakes available for rearing juvenile salmon. Though less abundant than sockeye, king salmon are deeply important to all salmon-connected people. Kings have declined in number since 2007. + +The bounding coordinates for this SASAP region are: +North: 63.3227 degrees +South: 59.7112 degrees +East: -139.6942 degrees +West: -147.8251 degrees + 2021-03-24T21:28:12Z + + + + + + + + + + Data Task Force + An essential component of the SASAP working group process is the support each group received from a stellar group of “data wranglers”, a team of geospatial analysis experts from NCEAS known as the Data Task Force. + +The Task Force coordinated hundreds of data requests from Alaska Department of Fish and Game and other agencies and organizations, then worked to reformat, integrate, and run quality control on millions of lines of data in over 125 data sets. + +The graphs, figures, and infograms generated by the Task Force greatly enhanced the ability of users to visualize often complex information about Alaska salmon. + 2021-03-29T18:12:03Z + + + + + + Department of Anthropology + The UAA Department of Anthropology webpage is accessible at: https://www.uaa.alaska.edu/academics/college-of-arts-and-sciences/departments/anthropology/ + 2021-03-29T23:00:42Z + + + + + + + A large estuary stretching 180 miles from the Gulf of Alaska to Anchorage in south-central Alaska. It separates the Kenai Peninsula from mainland Alaska and branches into the Knik Arm and Turnagain Arm at its northern end, almost surrounding Anchorage. The watershed covers about 100,000 km2 of southern Alaska, east of the Aleutian Range and south of the Alaska Range, receiving water from its tributaries the Knik River, the Little Susitna River, and the Susitna and Matanuska rivers. The watershed includes the drainage areas of Mount McKinley. Within the watershed there are several national parks and four historically active volcanoes. + http://purl.obolibrary.org/obo/GAZ_00051076 + Cook Inlet + Home to over 60% of Alaska’s residents, the Cook Inlet region may provide a glimpse of the future. Issues of urbanization, road building, and the rise of invasive species are increasingly prominent here. These changes are set within a context of a changing climate and increased conflict among user groups for limited salmon resources. + +The bounding coordinates for this SASAP region are: +North: 63.638 degrees +South: 58.6157 degrees +East: -146.1503 degrees +West: -154.7415 degrees + 2021-03-24T21:28:08Z + + + + + + The North Slope Borough is the northernmost borough in the US state of Alaska. + North Slope Borough + The North Slope Borough's website is accessible at: https://www.north-slope.org/ + 2021-04-20T22:56:53Z + + + + + + Kuskokwim River Salmon Management Working Group + **Unsure how to classify this** + The Kuskokwim River Salmon Management Working Group (KRSMWG) was formed in 1988 by the Alaska Board of Fisheries (BOF) in response to requests from stakeholders in the Kuskokwim Area who sought a more active role in the management of salmon fishery resources. + +The Working Group is made up of 14 member seats representing elders, subsistence fishermen, processors, commercial fishermen, sport fishermen, Kuskokwim River Inter-Tribal Fish Commission, member at large, federal subsistence regional advisory committees, and the Alaska Department of Fish and Game. Non-agency members participate on a voluntary basis and receive no compensation. Participation in the Working Group process requires a great deal of time from its members and agency staff. + +The relationship among Working Group members, research planners, project leaders, and policy makers is fostered, and these interactions are critical to the aim of the Working Group. This relationship ensures that participants remain up-to-date on new information and maintain their direct involvement in management of Kuskokwim River salmon fisheries. + 2021-04-20T21:05:05Z + + + + + + ESSA Technologies, Ltd. + ESSA Technologies website is accessible at: https://essa.com/ + 2021-04-20T19:34:57Z + + + + + + https://www.legfin.akleg.gov/AgencyInfo/AboutLFD.php + A department within the government of Alaska which provides non-partisan budgetary and fiscal analysis to the Alaska Legislature. + + + + + + + + + + Freddie Christiansen + 2021-04-20T17:09:25Z + + + + + + + + Karen Dunmall + 2021-04-20T16:35:58Z + + + + + + + + + https://en.wikipedia.org/wiki/Kenai_Peninsula_Borough,_Alaska +https://www.wikidata.org/wiki/Q512713 + Kenai Peninsula Borough (Russian: Кенай боро, Kenay boro) is a borough of the U.S. state of Alaska. + + + + + + Populates the SASAP Data Portal (https://knb.ecoinformatics.org/portals/SASAP/Data) faceted search field, 'Working Group' + Working Group + + + + + + https://alaskasalmonandpeople.org/working-group/social-and-cultural-dimensions-of-salmon-systems/ + The topics explored by the Sociocultural working group are (1) social and cultural values and relationships between people and salmon, (2) trends in human populations and communities and uses of salmon, and (3) key threads to salmon-dependent communities + + + + + + https://en.wikipedia.org/wiki/Government_agency +https://www.wikidata.org/wiki/Q327333 + A permanent or semi-permanent state govenrment organization which is responsible for the oversight and administration of specific functions. + + + + + + https://www.adfg.alaska.gov/index.cfm?adfg=commercialbyareasoutheast.main + The Southeast Alaska/Yakutat Region (Region I) consists of Alaska waters between Cape Suckling on the north and Dixon Entrance on the south. Salmon are commercially harvested in Southeast Alaska with purse seines and drift gillnets; in Yakutat with set gillnets; and in both areas with hand and power troll gear. Herring are harvested in winter bait, sac roe, spawn-on-kelp, and bait pound fisheries. Miscellaneous shellfish (sea cucumber, sea urchins, and geoduck clams) are harvested in dive fisheries in the region. The Alaska Department of Fish and Game (ADF&G) has management jurisdiction over all groundfish resources within state waters in Region I. In addition, the State has management authority for Demersal Shelf Rockfish, ling cod, and black and blue rock fish in both state and federal waters. There are several commercially important shellfish species in Southeast Alaska. They include golden and red king crab, Dungeness crab, Tanner crab, and pandalid shrimp. + + + + + + A collection of datasets and their metadata which were curated in support of the State of Alaska's Salmon and People (SASAP) Project and accessible at the URL, https://knb.ecoinformatics.org/portals/SASAP/Data + SASAP Data Portal + State of Alaska's Salmon and People Data Portal + The State of Alaska's Salmon and People (SASAP) project is a collaboration of researchers, cultural leaders, and others working to bring together integrated, accurate, and up-to-date information that will help to support better salmon decision-making. + 2021-03-29T17:34:06Z + + + + + + EEB +UCSC EEB + Department of Ecology and Evolutionary Biology + The UCSC Department of Ecology and Evolutionary Biology webpage is accessible at: https://www.eeb.ucsc.edu/ + 2021-03-29T23:00:02Z + + + + + + + http://purl.obolibrary.org/obo/GAZ_00197745 +http://purl.obolibrary.org/obo/GAZ_00197347 +http://purl.obolibrary.org/obo/GAZ_00262790 + Chignik + Despite being the smallest salmon-people region of Alaska (6,587 km²), Chignik is remarkably rich in habitat diversity–which translates into biological diversity of its salmon. The Chignik region is home to multiple dispersed communities such as Chignik Lake, Chignik Lagoon, Chignik Bay, Perryville, and Ivanof Bay. + +The bounding coordinates for this SASAP region are: +North: 57.142 degrees +South: 55.5261 degrees +East: -155.4645 degrees +West: -159.6479 degrees + 2021-03-24T21:27:57Z + + + + + + Danielle Ringer + 2021-04-19T23:48:38Z + + + + + + + + + + + + + Calista Education and Culture, Inc. + Calista Elders Council + The Calista Elders Council was established in 1991 as a non-profit organization representing 1,300 Yup'ik traditional bearers of the Yukon-Kuskokwim Delta in Southwest Alaska. The Calista Elders Council was formed to help protect and preserve the Yup’ik, Cup’ik and Athabascan cultures. + +In 2014, after a 20 year history of interacting and working together, the Calista Elders Council, Inc. merged with the former Calista Heritage Foundation to form what is now Calista Education and Culture, Inc. + 2021-04-20T22:49:17Z + + + + + + Rutgers University +Rutgers +RU + https://ror.org/05vt9qd57 + Rutgers, The State University of New Jersey + RU's website is accessible at: https://www.rutgers.edu/ + 2021-04-20T20:32:34Z + + + + + + Mike Williams + 2021-04-20T17:08:50Z + + + + + + + + + https://orcid.org/0000-0002-5314-0109 + Jim Irvine + 2021-04-20T16:34:39Z + + + + + + + + + UW + https://ror.org/00cvxb145 + University of Washington + Learn more about UW at their website: https://www.washington.edu/ + 2021-04-20T19:46:36Z + + + + + + School of Geosciences + The USF School of Geosciences webpage is accessible at: http://hennarot.forest.usf.edu/main/depts/geosci/ + 2021-03-29T22:57:58Z + + + + + + + Nautilus Impact Investing, LLC + 2021-03-29T23:05:25Z + + + + + + http://purl.obolibrary.org/obo/GAZ_22223765 +http://purl.obolibrary.org/obo/GAZ_00132744 +http://purl.obolibrary.org/obo/GAZ_00198349 + Kotzebue + Straddling the Arctic Circle, the Kotzebue region is twice the size of West Virginia and categorized as among the driest areas of Alaska. Chum salmon is the primary species in this region and is harvested by local users in both subsistence and commercial fisheries. + +The bounding coordinates for this SASAP region are: +North: 68.9178 degrees +South: 65.3082 degrees +East: 65.3082 degrees +West: -169.0513 degrees + 2021-03-24T21:28:35Z + + + + + + https://ror.org/005781934 + Baylor University + The Baylor University website is accessible at: https://www.baylor.edu/ + 2021-03-29T22:57:21Z + + + + + + AYK SSI +AYK Sustainable Salmon Initiative + Arctic-Yukon-Kuskokwim Sustainable Salmon Initiative + In response to salmon declines, Bering Sea Fishermen’s Association and regional Native organizations (Association of Village Council Presidents, Kawerak, Inc., and Tanana Chiefs Conference) joined with state and federal agencies to create the AYK SSI, a proactive science-based program working cooperatively to identify and address the critical salmon research needs facing this region. The AYK SSI is the largest example of co-management of research-funding addressing salmon within the Pacific Rim and one of the largest, most successful programs of its kind in North America. + +The AYK SSI website is accessible at: https://www.aykssi.org/ + 2021-04-20T19:43:45Z + + + + + + + + + + Carrie Stevens + 2021-04-20T17:11:42Z + + + + + + + + https://orcid.org/0000-0003-4833-2007 + Todd Sformo + 2021-04-20T16:39:25Z + + + + + + + + + Katie McCafferty + 2021-04-20T16:24:20Z + + + + + + + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#chignik +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Despite being the smallest salmon-people region of Alaska (6,587 km²), Chignik is remarkably rich in habitat diversity–which translates into biological diversity of its salmon. The Chignik region is home to multiple dispersed communities such as Chignik Lake, Chignik Lagoon, Chignik Bay, Perryville, and Ivanof Bay. + +The bounding coordinates for this SASAP region are: +North: 57.142 degrees +South: 55.5261 degrees +East: -155.4645 degrees +West: -159.6479 degrees + + + + + + DESP + Department of Environmental Science & Policy + DESP's webpage is accessible at: https://desp.ucdavis.edu/ + 2021-04-20T21:10:29Z + + + + + + + Institute of Social and Economic Research + The UAA Institute of Social and Economic Research webpage is accessible at: https://www.uaa.alaska.edu/research/institute-social-economic-research/ + 2021-03-29T23:01:04Z + + + + + + + A large island on the south coast of the State of Alaska, separated from the Alaska mainland by the Shelikof Strait. + http://purl.obolibrary.org/obo/GAZ_00050020 + Kodiak + The abundance of salmon returning to the largest island in Alaska remain high, though sociocultural challenges loom as large as the 925 glaciers that cling to the island’s coastal and interior mountains. + +The bounding coordinates for this SASAP region are: +North: 59.0261 degrees +South: 56.3492 degrees +East: -151.6884 degrees +West: -156.7838 degrees + 2021-03-24T21:28:29Z + + + + + + https://alaskasalmonandpeople.org/working-group/biophysical-information-on-salmon-distribution-and-habitat/ + The goal of the to Biophysical working group is to compare and contrast the status of Alaska salmon and their habitats across regions. + + + + + + https://en.wikipedia.org/wiki/National_Historical_Geographic_Information_System + A historical GIS project to create and freely disseminate a database incorporating all available aggregate census information for the United States between 1790 and 2010. + + + + + + https://alaskasalmonandpeople.org/about/process-people/ + Beginning in 2016, nine SASAP working groups formed – each composed of between 12 and 24 knowledge experts from a range of disciplines, backgrounds, and regions. Each participant brought his or her data and experiences for synthesis and analysis, while NCEAS provided logistical and technical support to facilitate each group’s innovative work. + +Each of the nine groups focused on specific issues related to salmon and people in Alaska: + +Four SASAP groups were tasked with integrating knowledge across multiple disciplines to understand the fundamental state of knowledge of Alaska’s salmon systems. The work of each group is presented for each of the major watersheds in Alaska in the Region section (https://alaskasalmonandpeople.org/regions/). + +An additional five working groups were selected to focus on specific research questions that provide insight into the pressures on salmon and salmon communities, as well as options for response to those pressures. Their work is presented in the Special Topics section (https://alaskasalmonandpeople.org/topics/). + + + + + + http://vivoweb.org/ontology/core#University + An institution of higher education and research, which grants academic degrees in a variety of subjects, and provides both undergraduate education and postgraduate education. + + + + + + + + + KBNERR + Kachemak Bay National Estuarine Research Reserve + The KBNERR website is accessbile at: https://accs.uaa.alaska.edu/kbnerr/ + 2021-03-29T22:57:11Z + + + + + + UAA + https://ror.org/03k3c2t50 + University of Alaska Anchorage + The UAA website is accessible at: https://www.uaa.alaska.edu/ + 2021-03-29T23:00:51Z + + + + + + KRITFC + Kuskokwim River Inter-Tribal Fish Commission + KRITFC's website is accessible at: https://www.kuskosalmon.org/ + 2021-04-20T21:07:27Z + + + + + + FAAS + School of Fisheries, Aquaculture & Aquatic Sciences + The FAAS webpage is accessible at: https://agriculture.auburn.edu/research/faas/ + 2021-04-20T19:38:05Z + + + + + + + William Voinot-Baron + 2021-04-20T17:10:53Z + + + + + + + + Mike Malick + 2021-04-20T16:36:53Z + + + + + + + + + Sue Mauger + 2021-04-20T16:22:44Z + + + + + + + + + https://alaskasalmonandpeople.org/regions/ + The thirteen SASAP regions were determined based on their geography, and in many cases represent large watersheds where all precipitation melts and flows into the same part of the ocean. Regions tend to also be grouped by Indigenous cultures and languages, evidence of the deep-time ties between Alaska’s salmon and people. Some regions align with current Alaska Department of Fish & Game (ADF&G) statistical areas; some do not. + +The bounding coordinates and shapefiles for each region are accessible at: https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + + + + + + + + + + This URI does not appear to dereference to the term. Including this URL, https://bioportal.bioontology.org/ontologies/NCIT?p=classes&conceptid=http%3A%2F%2Fncicb.nci.nih.gov%2Fxml%2Fowl%2FEVS%2FThesaurus.owl%23C54073, to ensure findability. + + + + + + + http://www.seakecology.org/about-us/ + A community-based ecological monitoring program initiated by the Stika Conservation Society and the Sitka Sound Science Center, and with close coordination with the USFS Tongass National Forest, and whose purpose is to engage community members in credible ecological monitoring and adaptive management that supports both the health of the environment of Southeast Alaska and the communities living there. This program implements ecological monitoring projects that provide substantive opportunities for community members, especially students, to practice natural resource stewardship, supports management needs, and informs decision-making. + + + + + + Coastal Cultures Research + **Unsure how to classify this** + The Coastal Cultures Research website is accessible at: https://www.coastalculturesresearch.com/ + 2021-03-29T22:59:44Z + + + + + + A peninsula extending about 800 km to the southwest from the mainland of Alaska and ending in the Aleutian Islands. The peninsula separates the Pacific Ocean from Bristol Bay, an arm of the Bering Sea. + http://purl.obolibrary.org/obo/GAZ_00055133 + Alaska Peninsula/Aleutian Islands + Although relatively small in landmass (4th smallest region) the total expanse of the Alaska Peninsula and Aleutian Island region is enormous, spanning over 1600 km (1000 miles) and 10 degrees of longitude. + +The bounding coordinates for this SASAP region are: +North: 57.2997 degrees +South: 51.1568 degrees +East: -153.6282 degrees +West: 179.8567 degrees + 2021-03-24T21:27:29Z + + + + + + + + + + + + + + http://purl.obolibrary.org/obo/GAZ_00069437 + Yukon + Larger than the state of Texas and home to the third longest river in the United States, the Yukon region is a governance mosaic of state and federal fisheries management. + +The bounding coordinates for this SASAP region are: +North: 69.0792 degrees +South: 58.8686 degrees +East: -129.1775 degrees +West: -166.281 degrees + 2021-03-24T21:29:06Z + + + + + + + An organization whose primary objective is to support some issue or matter of private interest or public concern for non-commercial purposes. Nonprofits generally do not operate to generate profit, and this characteristic is popularly considered to be the defining characterisitic of such organizations. However, a non-profit organization may accept, hold and disburse money and other things of value. It may also legally and ethically trade at a profit. The extent to which it can generate income may be constrained, or the use of those profits may be restricted. + Nonprofit +Non-profit +Nonprofit organization +NPO +Nonprofit group +Non-profit organization +Not for profit organization + Nonprofit organization + 2021-03-25T18:01:44Z + + + + + + The Alaska Department of Labor and Workforce Development (DOLWD) is a department within the govenrment of Alaska which handles most of the state's labor and workforce issues, primarily at the administrative level. + https://ror.org/05pc4pd06 + Alaska Department of Labor and Workforce Development + 2021-03-25T18:04:28Z + + + + + + + Alex Whiting + 2021-04-20T00:00:12Z + + + + + + + + Museum + 2021-04-21T17:30:14Z + + + + + + hasAdvisor + 2021-04-19T23:40:58Z + + + + + + + + A member of an Organization or a ProgramMembership. Organizations can be members of organizations; ProgramMembership is typically for individuals. + member + + + + + + + USACE +US Army Corps of Engineers + United States Army Corps of Engineers + UCACE's website is accessible at: https://www.usace.army.mil/ + 2021-04-20T23:28:01Z + + + + + + The Mt. Sanford Tribal Consortium's website is accessible at: http://www.mstc.org/ + Mt. Sanford Tribal Consortium (Kelt’aeni) is a tribal consortium of two federally recognized Tribal Councils of Chistochina and Mentasta Lake. The consortium was established on June 26, 1992 under a joint effort by Chistochina Village and Mentasta Village to advance and protect common interests of the descendants of the Upper Ahtna indigenous people. + Mt. Sanford Tribal Consortium + 2021-04-20T22:26:16Z + + + + + + WSG +Sea Grant Washington + Washington Sea Grant + WSG's website is accessible at: https://wsg.washington.edu/ + 2021-04-20T20:14:57Z + + + + + + + In the United States, an American Indian tribe, Native American tribe, Alaska Native village, tribal nation, or similar concept is any extant or historical clan, tribe, band, nation, or other group or community of Native Americans in the United States. + American Indian tribe +Native American tribe +Alaska Native village +Native village + Tribal nation + 2021-04-20T17:59:45Z + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#bristolbay +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Bristol Bay is sockeye salmon country. The region is a land of great inland lakes, ideally suited to the juvenile life of sockeye salmon. The habitats here are virtually pristine and intact with a notable absence of mining and offshore oil and gas exploration in the region. The long proposed Pebble Mine, situated at the intersection between the Nushagak River and Kvichak River watersheds, would unquestionably and permanently change this salmon landscape. + +The bounding coordinates for this SASAP region are: +North: 60.9278 degrees +South: 56.8716 degrees +East: -152.7319 degrees +West: -162.2713 degrees + + + + + + https://mtalab.adfg.alaska.gov/ + The Mark Lab (https://mtalab.adfg.alaska.gov/OTO/Default.aspx) tracks Alaska's salmon populations by deciphering thermal marks induced in fish otoliths. The Tag Lab (https://mtalab.adfg.alaska.gov/CWT/Default.aspx) is the centralized state resoruce for tracking salmon using microsopic coded wire tags. The Age Determination Lab (https://mtalab.adfg.alaska.gov/ADU/Default.aspx) is a statewide age reading service which produces data for fish and invertebrates sampled during commercial, population survey, and research harvests. + + + + + + + + + https://en.wikipedia.org/wiki/United_States_Census_Bureau + A principle agency of the U.S. Federal Satistical System, whose responsibility and mission is to serve as the nation's leading provider of quality data about its people and economy. + + + + + + http://en.wikipedia.org/wiki/Copper_River_(Alaska) +https://www.wikidata.org/wiki/Q1131444 + A river in south-central Alaska in the United States. It drains a large region of the Wrangell Mountains and Chugach Mountains into the Gulf of Alaska. The Copper River rises out of the Copper Glacier, which lies on the northeast side of Mount Wrangell, in the Wrangell Mountains, within Wrangell-Saint Elias National Park. It begins by flowing almost due north in a valley that lies on the east side of Mount Sanford, and then turns west, forming the northwest edge of the Wrangell Mountains and separating them from the Mentasta Mountains to the northeast. It continues to turn southeast, through a wide marshy plain to Chitina, where it is joined from the southeast by the Chitina River. Downstream from its confluence with the Chitina it flows southwest, passing through a narrow glacier-lined gap in the Chugach Mountains east of Cordova Peak. There is an extensive area of sand dunes between the Copper and Bremner Rivers. Both Miles Glacier and Child's Glacier calve directly into the river. + + + + + + + + + https://ror.org/0551hes90 + Prince William Sound Science Center + The Prince William Sound Center website is accessible at: https://pwssc.org/ + 2021-03-29T22:59:33Z + + + + + + SASAP Region + Populates the SASAP Data Portal (https://knb.ecoinformatics.org/portals/SASAP/Data) faceted search field, 'SASAP Region' + The thirteen SASAP regions were determined based on their geography, and in many cases represent large watersheds where all precipitation melts and flows into the same part of the ocean. Regions tend to also be grouped by Indigenous cultures and languages, evidence of the deep-time ties between Alaska’s salmon and people. Some regions align with current Alaska Department of Fish & Game (ADF&G) statistical areas; some do not. + +The bounding coordinates and shapefiles for each region are accessible at: https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + 2021-03-24T21:24:20Z + + + + + A collaborative project which seeks to provide a holistic, statewide overview of the status and characteristics of Alaska's coupled human-salmon system. + SASAP +SASAP Project + The State of Alaska's Salmon and People Project + The SASAP project is a deep assessment of the state of knowledge of the biological, sociocultural, economic and governance dimensions of Alaska's salmon and the people who depend upon them. The SASAP project shares this knowledge with Alaska salmon users through comprehensive watershed-level summaries (Regions), focused research on specific salmon issues (Topics), and suppported links to SASAP's free, open-source datasets, accessible through the SASAP Data Portal (https://knb.ecoinformatics.org/portals/SASAP/Data). + 2021-03-30T20:31:38Z + + + + + + The southeastern portion of the coast of the State of Alaska, which lies just west of the northern half of the Canadian province of British Columbia. The majority of the panhandle's area is part of the Tongass National Forest, the United States's largest national forest. In many places, the international border runs along the crest of the Boundary Ranges of the Coast Mountains. + http://purl.obolibrary.org/obo/GAZ_00055328 + Southeast Alaska +Alaska Panhandle +Alaskan Panhandle + Southeast + Approximately the size of the state of Kansas, the Southeast region is categorized by thousands of small coastal watersheds that provide ideal spawning habitat for pink salmon and chum salmon in particular. All five species are caught and return to this region. In terms of total abundance of salmon, Southeast Alaska dominates the state. Managing and conserving salmon populations that move beyond international borders is a key challenge here as many of the Chinook salmon caught in Southeast were hatched outside Alaska. + +The bounding coordinates for this SASAP region are: +North: 61.6887 degrees +South: 54.2508 degrees +East: -126.7735 degrees +West: -143.8874 degrees + 2021-03-24T21:29:03Z + + + + + + + + + + http://purl.bioontology.org/ontology/MESH/D035082 + + A permanent or semi-permanent federal govenrment organization which is responsible for the oversight and administration of specific functions. + Federal government department, division, or agency + 2021-03-25T18:01:18Z + + + + + + The Mark Lab (https://mtalab.adfg.alaska.gov/OTO/Default.aspx) tracks Alaska's salmon populations by deciphering thermal marks induced in fish otoliths. The Tag Lab (https://mtalab.adfg.alaska.gov/CWT/Default.aspx) is the centralized state resoruce for tracking salmon using microsopic coded wire tags. The Age Determination Lab (https://mtalab.adfg.alaska.gov/ADU/Default.aspx) is a statewide age reading service which produces data for fish and invertebrates sampled during commercial, population survey, and research harvests. + MTA +MTA Lab + + + Alaska Department of Fish and Game, Mark, Tag and Age Laboratory + + + + A department within the government of Alaska, which aims to provide fisheries managers and researchers with timely, current, and historical biological data to help them manage, preserve, protect, and perpetuate Alaska's fishery resources. The MTA lab refines and develops diverse methods and means for providing critical data, develops new applications to address management issues and fosters a broad information exchange. + 2021-03-25T18:04:24Z + + + An international inter-governmental organization established by the Convention for the Conservation of Anadromous Stocks in the North Pacific Ocean whose primary objective is to promote the conservation of anadromous stocks in the Convention Area. The Convention Area is the international waters of the North Pacific Ocean and its adjacent seas north of 33° North beyond the 200-mile zones (exclusive economic zones) of the coastal States. + NPAFC + North Pacific Anadromous Fish Commission + The North Pacific Anadrmous Fish Commission's website is accessbile at: https://npafc.org/ + 2021-03-25T18:06:17Z + + + + + + + Janessa Esquible + 2021-04-20T15:46:03Z + + + + + + + + TCC + Tanana Chiefs Conference + The Tanana Chiefs Conference website is accessible at: https://www.tananachiefs.org/ + 2021-04-21T17:25:34Z + + + + + + Ben Stevens + 2021-04-19T23:59:58Z + + + + + + + + SVT's website is accessible at: https://svt.org/ + SVT + Seldovia Village Tribe + 2021-04-20T23:26:20Z + + + + + + hasSupportingResearcher + 2021-04-19T21:20:01Z + + + + + + + Georgetown Tribe + Native Village of Georgetown + Find more information about the Native Village of Georgetown at: https://www.bia.gov/tribal-leaders/georgetown + 2021-04-20T21:34:02Z + + + + + + Federal/state partnerships and programs + 2021-04-20T20:14:46Z + + + + + + YRITFC + Yukon River Inter-Tribal Fish Commission + https://salmonlife.org/yellow/stewardship/one-voice-one-river/ + 2021-04-20T17:50:28Z + + + + + + https://labor.alaska.gov/ + https://en.wikipedia.org/wiki/Alaska_Department_of_Labor_and_Workforce_Development + The Alaska Department of Labor and Workforce Development (DOLWD) is a department within the govenrment of Alaska which handles most of the state's labor and workforce issues, primarily at the administrative level. + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.cfoverview + A department within the government of Alaska which manages commercial, subsistence, and personal use fisheries within the jurisdiction of the State of Alaska. + + + + + + https://alaskasalmonandpeople.org/working-group/economic-dimensions-of-salmon-systems/ + The goals of the Economic working group are to (1) identify important trends in the historical relationships between salmon and salmon users which may have been overlooked, (2) inform and support evidence-based policy aimed at sustainable and equitable decision making, and (3) compile, archive, and share relevant historical socioeconomic data about Alaska's salmon systems. + + + + + + A department within the government of Alaska which helps to conserve and maintain the economic health of Alaska’s commercial fisheries by limiting the number of participating fishers. The Commission issues permits and vessel licenses to qualified individuals in both limited and unlimited fisheries, and provides due process hearings and appeal processes for disputes related to limitations on fishery participation. + Alaska Department of Fish and Game, Commercial Fisheries Entry Commission + + + + + + CFEC + 2021-03-25T18:03:30Z + The CFEC website is accessible at: https://cfec.state.ak.us/ + + + https://alaskasalmonandpeople.org/ + A collaborative project which seeks to provide a holistic, statewide overview of the status and characteristics of Alaska's coupled human-salmon system. + + + + + + + + + + + + + A collection of datasets. + Data corpus + 2021-03-29T17:33:25Z + + + + + College of Fisheries & Ocean Sciences + The UAF College of Fisheries & Ocean Sciences webpage is accessible at: https://www.uaf.edu/cfos/ + 2021-03-29T22:59:55Z + + + + + + + The eastern-most arm of the Bering Sea. It is located between the southwest part of the Alaska mainland to its north, and the Alaska Peninsula to its south and east. Bristol Bay is 400 km long and 290 km wide at its mouth. A number of rivers flow into the bay, including the Cinder, Igushik, Kvichak, Meshik, Nushagak, Naknek, Togiak, and Ugashik. + http://purl.obolibrary.org/obo/GAZ_00055147 + Bristol Bay + Bristol Bay is sockeye salmon country. The region is a land of great inland lakes, ideally suited to the juvenile life of sockeye salmon. The habitats here are virtually pristine and intact with a notable absence of mining and offshore oil and gas exploration in the region. The long proposed Pebble Mine, situated at the intersection between the Nushagak River and Kvichak River watersheds, would unquestionably and permanently change this salmon landscape. + +The bounding coordinates for this SASAP region are: +North: 60.9278 degrees +South: 56.8716 degrees +East: -152.7319 degrees +West: -162.2713 degrees + 2021-03-24T21:27:48Z + + + + + + + + + + A department within the government of Alaska which manages approximately 750 active fisheries, 26 game management units, and 32 special areas, with a mission, "To protect, maintain, and improve the fish, game, and aquatic plant resources of the state, and manage their use and development in the best interest of the economy and the well-being of the people of the state, consistent with the sustained yield principle." + https://ror.org/02rh7vj17 + Alaska Department of Fish and Game + 2021-03-25T18:03:25Z + + + + + + + Jesse Coleman + 2021-04-19T23:46:33Z + + + + + + + + + Alaska Fisheries Science Center + The Alaska Fisheries Science Center's website is accessible at: https://www.fisheries.noaa.gov/about/alaska-fisheries-science-center + 2021-04-21T16:03:29Z + + + + + + + The Alaska Native Policy Center (Policy Center) is a project of the First Alaskans Institute created to support the Native voice and perspective in the public policy-making process. The Policy Center connects people and ideas producing knowledge that can be used to understand and improve the lives of Alaska Natives and all Alaskans. The Policy Center uses a proactive and forward- thinking approach, a focus that is statewide, and a relationship with the Native community that helps Alaska Native leaders and other policy makers access information they can use to help achieve healthy, thriving communities. + Alaska Native Policy Center + The Alaska Native Policy Center at the First Alaskans Institute's website is accessible at: https://firstalaskans.org/Alaska-Native-Policy-Center/overview/ + 2021-04-20T22:31:05Z + + + + + + SFU + https://ror.org/0213rcc28 + Simon Fraser University + SFU's website is accessible at: https://www.sfu.ca/ + 2021-04-20T20:29:55Z + + + + + + The Central Council of the Tlingit and Haida Indian Tribes of Alaska (Tlingit & Haida) is a tribal government representing over 32,000 Tlingit and Haida Indians worldwide. The are a sovereign entity and have a government to government relationship with the United States. + +Tlingit & Haida's headquarters are in Juneau, Alaska but their commitment to serving the Tlingit and Haida people extends throughout the United States. + Central Council of the Tlingit & Haida Indian Tribes of Alaska + The Central Council of the Tlingit and Haida Indian Tribes of Alaska website is accessbile at: http://www.ccthita.org/ + 2021-04-20T18:49:58Z + + + + + + Jonathan Samuelson + 2021-04-20T17:07:36Z + + + + + + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=commercialbyareakuskokwim.kswg + The Kuskokwim River Salmon Management Working Group (KRSMWG) was formed in 1988 by the Alaska Board of Fisheries (BOF) in response to requests from stakeholders in the Kuskokwim Area who sought a more active role in the management of salmon fishery resources. + +The Working Group is made up of 14 member seats representing elders, subsistence fishermen, processors, commercial fishermen, sport fishermen, Kuskokwim River Inter-Tribal Fish Commission, member at large, federal subsistence regional advisory committees, and the Alaska Department of Fish and Game. Non-agency members participate on a voluntary basis and receive no compensation. Participation in the Working Group process requires a great deal of time from its members and agency staff. + +The relationship among Working Group members, research planners, project leaders, and policy makers is fostered, and these interactions are critical to the aim of the Working Group. This relationship ensures that participants remain up-to-date on new information and maintain their direct involvement in management of Kuskokwim River salmon fisheries. + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.subsmission + The Subsistence Section provides the following core services: (a) Compile and analyze existing data; conduct research to gather information on the role of hunting and fishing by Alaskans for customary and traditional uses, (b) Disseminate current subsistence use information to the public; appropriate agencies and organizations; and fisheries and wildlife management divisions, (c) Assist the Board of Fisheries, the Board of Game, and the Joint Board of Fisheries and Game to evaluate customary and traditional uses of Alaska's fish and wildlife resources and amounts reasonably necessary for subsistence uses (ANS) of those resources, and (d) Assist fisheries and wildlife managers in preparing management plans to ensure information on customary and traditional uses and fish and wildlife harvests is incorporated. + + + + + + https://ror.org/0146z4r19 + A research center of the University of California, Santa Barbara which fosters collaborative synthesis research by assembling interdisciplinary teams to distill existing data, ideas, theories, or methods drawn from many sources, across multiple fields of inquiry, in order to accelerate the generation of new knowledge on a broad scale. + National Center for Ecological Analysis & Synthesis +NCEAS + National Center for Ecological Analysis and Synthesis + The NCEAS website is accessible at: https://www.nceas.ucsb.edu/ + 2021-03-27T00:18:57Z + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#southeast +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Approximately the size of the state of Kansas, the Southeast region is categorized by thousands of small coastal watersheds that provide ideal spawning habitat for pink salmon and chum salmon in particular. All five species are caught and return to this region. In terms of total abundance of salmon, Southeast Alaska dominates the state. Managing and conserving salmon populations that move beyond international borders is a key challenge here as many of the Chinook salmon caught in Southeast were hatched outside Alaska. + +The bounding coordinates for this SASAP region are: +North: 61.6887 degrees +South: 54.2508 degrees +East: -126.7735 degrees +West: -143.8874 degrees + + + + + + DANSRD + Department of Alaska Native Studies and Rural Development + The UAF Alaska Native Studies and Rural Development webpage is accessible at: https://www.uaf.edu/dansrd/ + 2021-03-29T22:59:49Z + + + + + + + Arctic Alaska or Far North Alaska is a region of the U.S. state of Alaska generally referring to the northern areas on or close to the Arctic Ocean. + Far North Alaska + Arctic + In the Arctic region of Alaska, connections between salmon and people are in their infancy. Salmon are just one harbinger of change in this region. + +The bounding coordinates for this SASAP region are: +North: 71.4396 degrees +South: 67.7408 degrees +East: -136.684 degrees +West: -166.311 degrees + 2021-03-24T21:27:43Z + + + + + + A department within the government of Alaska whose mission is to "Promote a healthy economy, strong communities, and protect consumers in Alaska." + https://ror.org/0580q1236 + Alaska Department of Commerce, Community, and Economic Development + 2021-03-25T18:03:19Z + + + + + + + A division within the government of Alaska's Department of Natural Resources (DNR) which maintains the department's land records repository and oversees DNR's computer systems and networks services. It provides for the department's data processing functions including development, training, operations, and maintenance. The Department of Natural Resources' (DNR) systems include the Land Administration System (LAS), the Geographic Information System, the Revenue and Billing System, and others. The section also produces and maintains the state's land status maps. + Alaska Department of Natural Resources, IRM + Alaska Department of Natural Resources, Support Services Division, Information Resource Management + 2021-03-25T18:04:32Z + + + + + + + Sam Truesdell + 2021-04-20T15:27:23Z + + + + + + + + isAdvisorTo + In addition to a lead researcher, some SASAP working groups have an additional advisor(s) to assist in the research efforts. The 'isAdvisorTo' object property connects advisors to their respective working groups. + 2021-04-19T23:41:09Z + + + + + + + Kenai Peninsula Borough (Russian: Кенай боро, Kenay boro) is a borough of the U.S. state of Alaska. + KPB + Kenai Peninsula Borough + The Kenai Peninsula Borough's website is accessible at: https://www.kpb.us/ + 2021-04-20T23:33:12Z + + + + + + Chistochina Enterprises is a wholly owned Section 17 Corporation authorized by the 1934 Indian Reorganization Act, formed under a Federal charter to represent the business interests of Cheesh'na and as a means of investing in the future of the Tribe. Chistochina Enterprises is governed by a five member Board of Director initially appointed by Cheesh'na Tribal Council. The main office is located in Chistochina, Alaska, and the enterprise is licensed to conduct business in the State of Alaska and nationally as outlined in its Federal charter. + Christochina Enterprises + Christochina Enterprises' website is accessible at: http://www.chistochinaenterprises.com + 2021-04-20T22:28:28Z + + + + + + UC Davis + https://ror.org/05rrcem69 + University of California, Davis + UC Davis's website is accessible at: https://www.ucdavis.edu/ + 2021-04-20T20:18:20Z + + + + + + Native Village of Kotzebue + More information about the Native Village of Kotzebue can be found at: https://www.nwabor.org/village/kotzebue/ + 2021-04-20T18:02:31Z + + + + + + Wilson Justin + 2021-04-20T17:06:54Z + + + + + + + + + + + + + + + + + http://purl.obolibrary.org/obo/GAZ_00147944 +http://purl.obolibrary.org/obo/GAZ_00197646 +http://purl.obolibrary.org/obo/GAZ_00055346 + Kuskokwim + The Kuskokwim region is the 4th largest of Alaska, and at 154,168 km² is comparable in size to the state of Georgia. The region drains the Kuskokwim – one of the great rivers of the world. The salmon-producing habitat of the Kuskokwim region is diverse and productive. Drier than the neighboring Bristol Bay region, the Kuskokwim region has a larger amount of burn area from forest fires than all other regions but the Yukon. + +The bounding coordinates for this SASAP region are: +North: 64.4166 degrees +South: 58.6262 degrees +East: -151.5105 degrees +West: -173.2164 degrees + 2021-03-24T21:28:48Z + + + + + + A department within the government of Alaska which (a) has the specific statutory responsibility of protecting freshwater habitat for anadromous fish and providing free passage for all fish in freshwater bodies, (b) develops management plans and oversees activities (excluding trapping, hunting, fishing, and wildlife viewing) in legislatively designated refuges, critical habitat areas, and sanctuaries known collectively as Special Areas, (c) works with the Division of Sport Fish to update the “Catalog of Waters Important for the Spawning, Rearing, or Migration of Anadromous Fishes,” (d) coordinates the ADF&G review of large and complex projects important to the State, and (e) works closely with the ADNR Division of Forestry to survey State and private forestry operations and evaluate implementation of Alaska’s Forest Resources and Practices Act (FRPA). + Alaska Department of Fish and Game, Division of Habitat + 2021-03-25T18:04:11Z + + + + + + + + 2021-03-25T18:05:35Z + + + + + United States Geologic Survey + https://ror.org/035a68863 + A bureau of the United Sates Departement of the Interior, which provides science about the natural hazards that threaten lives and livelihoods, the water, energy, minerals, and other natural resources we rely on, the health of our ecosystems and environment, and the impacts of climate and land-use change. + The USGS website is accessible at: https://www.usgs.gov/ + USGS + + + Governance working group + Governance and subsistence working group + Learn more about the Governance and Subsistence Working Group here: https://alaskasalmonandpeople.org/working-group/governance-and-subsistence/ + 2021-03-25T18:47:12Z + + + + + + A financial institution principally engaged in investing in securites (i.e. a tradable financial asset). + Investing firm + 2021-04-05T20:05:34Z + + + + + + Bert A. Lewis + 2021-04-20T15:51:45Z + + + + + + + Daniel Schindler + 2021-04-20T15:43:57Z + + + + + + + + Academic degree program + 2021-04-21T18:08:49Z + + + + + + + Liza Mack + 2021-04-19T23:55:55Z + + + + + + + + USF + https://ror.org/032db5x82 + University of South Florida + USF's website is accessible at: https://www.usf.edu/ + 2021-04-21T16:44:47Z + + + + + + Auke Bay Laboratories + Auke Bay Laboratories' website is accessible at: https://www.fisheries.noaa.gov/about/auke-bay-laboratories + 2021-04-20T23:09:04Z + + + + + + + https://alaskasalmonandpeople.org/ + The SASAP project is a deep assessment of the state of knowledge of the biological, sociocultural, economic and governance dimensions of Alaska's salmon and the people who depend upon them. The SASAP project shares this knowledge with Alaska salmon users through comprehensive watershed-level summaries (Regions), focused research on specific salmon issues (Topics), and suppported links to SASAP's free, open-source datasets, accessible through the SASAP Data Portal (https://knb.ecoinformatics.org/portals/SASAP/Data). + + + + + + https://wdfw.wa.gov/about + A department within the government of Washington which is dedicated to preserving, protecting, and perpetuating the state's fish, wildlife, and ecosystems while providing sustainable fish and wildlife recreational and commercial opportunities. + + + + + + NRC + Natural Resources Consultants, Inc. + NRC's website is accessible at: https://nrccorp.com/ + 2021-04-20T23:05:50Z + + + + + + The Southeast Alaska/Yakutat Region (Region I) consists of Alaska waters between Cape Suckling on the north and Dixon Entrance on the south. Salmon are commercially harvested in Southeast Alaska with purse seines and drift gillnets; in Yakutat with set gillnets; and in both areas with hand and power troll gear. Herring are harvested in winter bait, sac roe, spawn-on-kelp, and bait pound fisheries. Miscellaneous shellfish (sea cucumber, sea urchins, and geoduck clams) are harvested in dive fisheries in the region. The Alaska Department of Fish and Game (ADF&G) has management jurisdiction over all groundfish resources within state waters in Region I. In addition, the State has management authority for Demersal Shelf Rockfish, ling cod, and black and blue rock fish in both state and federal waters. There are several commercially important shellfish species in Southeast Alaska. They include golden and red king crab, Dungeness crab, Tanner crab, and pandalid shrimp. + Alaska Department of Fish and Game, Division of Commercial Fisheries, Southeast Region + + + 2021-03-25T18:04:07Z + + + Region I + + A department within the government of Alaska and a sub-division of the Alaska Department of Fish and Wildlife, Division of Commercial Fisheries which manages the Southeast Region. + + + ESPM +ESPM UC Berkeley + Department of Environmental Science, Policy, and Management + ESPM's webpage is accessible at: https://ourenvironment.berkeley.edu/ + 2021-04-20T21:12:55Z + + + + + + + + 2021-03-25T18:05:30Z + https://ror.org/04k7dar27 + + A bureau of the United States Department of the Interior whose mission is to work with others to conserve, protect and enhance fish, wildlife and plants and their habitats for the continuing benefit of the American people. + + USFWS + + + United States Fish and Wildlife Service + + + Economic working group + Socioeconomic working group + Learn more about the Socioeconomic Working Group here: https://alaskasalmonandpeople.org/working-group/economic-dimensions-of-salmon-systems/ + The goals of the Economic working group are to (1) identify important trends in the historical relationships between salmon and salmon users which may have been overlooked, (2) inform and support evidence-based policy aimed at sustainable and equitable decision making, and (3) compile, archive, and share relevant historical socioeconomic data about Alaska's salmon systems. + 2021-03-25T18:47:08Z + + + + + + hasAffiliate + 2021-03-25T19:11:36Z + + + + + + + http://www.adfg.alaska.gov/index.cfm?adfg=divisions.haboverview + A department within the government of Alaska which (a) has the specific statutory responsibility of protecting freshwater habitat for anadromous fish and providing free passage for all fish in freshwater bodies, (b) develops management plans and oversees activities (excluding trapping, hunting, fishing, and wildlife viewing) in legislatively designated refuges, critical habitat areas, and sanctuaries known collectively as Special Areas, (c) works with the Division of Sport Fish to update the “Catalog of Waters Important for the Spawning, Rearing, or Migration of Anadromous Fishes,” (d) coordinates the ADF&G review of large and complex projects important to the State, and (e) works closely with the ADNR Division of Forestry to survey State and private forestry operations and evaluate implementation of Alaska’s Forest Resources and Practices Act (FRPA). + + + + + + + + + http://www.calistaeducation.org/about-us.html + The Calista Elders Council was established in 1991 as a non-profit organization representing 1,300 Yup'ik traditional bearers of the Yukon-Kuskokwim Delta in Southwest Alaska. The Calista Elders Council was formed to help protect and preserve the Yup’ik, Cup’ik and Athabascan cultures. + +In 2014, after a 20 year history of interacting and working together, the Calista Elders Council, Inc. merged with the former Calista Heritage Foundation to form what is now Calista Education and Culture, Inc. + + + + + + + + + + + A research institute which is not part of a university, government, hospital or corporation. An independent research institute may have a close relationship with a larger institution such as a university, but is not part of the larger insitution and operates under its own authority. + Independent research institute + 2021-04-05T19:57:33Z + + + + + + https://orcid.org/0000-0002-1234-1297 + Curry Cunningham + 2021-04-20T16:11:48Z + + + + + + + + Laura Loucks + 2021-04-20T15:50:50Z + + + + + + + + Joe Spaeder + 2021-04-20T15:40:25Z + + + + + + + + UW EarthLab +University of Washington EarthLab +Center for Creative Conservation +C3 + EarthLab + Since its establishment, the Center has been a member of UW EarthLab—a new environmental institute housing other groups such as the Climate Impacts Group, the Center for Health and the Global Environment, and the Washington Ocean Acidification Center. EarthLab’s inaugural Executive Director, Ben Packard, has been working over the past year to clarify the vision, priorities and strategic outcomes for EarthLab. As this vision has taken shape, it has become clear that the activities of the Center are a key element of EarthLab. Rather than duplicating the efforts of C3 at the EarthLab level, we have decided to integrate the Center for Creative Conservation into EarthLab. + 2021-04-21T17:48:10Z + + + + + + + Jim Fall + 2021-04-19T23:54:56Z + + + + + + + + + Auburn + https://ror.org/02v80fc35 + Auburn University + Auburn's website is accessible at: https://www.auburn.edu/ + 2021-04-21T16:43:47Z + + + + + + https://knb.ecoinformatics.org/portals/SASAP/Regions#copperriver +https://knb.ecoinformatics.org/view/doi%3A10.5063%2FF1WH2N8W + Fewer than 2500 people live permanently in the Copper River region, an area comparable in size to the state of West Virginia. Sockeye salmon are dominant here, given the multiple large lakes available for rearing juvenile salmon. Though less abundant than sockeye, king salmon are deeply important to all salmon-connected people. Kings have declined in number since 2007. + +The bounding coordinates for this SASAP region are: +North: 63.3227 degrees +South: 59.7112 degrees +East: -139.6942 degrees +West: -147.8251 degrees + + + + + + + An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. + Project + 2021-03-30T20:31:09Z + + + + + + An inlet of the Bering Sea on the western coast of the State of Alaska, south of the Seward Peninsula. It is about 240 km long and 200 km wide. The Yukon River delta forms a portion of the south shore and water from the Yukon influences this body of water. + http://purl.obolibrary.org/obo/GAZ_00051068 + Norton Sound + An average of two million pink salmon and 250,000 chum salmon return to the sub-Arctic region of Norton Sound, an area approximately twice the size of Massachusetts. + +The bounding coordinates of this SASAP region are: +North: 65.8544 degrees +South: 62.8268 degrees +East: -159.1906 degrees +West: -171.9762 degrees + 2021-03-24T21:28:59Z + + + + + + + + A permanent or semi-permanent state govenrment organization which is responsible for the oversight and administration of specific functions. + State government department, division, or agency + 2021-03-25T18:01:09Z + + + + + + A department within the government of Alaska with a mission to scientifically gather, quantify, evaluate, and report information about customary and traditional uses of Alaska's fish and wildlife resources. + Alaska Department of Fish and Game, Division of Subsistence + The Subsistence Section provides the following core services: (a) Compile and analyze existing data; conduct research to gather information on the role of hunting and fishing by Alaskans for customary and traditional uses, (b) Disseminate current subsistence use information to the public; appropriate agencies and organizations; and fisheries and wildlife management divisions, (c) Assist the Board of Fisheries, the Board of Game, and the Joint Board of Fisheries and Game to evaluate customary and traditional uses of Alaska's fish and wildlife resources and amounts reasonably necessary for subsistence uses (ANS) of those resources, and (d) Assist fisheries and wildlife managers in preparing management plans to ensure information on customary and traditional uses and fish and wildlife harvests is incorporated. + 2021-03-25T18:04:20Z + + + + + + + + An entity created by treaty, involving two or more nations, to work in good faith, on issues of common interest. + Intergovernmental organization + 2021-03-25T18:06:04Z + + + + + + + + + Bill Bechtol + 2021-04-20T15:45:26Z + + + + + + + + Indigenous Studies Program + 2021-04-21T18:09:34Z + + + + + + + Rob Sanderson Jr. + 2021-04-19T23:58:18Z + + + + + + + + CBT + Clayoquot Biosphere Trust + CBT's website is accessible at: https://clayoquotbiosphere.org/about-us/overview + 2021-04-21T17:21:37Z + + + + + + isSupportingResearcherOf + In addition to a lead researcher, some SASAP working groups have an additional affiliated researcher(s) to assist in the research efforts. The 'isSupportingResearcherOf' object property connects supporting researchers to their respective working groups. + 2021-04-19T21:19:32Z + + + + + + + + Mountains to Sea + Kenai Mountains to Sea + Kenai Mountains to Sea's website is accessible at: https://kenaiwatershed.org/science-in-action/mountains-to-sea/ + 2021-04-20T23:24:55Z + + + + + + Akiak Native Community + The Akiak Native Community's website is accessible at: https://akiaknativecommunity.org/ + 2021-04-20T21:31:20Z + + + + + + NOAA + https://ror.org/02z5nhe81 + National Oceanic and Atmospheric Administration + NOAA's website is accessible at: https://www.noaa.gov/ + 2021-04-20T20:10:56Z + + + + + + UW + https://ror.org/01y2jtd41 + University of Wisconsin-Madison + UW's website is accessible at: https://www.wisc.edu/ + 2021-04-20T20:08:29Z + + + + + + A sound of the Gulf of Alaska on the south coast of the State of Alaska. It is located on the east side of the Kenai Peninsula. + http://purl.obolibrary.org/obo/GAZ_00051075 + PWS + Prince William Sound + Prince William Sound is a region of rain, icefields, and glaciers. Only two (Whittier and Valdez) of Prince William Sound’s largest human communities are connected via road. The terminus of the Alaska oil pipeline ends in this region and results in a fairly high footprint of human activity in a relatively small region. Pink salmon, chum salmon, and sockeye salmon fisheries are current mainstays of local communities with hatchery enhancement of these species (particularly pink salmon) a fundamental dynamic in the region. + +The bounding coordinates of this SASAP region are: +North: 61.5189 degrees +South: 59.357 degrees +East: -145.1013 degrees +West: -149.1761 degrees + 2021-03-24T21:28:55Z + + + + + + A department within the government of Alaska with a mission to protect and improve the state's sport fishery resources. + Alaska Department of Fish and Game, Division of Sport Fish + The Division of Sport Fisheries provides the following core services: (a) fisheries management, (b) fisheries research, (c) fisheries enhancement, (d) protection and restoration of fish habitats for the ebefit of fish and sport anglers, (e) communication and outreach, and (f) providing leadership and administrative support for the Division's core functions. + 2021-03-25T18:04:16Z + + + + + + + + A department within the government of Washington which is dedicated to preserving, protecting, and perpetuating the state's fish, wildlife, and ecosystems while providing sustainable fish and wildlife recreational and commercial opportunities. + WDFW + https://ror.org/03dnb3013 + Washington Department of Fish and Wildlife + 2021-03-25T18:05:41Z + + + + + + + Salmon size working group + 2021-03-25T18:47:18Z + + + + + + + + + http://en.wikipedia.org/wiki/Cook_Inlet +https://www.wikidata.org/wiki/Q5166925 + A large estuary stretching 180 miles from the Gulf of Alaska to Anchorage in south-central Alaska. It separates the Kenai Peninsula from mainland Alaska and branches into the Knik Arm and Turnagain Arm at its northern end, almost surrounding Anchorage. The watershed covers about 100,000 km2 of southern Alaska, east of the Aleutian Range and south of the Alaska Range, receiving water from its tributaries the Knik River, the Little Susitna River, and the Susitna and Matanuska rivers. The watershed includes the drainage areas of Mount McKinley. Within the watershed there are several national parks and four historically active volcanoes. + + + + + + https://orcid.org/0000-0001-6102-1110 + Marissa L. Baskett + 2021-04-20T15:53:13Z + + + + + + + + Milo Adkison + 2021-04-20T15:44:32Z + + + + + + + + + + Graduate degree program + 2021-04-21T18:09:16Z + + + + + + Julie Raymond-Yakoubian + 2021-04-19T23:57:10Z + + + + + + + + + Charity + 2021-04-21T17:14:16Z + + + + + + Federal/non-federal partnerships and programs + 2021-04-20T23:24:11Z + + + + + + Old Harbor Native Corporation (OHNC) was established in 1971 under the terms of the Alaska Native Claims Settlement Act (ANCSA). + +OHNC’s mission is to preserve and protect the culture, values and traditions of its community, shareholders and descendants; and to work together to create economic and educational opportunities while promoting self-determination and pride. + Old Harbor Native Corporation + OHNC's website is accessible at: https://www.oldharbornativecorp.com/ + 2021-04-20T21:29:40Z + + + + + diff --git a/src/main/resources/ontologies/SENSO.owl b/src/main/resources/ontologies/SENSO.owl new file mode 100644 index 00000000..66444b11 --- /dev/null +++ b/src/main/resources/ontologies/SENSO.owl @@ -0,0 +1,126 @@ + + + definition source + 2020-11-04T19:47:37Z + + + + + + + + + + + + 2021-09-28 + + + + Sensitive Data Ontology (SENSO) + Version 0.1.0 + + Ontology to support sensitive data annotation of datasets housed at the Arctic Data Center (https://arcticdata.io) + + + + + + + + + + + + + Non-sensitive data + None of the data includes sensitive or protected information. + 2021-09-28 + + Non-sensitive data + + + + + Data Sensitivity Category + 2021-09-28 + + Data sensitivity categories assign a level of sensitivity for datasets and provide guidelines for acceptable distribution and use. + + + + + + + + + + + + + + + + + + + + + + + + + definition + 2021-09-28T19:46:54Z + + + + + data sensitivity + + 2021-09-30 + the sensitivity of the given data + + + + + + + + Sensitive data + The data contains human subjects data or other sensitive data. Release of the data could cause harm or violate statutes, and must remain confidential following restrictions from an Institutional Review Board (IRB) or similar body. + 2021-09-28 + + Some or all data is sensitive and should not be distributed + + + + + De-identified data + Sensitive data has been de-identified, anonymized, aggregated, or summarized to remove sensitivities and enable safe data distribution. Examples include ensuring that human subjects data, protected species data, archaeological site locations and personally identifiable information have been properly anonymized, aggregated and summarized. + 2021-09-28 + + Some or all data is sensitive but has been made safe for open distribution + + + + + + + + + + diff --git a/src/main/resources/org/dataone/configuration/config.xml b/src/main/resources/org/dataone/configuration/config.xml index 72014529..05bdde32 100644 --- a/src/main/resources/org/dataone/configuration/config.xml +++ b/src/main/resources/org/dataone/configuration/config.xml @@ -4,15 +4,15 @@
- + - - + + - + \ No newline at end of file diff --git a/src/main/resources/org/dataone/configuration/index-processor.properties b/src/main/resources/org/dataone/configuration/index-processor.properties index 25619577..1689d3f9 100644 --- a/src/main/resources/org/dataone/configuration/index-processor.properties +++ b/src/main/resources/org/dataone/configuration/index-processor.properties @@ -1,25 +1,41 @@ -## override hazelcast properties -dataone.hazelcast.group=DataONE -# The password -dataone.hazelcast.password=password -# The list of IP addresses of DataONE Hazelcast cluster members -dataone.hazelcast.clusterInstances=127.0.0.1:5701 -dataone.hazelcast.systemMetadata=hzSystemMetadata -dataone.hazelcast.objectPath=hzObjectPath +#dataone.mn.baseURL=https://dev.nceas.ucsb.edu/knb/d1/mn +dataone.mn.baseURL=https://valley.duckdns.org/metacat/d1/mn +index.data.root.directory=/var/metacat/data +index.document.root.directory=/var/metacat/documents -certificate.keystore.password=changeit -certificate.keystore.type=JKS +#The section for the rabbitMQ configuration +#index.rabbitmq.hostname=host.docker.internal +index.rabbitmq.hostname=localhost +index.rabbitmq.hostport=5672 +index.rabbitmq.username=guest +index.rabbitmq.password=guest +#If you change the number of the max priority, the existing queue must be deleted. And consumers must use the same number. +index.rabbitmq.max.priority=10 -cn.nodeId.validation=^urn\\:node\\:\\w{2,14}$ -cn.nodeId.validation.errorText=The NodeId must comply to the following pattern: a string starting with 'urn:node:' followed by at least 2 and at most 14 characters inclusive of all alphanumeric characters and the '_' character +solr.base.uri=http://localhost:8983/solr/metacat-index +solr.query.uri=${solr.base.uri}/select/ +solr.index.uri=${solr.base.uri}/update/?commit=true +#solr.schema.path can be a url or a file path +solr.schema.path=${solr.base.uri}/admin/file?file=schema.xml&contentType=text/xml;charset=utf-8 +#solr.schema.path=./src/main/resources/index-solr-schema.xml -## Set these in operation environment - see config.xml for external file location options for property config location options -#dataone.mn.registration.serviceType.url=https://cn-dev-ucsb-1.test.dataone.org/mnServiceTypes.xml -#dataone.mn.registration.serviceType.cacheRefreshMinutes=5 +#You may specify the exact number of threads the indexer will use. +#If you keep it blank, Metacat will use the default one - the system processors number minus one. If calculation result is 0, 1 will be used as the default value. +#If the one you specify exceeds the default number or is less than 1, the default one will be used as well. +index.thread.number= +#The time (millisecond) that the resource map processor waits for the solr doc readiness of its components +index.resourcemap.waitingComponent.time=600 +#The number of the attempts that the resource map processor tries to wait for the solr doc readiness of its components +index.resourcemap.waitingComponent.max.attempts=15 +#The time (millisecond) that indexer will wait to grab a newer version of solr doc when a version conflict happened +index.solr.versionConflict.waiting.time=500 +#The number of the attempts that indexer tries to grab a newer version of solr doc when a version conflict happened +index.solr.versionConflict.max.attempts=25 dataone.indexing.performance.logging.enabled=false -dataone.indexing.batchUpdateSize=1000 +D1Client.CN_URL=https://cn.dataone.org/cn -# The size of the thread pool which process the index task -dataone.indexing.multiThreads.processThreadPoolSize=5 \ No newline at end of file +index.resourcemap.namespace=http://www.w3.org/TR/rdf-syntax-grammar;http://www.openarchives.org/ore/terms + +dataone.mn.registration.serviceType.url=https://cn.dataone.org/mnServiceTypes.xml diff --git a/src/main/resources/org/dataone/configuration/quartz.properties b/src/main/resources/org/dataone/configuration/quartz.properties deleted file mode 100644 index 9ace4ba5..00000000 --- a/src/main/resources/org/dataone/configuration/quartz.properties +++ /dev/null @@ -1,6 +0,0 @@ -org.quartz.scheduler.instanceName = QuartzScheduler -org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool -org.quartz.threadPool.threadCount=3 -org.quartz.threadPool.makeThreadsDaemons=yes -org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore -org.quartz.scheduler.skipUpdateCheck=true \ No newline at end of file diff --git a/src/main/resources/processor-daemon-context.xml b/src/main/resources/processor-daemon-context.xml deleted file mode 100644 index 94c07c48..00000000 --- a/src/main/resources/processor-daemon-context.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - file:/etc/dataone/index/log4j-processor.properties - - - - - - - \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr5home/collection1/conf/schema.xml b/src/main/resources/solr-conf/schema.xml similarity index 87% rename from src/test/resources/org/dataone/cn/index/resources/solr5home/collection1/conf/schema.xml rename to src/main/resources/solr-conf/schema.xml index eb2bde37..fca3bf51 100644 --- a/src/test/resources/org/dataone/cn/index/resources/solr5home/collection1/conf/schema.xml +++ b/src/main/resources/solr-conf/schema.xml @@ -103,6 +103,19 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no default: a value that should be used if no value is specified when adding a document. --> + + + + + + + + + + + + + + + + @@ -184,18 +200,18 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - - + + - - + + - + @@ -204,7 +220,7 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + @@ -237,18 +253,17 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no + + + + + + + - - - - - - - - @@ -281,6 +296,7 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no + @@ -312,13 +328,21 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - - - - - - - + + + + + + + + + + + + + + + id - text - + + - + @@ -442,6 +469,9 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no + + + - - - - + + + + - - - - + + + + - - - - + + + @@ -608,7 +635,8 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + + @@ -629,7 +657,7 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + @@ -661,7 +689,7 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + - + @@ -705,9 +733,9 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + - + @@ -719,9 +747,10 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + + - + @@ -743,7 +772,7 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + @@ -868,21 +897,21 @@ This schema is copied into the dataone-cn-index buildout for deployment on cn no - + + geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" /> - + geo="true" distanceUnits="degrees" numberType="_bbox_coord" /> + - - - - - - - - - - - - - + + + + + +
- diff --git a/src/main/resources/solr-conf/solrconfig.xml b/src/main/resources/solr-conf/solrconfig.xml new file mode 100644 index 00000000..fda256ed --- /dev/null +++ b/src/main/resources/solr-conf/solrconfig.xml @@ -0,0 +1,1409 @@ + + + + + + + + + 9.0 + + + + + + + + + + + + + + + + + + + ${solr.data.dir:} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${solr.lock.type:native} + + + + + + + + + + + + + true + + + + + + + + ${solr.ulog.dir:} + ${solr.ulog.numVersionBuckets:65536} + + + + + ${solr.autoCommit.maxTime:15000} + false + + + + + + ${solr.autoSoftCommit.maxTime:-1} + + + + + + + + + + + + + + ${solr.max.booleanClauses:1024} + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + 20 + + + 200 + + + + + + + + + + + + static firstSearcher warming in solrconfig.xml + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + explicit + 10 + -archived:true + + + + + {!v=$archived} + + + + + + + + + explicit + json + true + text + + + + + + text + + + + + + + + + true + ignored_ + + + true + links + ignored_ + + + + + + 5 + + + + + + text_general + + + + + + default + text + solr.DirectSolrSpellChecker + + internal + + 0.5 + + 2 + + 1 + + 5 + + 4 + + 0.01 + + + + + + wordbreak + solr.WordBreakSolrSpellChecker + name + true + true + 10 + + + + + + + + + + + + + + + + + default + wordbreak + on + true + 10 + 5 + 5 + true + true + 10 + 5 + + + spellcheck + + + + + + + mySuggester + FuzzyLookupFactory + DocumentDictionaryFactory + cat + price + string + false + + + + + + true + 10 + + + suggest + + + + + + + + + + + true + + + tvComponent + + + + + + + + + lingo3g + true + Lingo3G + name, features + true + English + + + + lingo + Lingo + name, features + true + English + + + + stc + STC + name, features + true + English + + + + kmeans + Bisecting K-Means + name, features + true + English + + + + + + + + true + + edismax + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + + *:* + 100 + *,score + + + + + clustering + + + + + + + + string + elevate.xml + + + + + + explicit + + + elevator + + + + + + + + + + + + 100 + + + + + + + + 70 + + 0.5 + + [-\w ,/\n\"']{20,200} + + + + + + + ]]> + ]]> + + + + + + + + + + + + + + + + + + + + + + + + ,, + ,, + ,, + ,, + ,]]> + ]]> + + + + + + 10 + .,!? + + + + + + + WORD + + + en + US + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + QUERY_DOC_FV + + diff --git a/src/test/java/org/dataone/cn/index/DataONESolrJettyTestBase.java b/src/test/java/org/dataone/cn/index/DataONESolrJettyTestBase.java index 1da160d7..57ad01ae 100644 --- a/src/test/java/org/dataone/cn/index/DataONESolrJettyTestBase.java +++ b/src/test/java/org/dataone/cn/index/DataONESolrJettyTestBase.java @@ -24,10 +24,19 @@ import java.io.File; import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.TimeZone; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPathExpressionException; + +import org.apache.commons.codec.EncoderException; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.solr.SolrJettyTestBase; @@ -40,17 +49,30 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; -import org.dataone.cn.indexer.SolrIndexService; +import org.dataone.cn.indexer.SolrIndex; +import org.dataone.cn.indexer.object.MockMNode; +import org.dataone.cn.indexer.object.ObjectManager; import org.dataone.cn.indexer.parser.ISolrField; import org.dataone.cn.indexer.solrhttp.SolrElementField; +import org.dataone.configuration.Settings; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.exceptions.UnsupportedType; +import org.dataone.service.types.v1.Identifier; import org.dataone.service.types.v2.SystemMetadata; import org.dataone.service.util.DateTimeMarshaller; import org.dataone.service.util.TypeMarshaller; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; import org.junit.Assert; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; import org.w3c.dom.Document; +import org.xml.sax.SAXException; /** * Solr unit test framework is dependent on JUnit 4.7. Later versions of junit @@ -62,26 +84,65 @@ @SuppressSSL public abstract class DataONESolrJettyTestBase extends SolrJettyTestBase { - protected ApplicationContext context; - private SolrIndexService solrIndexService; + protected static ApplicationContext context; + private SolrIndex solrIndexService; + private int solrPort = Settings.getConfiguration().getInt("test.solr.port", 8985); + private static final String DEFAULT_SOL_RHOME = "solr8home"; + + /** + * Index the given object into solr + * @param identifier the identifier of the object which needs to be indexed + * @param objectFile the file path of the object which needs to be indexed + * @throws Exception + */ + protected void indexObjectToSolr(String identifier, Resource objectFile) throws Exception { + boolean isSysmetaChangeOnly = false; + String relativePath = objectFile.getFile().getPath(); + Identifier pid = new Identifier(); + pid.setValue(identifier); + solrIndexService.update(pid, relativePath, isSysmetaChangeOnly); + } + + /** + * Delete the given identifier from the solr server + * @param identifier + * @throws XPathExpressionException + * @throws ServiceFailure + * @throws NotImplemented + * @throws NotFound + * @throws UnsupportedType + * @throws IOException + * @throws EncoderException + * @throws SolrServerException + * @throws ParserConfigurationException + * @throws SAXException + */ + protected void deleteSolrDoc(String identifier) throws XPathExpressionException, ServiceFailure, NotImplemented, + NotFound, UnsupportedType, IOException, EncoderException, SolrServerException, + ParserConfigurationException, SAXException { + Identifier pid = new Identifier(); + pid.setValue(identifier); + solrIndexService.remove(pid); + } protected void addEmlToSolrIndex(Resource sysMetaFile) throws Exception { - SolrIndexService indexService = solrIndexService; + SolrIndex indexService = solrIndexService; SystemMetadata smd = TypeMarshaller.unmarshalTypeFromStream(SystemMetadata.class, sysMetaFile.getInputStream()); // path to actual science metadata document String path = StringUtils.remove(sysMetaFile.getFile().getPath(), File.separator + "SystemMetadata"); - indexService.insertIntoIndex(smd.getIdentifier().getValue(), sysMetaFile.getInputStream(), - path); + boolean isSysmetaChangeOnly = false; + indexService.update(smd.getIdentifier(), path, isSysmetaChangeOnly); + } protected void addSysAndSciMetaToSolrIndex(Resource sysMeta, Resource sciMeta) throws Exception { - SolrIndexService indexService = solrIndexService; + SolrIndex indexService = solrIndexService; SystemMetadata smd = TypeMarshaller.unmarshalTypeFromStream(SystemMetadata.class, sysMeta.getInputStream()); String path = sciMeta.getFile().getAbsolutePath(); - indexService - .insertIntoIndex(smd.getIdentifier().getValue(), sysMeta.getInputStream(), path); + boolean isSysmetaChangeOnly = false; + indexService.update(smd.getIdentifier(), path, isSysmetaChangeOnly); } protected SolrDocument assertPresentInSolrIndex(String pid) throws SolrServerException, @@ -112,6 +173,7 @@ protected SolrDocumentList findByQueryString(String query) throws SolrServerExce public void sendSolrDeleteAll() throws SolrServerException, IOException { getSolrClient().deleteByQuery("*:*"); + getSolrClient().commit(); } protected void assertNotPresentInSolrIndex(String pid) throws SolrServerException, IOException { @@ -200,6 +262,12 @@ public void setUp() throws Exception { super.setUp(); loadSpringContext(); startJettyAndSolr(); + //set up MockMnode for the ObjectManager + MockMNode mockMNode = new MockMNode("http://mnode.foo"); + mockMNode.setContext(context); + ObjectManager.setD1Node(mockMNode); + System.out.println("--------------After setting mockNode for object manager in the test base setup method"); + sendSolrDeleteAll(); } public void tearDown() throws Exception { @@ -210,16 +278,22 @@ protected void loadSpringContext() { if (context == null) { context = new ClassPathXmlApplicationContext("org/dataone/cn/index/test-context.xml"); } - solrIndexService = (SolrIndexService) context.getBean("solrIndexService"); + solrIndexService = (SolrIndex) context.getBean("solrIndex"); } protected void startJettyAndSolr() throws Exception { if (jetty == null) { - JettyConfig jconfig = JettyConfig.builder().setPort(8983).build(); + String solrTestHome = System.getProperty("solrTestHome"); + System.out.println("===========================The test solr home from the system property is " + solrTestHome); + if (solrTestHome == null || solrTestHome.trim().equals("")) { + solrTestHome = DEFAULT_SOL_RHOME; + } + System.out.println("============================The final test solr home is " + solrTestHome); + JettyConfig jconfig = JettyConfig.builder().setPort(solrPort).build(); File f = new File("."); String localPath = f.getAbsolutePath(); createJettyWithPort(localPath - + "/src/test/resources/org/dataone/cn/index/resources/solr5home", jconfig); + + "/src/test/resources/org/dataone/cn/index/resources/" + solrTestHome, jconfig); } } @@ -229,7 +303,7 @@ protected void startJettyAndSolr() throws Exception { // port. protected static JettySolrRunner createJettyWithPort(String solrHome, JettyConfig config) throws Exception { - createJetty(solrHome, config); + createAndStartJetty(solrHome, config); return jetty; } @@ -246,4 +320,80 @@ protected boolean compareFieldValue(String id, String fieldName, String expected System.out.println("The expected value of the field " + fieldName + " is " + expectedValue); return expectedValue.equals(value); } + protected boolean compareFieldValue(String id, String fieldName, String[] expectedValues) throws SolrServerException, IOException { + + boolean equal = true; + ModifiableSolrParams solrParams = new ModifiableSolrParams(); + solrParams.set("q", "id:" + ClientUtils.escapeQueryChars(id)); + solrParams.set("fl", "*"); + QueryResponse qr = getSolrClient().query(solrParams); + SolrDocument result = qr.getResults().get(0); + Collection solrValues = result.getFieldValues(fieldName); + Object testResult = result.getFirstValue(fieldName); + String[] solrValuesArray = new String[solrValues.size()]; + if(testResult instanceof Float) { + // Solr returned a 'Float' value, so convert it to a string so that it can + // be compared to the expected value. + System.out.println("++++++++++++++++ Solr returned a 'Float'."); + int iObj = 0; + float fval; + for (Object obj : solrValues) { + fval = (Float) obj; + solrValuesArray[iObj] = Float.toString(fval); + iObj++; + } + } else if (testResult instanceof String) { + System.out.println("++++++++++++++++ Solr returned a 'String'."); + solrValuesArray = solrValues.toArray(new String[solrValues.size()]); + } else if (testResult instanceof Date) { + // Solr returned a 'Date' value, so convert it to a string so that it can + // be compared to the expected value. + System.out.println("++++++++++++++++ Solr returned a 'Date'."); + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + int iObj = 0; + + DateTimeZone.setDefault(DateTimeZone.UTC); + DateTimeFormatter dtfOut = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + + Date dateObj; + DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); + for (Object obj : solrValues) { + DateTime dateTime = new DateTime(obj); + solrValuesArray[iObj] = dtfOut.print(dateTime); + iObj++; + } + } + + System.out.println("++++++++++++++++ the solr result array for the field " + fieldName + " is " + solrValuesArray); + System.out.println("++++++++++++++++ the expected values for the field " + fieldName + " is " + expectedValues); + if (solrValuesArray.length != expectedValues.length) { + equal = false; + return equal; + } + if (solrValuesArray.length > 1) { + Arrays.sort(expectedValues); + Arrays.sort(solrValuesArray); + } + for (int i=0; i taskList = repo.findByPid(pid); - Assert.assertEquals(1, taskList.size()); - - task = taskList.get(0); - is = new ByteArrayInputStream(task.getSysMetadata().getBytes()); - testXMLParsing(is, pid); - - Identifier id = new Identifier(); - id.setValue(pid); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(id); - task = new IndexTask(smd, ""); - is = new ByteArrayInputStream(task.getSysMetadata().getBytes()); - testXMLParsing(is, pid); + //HazelcastClientFactory.getSystemMetadataMap().put(sysmeta.getIdentifier(), sysmeta); + + //IndexTask task = new IndexTask(sysmeta, ""); + //InputStream is = new ByteArrayInputStream(task.getSysMetadata().getBytes()); + //InputStream is = null; + //testXMLParsing(is, pid); + + //repo.save(task); + //Thread.sleep(200); + //List taskList = repo.findByPid(pid); + //Assert.assertEquals(1, taskList.size()); + + //task = taskList.get(0); + //is = new ByteArrayInputStream(task.getSysMetadata().getBytes()); + //testXMLParsing(is, pid); + + //Identifier id = new Identifier(); + //id.setValue(pid); + //SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(id); + //task = new IndexTask(smd, ""); + //is = new ByteArrayInputStream(task.getSysMetadata().getBytes()); + //testXMLParsing(is, pid); } private void testXMLParsing(InputStream in, String pid) throws Exception { diff --git a/src/test/java/org/dataone/cn/index/JsonLdSubprocessorTest.java b/src/test/java/org/dataone/cn/index/JsonLdSubprocessorTest.java index 0016c305..bf6dda44 100644 --- a/src/test/java/org/dataone/cn/index/JsonLdSubprocessorTest.java +++ b/src/test/java/org/dataone/cn/index/JsonLdSubprocessorTest.java @@ -62,23 +62,34 @@ * */ @ThreadLeakScope(ThreadLeakScope.Scope.NONE) -public class JsonLdSubprocessorTest extends RdfXmlProcessorTest { +public class JsonLdSubprocessorTest extends DataONESolrJettyTestBase { /* Log it */ private static Log log = LogFactory.getLog(JsonLdSubprocessorTest.class); /* The schema.org object */ private Resource schemaOrgDoc; + private String schemaOrgDocPid = "bco-dmo.jsonld"; private Resource schemaOrgDoc2; + private String schemaOrgDoc2Pid = "doi_A10.5061_dryad.m8s2r36.jsonld"; private Resource schemaOrgDocSOSO; + private String schemaOrgDocSOSOPid = "ESIP-SOSO-v1.2.0-example-full.jsonld"; private Resource schemaOrgTestWithoutVocab; + private String schemaOrgTestWithoutVocabPid = "context-http-without-vocab.jsonld"; private Resource schemaOrgTestDocHttpVocab; + private String schemaOrgTestDocHttpVocabPid = "context-http-vocab.jsonld"; private Resource schemaOrgTestDocHttpsVocab; + private String schemaOrgTestDocHttpsVocabPid = "context-https-vocab.jsonld"; private Resource schemaOrgTestDocHttp; + private String schemaOrgTestDocHttpPid = "context-http.jsonld"; private Resource schemaOrgTestDocHttps; + private String schemaOrgTestDocHttpsPid = "context-https.jsonld"; private Resource schemaOrgTestDocDryad1; + private String schemaOrgTestDocDryad1Pid = "doi.org_10.5061_dryad.5qb78.jsonld"; private Resource schemaOrgTestDocDryad2; + private String schemaOrgTestDocDryad2Pid = "doi.org_10.5061_dryad.41sk145.jsonld"; private Resource schemaOrgTesHakaiDeep; + private String schemaOrgTesHakaiDeepPid = "hakai-deep-schema.jsonld"; /* An instance of the RDF/XML Subprocessor */ private JsonLdSubprocessor jsonLdSubprocessor; @@ -86,7 +97,10 @@ public class JsonLdSubprocessorTest extends RdfXmlProcessorTest { /* Store a map of expected Solr fields and their values for testing */ private HashMap expectedFields = new HashMap(); - private static final int SLEEPTIME = 5000; + private static final int SLEEPTIME = 8000; + private static final int SLEEP = 2000; + private static final int TIMES = 10; + /** * For each test, set up the Solr service and test data @@ -129,25 +143,21 @@ public void tearDown() throws Exception { //@Ignore @Test public void testInsertSchemaOrg() throws Exception { - /* variables used to populate system metadata for each resource */ - File object = null; - String formatId = null; - - NodeReference nodeid = new NodeReference(); - nodeid.setValue("urn:node:mnTestXXXX"); - - String userDN = "uid=tester,o=testers,dc=dataone,dc=org"; - - // Insert the schema.org file into the task queue - String id = "urn:uuid:f18812ac-7f4f-496c-82cc-3f4f54830289"; - formatId = "science-on-schema.org/Dataset;ld+json"; - insertResource(id, formatId, schemaOrgDoc, nodeid, userDN); - + //index the object + String id = schemaOrgDocPid; + indexObjectToSolr(id, schemaOrgDoc); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); - Thread.sleep(SLEEPTIME); - assertPresentInSolrIndex(id); + //processor.processIndexTaskQueue(); + for (int i=0; i resources = new ArrayList<>(); resources.add(schemaOrgTestDocHttp); @@ -333,24 +338,30 @@ public void testInsertSchemaNormalization() throws Exception { // Insert the schema.org file into the task queue ArrayList ids = new ArrayList<>(); - ids.add("F7CD5CE0-E798-4BD0-911E-CFE6A2FE605C"); - ids.add("54B393F9-E756-40D7-A88C-3B8CE7A54AD3"); - ids.add("A5D04C9A-B9CA-43FD-8A97-BA7D2BD4D0E7"); - ids.add("406A4A02-3426-4E99-9D84-1E3F40DDEF06"); - formatId = "science-on-schema.org/Dataset;ld+json"; + ids.add(schemaOrgTestDocHttpPid); + ids.add(schemaOrgTestDocHttpsPid); + ids.add(schemaOrgTestDocHttpVocabPid); + ids.add(schemaOrgTestDocHttpsVocabPid); + int i = -1; String thisId; for (Resource res : resources) { i++; thisId = ids.get(i); log.info("processing doc with id: " + thisId); - insertResource(thisId, formatId, res, nodeid, userDN); + indexObjectToSolr(thisId, res); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); - Thread.sleep(SLEEPTIME); - assertPresentInSolrIndex(thisId); - + //processor.processIndexTaskQueue(); + for (int j=0; j resources = new ArrayList<>(); resources.add(schemaOrgTestDocDryad1); resources.add(schemaOrgTestDocDryad2); // Insert the schema.org file into the task queue ArrayList ids = new ArrayList<>(); - ids.add("BCD368D7-68B7-401A-86D4-35D1A3411C59"); - ids.add("487C757E-5B71-4029-B165-C902A4E6CB8D"); - formatId = "science-on-schema.org/Dataset;ld+json"; + ids.add(schemaOrgTestDocDryad1Pid); + ids.add(schemaOrgTestDocDryad2Pid); String thisId; int iDoc = 0; thisId = ids.get(iDoc); - insertResource(thisId, formatId, resources.get(iDoc), nodeid, userDN); + indexObjectToSolr(thisId, resources.get(iDoc)); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); - Thread.sleep(SLEEPTIME); - assertPresentInSolrIndex(thisId); + //processor.processIndexTaskQueue(); + for (int i=0; i solrValues = result.getFieldValues(fieldName); - Object testResult = result.getFirstValue(fieldName); - String[] solrValuesArray = new String[solrValues.size()]; - if(testResult instanceof Float) { - // Solr returned a 'Float' value, so convert it to a string so that it can - // be compared to the expected value. - System.out.println("++++++++++++++++ Solr returned a 'Float'."); - int iObj = 0; - float fval; - for (Object obj : solrValues) { - fval = (Float) obj; - solrValuesArray[iObj] = Float.toString(fval); - iObj++; - } - } else if (testResult instanceof String) { - System.out.println("++++++++++++++++ Solr returned a 'String'."); - solrValuesArray = solrValues.toArray(new String[solrValues.size()]); - } else if (testResult instanceof Date) { - // Solr returned a 'Date' value, so convert it to a string so that it can - // be compared to the expected value. - System.out.println("++++++++++++++++ Solr returned a 'Date'."); - TimeZone.setDefault(TimeZone.getTimeZone("GMT")); - int iObj = 0; - - DateTimeZone.setDefault(DateTimeZone.UTC); - DateTimeFormatter dtfOut = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - - Date dateObj; - DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); - for (Object obj : solrValues) { - DateTime dateTime = new DateTime(obj); - solrValuesArray[iObj] = dtfOut.print(dateTime); - iObj++; - } - } - - System.out.println("++++++++++++++++ the solr result array for the field " + fieldName + " is " + solrValuesArray); - System.out.println("++++++++++++++++ the expected values for the field " + fieldName + " is " + expectedValues); - if (solrValuesArray.length != expectedValues.length) { - equal = false; - return equal; - } - if (solrValuesArray.length > 1) { - Arrays.sort(expectedValues); - Arrays.sort(solrValuesArray); - } - for (int i=0; i"); //dcxExpected.put("fileID", "https://figsh.com/articles/Chestnut_Oak_Quercus_Prinus_Response_to_Browsing_by_White_Tailed_Deer_Implications_for_Carbon_and_Nitrogen_Allocation/5853507"); + dcxExpected.put("licenseName", "CC BY"); dcxExpected .put("text", "Chestnut Oak (Quercus Prinus) Response to Browsing by White Tailed Deer: Implications for Carbon and Nitrogen Allocation figshare admin Cary Institute (1246804) Jen Nieves (1725067) Ecology White tailed deer chestnut oak Fileset contains data file, including dataset metadata, as well as R scripts.
e-journal e-journal-2 John Smith Mary Alex 2018-04-19T19:54:04Z 2017-05-19T19:54:04Z Dataset Fileset 10.5072/fk2.stagefigshare.5853507.v1 https://figsh.com/articles/Chestnut_Oak_Quercus_Prinus_Response_to_Browsing_by_White_Tailed_Deer_Implications_for_Carbon_and_Nitrogen_Allocation/5853507 CC BY oai_dc.1.1.xml"); @@ -100,6 +101,7 @@ public void setUp() throws Exception { "CN=Judy Kallestad A13391,O=University of Minnesota,C=US,DC=cilogon,DC=org"); dcxExpected.put("replicationAllowed", ""); dcxExpected.put("numberReplicas", ""); + dcxExpected.put("archived", "false"); dcxExpected.put("preferredReplicationMN", ""); dcxExpected.put("blockedReplicationMN", ""); dcxExpected.put("obsoletes", ""); diff --git a/src/test/java/org/dataone/cn/index/SolrFieldDublinCoreTest.java b/src/test/java/org/dataone/cn/index/SolrFieldDublinCoreTest.java index c5f6d337..0337ef9f 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldDublinCoreTest.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldDublinCoreTest.java @@ -122,6 +122,7 @@ public void setUp() throws Exception { "CN=Judy Kallestad A13391,O=University of Minnesota,C=US,DC=cilogon,DC=org"); dcxExpected.put("replicationAllowed", ""); dcxExpected.put("numberReplicas", ""); + dcxExpected.put("archived", "false"); dcxExpected.put("preferredReplicationMN", ""); dcxExpected.put("blockedReplicationMN", ""); dcxExpected.put("obsoletes", ""); @@ -197,6 +198,7 @@ public void setUp() throws Exception { "CN=Judy Kallestad A13391,O=University of Minnesota,C=US,DC=cilogon,DC=org"); dc_spatial_Expected.put("replicationAllowed", ""); dc_spatial_Expected.put("numberReplicas", ""); + dc_spatial_Expected.put("archived", "false"); dc_spatial_Expected.put("preferredReplicationMN", ""); dc_spatial_Expected.put("blockedReplicationMN", ""); dc_spatial_Expected.put("obsoletes", ""); diff --git a/src/test/java/org/dataone/cn/index/SolrFieldIsotc211Test.java b/src/test/java/org/dataone/cn/index/SolrFieldIsotc211Test.java index 51cd3061..ae50ed11 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldIsotc211Test.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldIsotc211Test.java @@ -201,6 +201,8 @@ private void setupNodc1Expected() throws Exception { nodc1Expected.put("geohash_9", "emh1q2bnx"); nodc1Expected.put("fileID", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid1, "UTF-8")); + nodc1Expected.put("licenseDescription", ""); + nodc1Expected.put("licenseName", "otherRestrictions"); nodc1Expected .put("text", "gov.noaa.nodc:9900233 eng utf8 dataset US National Oceanographic Data Center Data Officer 301-713-3272 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information custodian 2014-01-23T14:00:11 ISO 19115-2 Geographic Information - Metadata - Part 2: Extensions for Imagery and Gridded Data ISO 19115-2:2009(E) DEPTH - OBSERVATION and Other Data from UNKNOWN PLATFORMS and Other Platforms from 19980101 to 19981212 (NODC Accession 9900233) 2010-12-19 publication NODC Accession Number US National Oceanographic Data Center resourceProvider gov.noaa.nodc:9900233 US National Oceanographic Data Center 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information publisher Alexander Sy Federal Maritime Agency - Hamburg 040-3190-3430 BERNHARD-NOCHT-STRASSE 78 HAMBURG D-20359 DEU alexander.sy@bsh.de http://www.bsh.de HTTP Standard Internet browser Federal Maritime Agency - Hamburg website Institution web page information resourceProvider University of Hamburg; Institut Fuer Meereskunde TROPLOWITZSTR, 7 HAMBURG D-2000, 54 DEU resourceProvider tableDigital BASIC RESEARCH completed US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information 8:30-6:00 PM, EST pointOfContact asNeeded http://data.nodc.noaa.gov/cgi-bin/gfx?id=gov.noaa.nodc:9900233 Preview graphic PNG 9900233 NODC ACCESSION NUMBER 2000-02-29 publication DEPTH - OBSERVATION WATER TEMPERATURE theme NODC DATA TYPES THESAURUS bathythermograph - XBT instrument NODC INSTRUMENT TYPES THESAURUS physical profile theme NODC OBSERVATION TYPES THESAURUS ANTON DOHRN II CAP FINISTERRE GAUSS KOELN EXPRESS UNKNOWN PLATFORMS platform NODC PLATFORM NAMES THESAURUS University of Hamburg; Institut Fuer Meereskunde dataCenter NODC COLLECTING INSTITUTION NAMES THESAURUS University of Hamburg; Institut Fuer Meereskunde dataCenter NODC SUBMITTING INSTITUTION NAMES THESAURUS UNKNOWN WORLD OCEAN CIRCULATION EXPERIMENT (WOCE) project NODC PROJECT NAMES THESAURUS oceanography theme WMO_CategoryCode 2012-09-15 publication Please note: NOAA and NODC make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NODC cannot assume liability for any damages caused by any errors or omissions in these data. accessLevel: Public otherRestrictions Cite as: Sy, A. and University of Hamburg; Institut Fuer Meereskunde (2010). DEPTH - OBSERVATION and Other Data from UNKNOWN PLATFORMS and Other Platforms from 19980101 to 19981212 (NODC Accession 9900233). National Oceanographic Data Center, NOAA. Dataset. [access date] otherRestrictions None eng utf8 oceans environment -50 -5.7 -9 65.7 1998-01-01 1998-12-12 Note: Metadata for this accession were extracted from a legacy databasemaintained by the U.S. National Oceanographic Data Center (NODC). Thedesign of the database did not exactly reflect the FGDC ContentStandard for Digital Geospatial Metadata (CSDGM).Principal Investigator (PI) and organization contact informationaccurately represents all available information from the legacy databaseat the time that this description was created. However, properattribution of a PI to a specific institution or the role (submitting orcollecting) taken by an institution may not be correct due to inexactmapping between fields in the legacy database and the CSDGM. Due to thisuncertainty, the contact information was initially recorded in theSupplemental Information element of the CSDGM description.To develop more accurate metadata, the NODC reviews metadata for allaccessions on an ongoing basis.Points of contact for this data set include:Contact info:Agency: UNIVERSITY OF HAMBURG; INSTITUT FUER MEERESKUNDEPI: Sy, Dr. AlexanderAddress:address: TROPLOWITZSTR, 7city: HAMBURGstate: NOT AVAILABLEpostal: D-2000, 54country: GERMANY US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov 8:30-6:00 PM, EST pointOfContact Digital data may be downloaded from NODC at no charge in most cases. For custom orders of digital data or to obtain a copy of analog materials, please contact NODC User Services for information about current fees. Data may be searched and downloaded using online services provided by the NODC using the online resource URLs in this record. Contact NODC User Services for custom orders. When requesting data from the NODC, the desired data set may be referred to by the NODC Accession Number listed in this metadata record. Originator data format http://accession.nodc.noaa.gov/9900233 HTTP Standard Internet browser Details Navigate directly to the URL for a descriptive web page with download links. information http://accession.nodc.noaa.gov/oas/9900233 HTTP Standard Internet browser Metadata Navigate directly to the URL for a descriptive web page with download links. information 79.252 http://accession.nodc.noaa.gov/download/9900233 HTTP Standard Internet browser Download Navigate directly to the URL for data access and direct download. download 79.252 ftp://ftp.nodc.noaa.gov/nodc/archive/arc0001/9900233/ FTP Any FTP client FTP These data are available through the File Transfer Protocol (FTP). The base URL of NODC's FTP server is ftp://ftp.nodc.noaa.gov/ and you may use any FTP client to download these data. download asNeeded Metadata are developed, maintained and distributed by the NODC. Updates are performed as needed to maintain currentness. DOC/NOAA/NESDIS/NODC > National Oceanographic Data Center, NESDIS, NOAA, U.S. Department of Commerce custodian gov.noaa.nodc:9900233"); @@ -225,6 +227,7 @@ private void setupNodc1Expected() throws Exception { nodc1Expected.put("blockedReplicationMN", ""); nodc1Expected.put("obsoletes", ""); nodc1Expected.put("obsoletedBy", ""); + nodc1Expected.put("archived", "false"); nodc1Expected.put("dateUploaded", dateConverter.convert("2015-05-08T01:47:41.356045")); nodc1Expected.put("dateModified", dateConverter.convert("2015-05-08T01:47:41.391065Z")); nodc1Expected.put("datasource", "urn:node:NODC"); @@ -288,6 +291,11 @@ private void setupNodc2Expected() throws Exception { nodc2Expected.put("geohash_9", "u40h20810"); nodc2Expected.put("fileID", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid2, "UTF-8")); + nodc2Expected.put("licenseName", "otherRestrictions"); + nodc2Expected.put("licenseDescription", "Please note: NOAA and NODC make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NODC cannot assume liability for any damages caused by any errors or omissions in these data." + + "#" + "accessLevel: Public" + + "#" + "Cite as: NERC Earth Observation Data Acquisition and Analysis Service (NEODAAS) (2008). GHRSST Level 2P North Atlantic Regional Bulk Sea Surface Temperature from the Advanced Very High Resolution Radiometer (AVHRR) on the NOAA-17 satellite produced by NEODAAS (GDS version 1). National Oceanographic Data Center, NOAA. Dataset. [access date]" + + "#" + "None"); nodc2Expected .put("text", "gov.noaa.nodc:GHRSST-NEODAAS-L2P-AVHRR17_L eng utf8 series US National Oceanographic Data Center Data Officer 301-713-3272 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information custodian Peter Miller NEODAAS > NERC Earth Observation Data Acquisition and Analysis Service Technical Contact +44 1752 633485 +44 1752 633101 info@nospam.neodaas.ac.uk Phone/FAX/E-mail pointOfContact 2015-02-04T21:33:10 ISO 19115-2 Geographic Information - Metadata - Part 2: Extensions for Imagery and Gridded Data ISO 19115-2:2009(E) 2 column 1.1 row 1.1 area true GHRSST Level 2P North Atlantic Regional Bulk Sea Surface Temperature from the Advanced Very High Resolution Radiometer (AVHRR) on the NOAA-17 satellite produced by NEODAAS (GDS version 1) Sea surface temperature from AVHRR 2014-10-02 publication 1 NODC Collection Identifier US National Oceanographic Data Center resourceProvider gov.noaa.nodc:GHRSST-NEODAAS-L2P-AVHRR17_L US National Oceanographic Data Center 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information publisher Edward M. Armstrong US NASA; Jet Propulsion Laboratory (818) 393-6710 MS 300/320 4800 Oak Grove Drive Pasadena CA 91109 USA edward.m.armstrong@jpl.nasa.gov resourceProvider US NASA; Jet Propulsion Laboratory; Physical Oceanography Distributed Active Archive Center 626-744-5508 4800 Oak Grove Drive Pasadena CA 91109 USA podaac@podaac.jpl.nasa.gov http://podaac.jpl.nasa.gov/index.html HTTP Standard Internet browser NASA Jet Propulsion Laboratory PO DAAC website Institution web page information resourceProvider NERC Earth Observation Data Acquisition and Analysis Service +44 1752 633485 Plymouth Marine Laboratory Prospect Place Plymouth Devon PL1 3DH GBR info@neodaas.ac.uk http://www.neodaas.ac.uk/ HTTP Standard Internet browser NEODAAS website Institution web page information originator tableDigital A Level 2P swath-based Group for High Resolution Sea Surface Temperature (GHRSST) dataset for the North Atlantic area from the Advanced Very High Resolution Radiometer (AVHRR) on the NOAA-17 platform (launched on 24 June 2002). This particular dataset is produced by the Natural Environment Research Council (NERC) Earth Observation Data Acquisition and Analysis Service (NEODAAS) in collaboration with the National Centre for Ocean Forecasting (NCOF) in the United Kingdom. The AVHRR is a space-borne scanning sensor on the National Oceanic and Atmospheric Administration (NOAA) family of Polar Orbiting Environmental Satellites (POES) having a operational legacy that traces back to the Television Infrared Observation Satellite-N (TIROS-N) launched in 1978. AVHRR instruments measure the radiance of the Earth in 5 (or 6) relatively wide spectral bands. The first two are centered around the red (0.6 micrometer) and near-infrared (0.9 micrometer) regions, the third one is located around 3.5 micrometer, and the last two sample the emitted thermal radiation, around 11 and 12 micrometers, respectively. The legacy 5 band instrument is known as AVHRR/2 while the more recent version, the AVHRR/3 (first carried on the NOAA-15 platform), acquires data in a 6th channel located at 1.6 micrometer. Typically the 11 and 12 micron channels are used to derive sea surface temperature (SST) sometimes in combination with the 3.5 micron channel. The highest ground resolution that can be obtained from the current AVHRR instruments is 1.1 km at nadir. The NOAA platforms are sun synchronous generally viewing the same earth location twice a day or more (latitude dependent) due to the relatively large AVHRR swath of approximately 2400 km.NEODAAS-Dundee acquires approximately 15 AVHRR direct broadcast High Resolution Picture Transmission (HRPT) passes per day over NW Europe and the Arctic. Each pass is approximately 15 minutes duration. These are immediately transferred to NEODAAS-Plymouth where they are processed into sea surface temperature (SST) products and converted to L2P specifications. BASIC RESEARCH Processed by Panorama at PML onGoing US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information 8:30-6:00 PM, EST pointOfContact Peter Miller NEODAAS > NERC Earth Observation Data Acquisition and Analysis Service +44 1752 633485 +44 1752 633101 info@nospam.neodaas.ac.uk http://www.neodaas.ac.uk/faq/ pointOfContact asNeeded http://data.nodc.noaa.gov/cgi-bin/gfx?id=gov.noaa.nodc:GHRSST-NEODAAS-L2P-AVHRR17_L Preview graphic PNG 0046179 0046210 0046244 0046274 0046313 0046344 0046375 0046406 0046443 0046470 0046502 0046532 0046565 0046592 0046629 0046659 0046690 0046720 0046764 0046794 0046824 0046856 0046886 0046913 0046942 0046972 0047003 0047033 0047066 0047096 0047126 0047155 0047182 0048372 0048399 0048429 0048460 0048488 0048504 0048550 0048579 0048608 0048637 0048668 0048699 0048740 0048767 0048793 0048819 0048847 0048873 0048904 0048932 0048961 0048988 0049016 0049044 0049072 0049098 0049126 0049154 0049178 0049202 0049230 0049258 0049286 0049295 0049338 0049362 0049388 0049413 0049445 0049474 0049531 0049576 0049605 0049633 0049663 0049769 0049796 0049824 0049851 0049918 0049945 0049999 0050026 0050053 0050080 0050107 0050134 0050160 0050183 0050219 0050249 0050277 0050300 0050332 0050359 0050387 0050413 0050439 0050461 0050549 0050572 0050597 0050623 0050648 0050718 0050765 0050829 0050853 0050878 0050903 0050928 0050950 0050990 0051014 0051039 0051094 0051119 0051144 0051169 0051194 0051216 0051241 0051266 0051291 0051316 0051341 0051366 0051391 0051418 0051443 0051470 0051492 0051521 0051546 0051575 0051600 0051627 0051652 0051677 0051701 0051726 0051748 0051773 0051798 0051996 0052051 0052084 0052112 0052139 0052164 0052189 0052215 0052238 0052262 0052286 0052312 0052335 0052360 0052386 0052421 0052446 0052494 0052518 0052541 0052566 0052595 0052616 0052638 0052668 0052693 0052718 0052744 0052787 0052810 0052833 0052859 0052889 0052916 0052943 0052966 0052999 0053022 0053084 0053108 0053128 0053152 0053176 0053199 0053232 0053251 0053295 0053326 0053348 0053372 0053396 0053430 0053454 0053478 0053512 0053539 0053565 0053591 0053618 0053645 0053678 0053705 0053733 0053760 0053790 0053817 0053842 0053869 0053895 0053922 0053948 0053972 0053996 0054019 0054045 0054071 0054100 0054127 0054161 0054188 0054338 0054367 0054398 0054427 0054455 0054482 0054518 0054547 0054579 0054608 0054637 0054666 0054694 0054749 0054793 0054822 0054914 0054942 0054993 0055021 0055052 0055081 0055117 0055146 0055178 0055204 0055231 0055258 0055315 0055343 0055428 0055458 0055488 0055518 0055548 0055577 0055607 0055637 0055668 0055695 0055725 0055755 0055852 0055883 0055912 0055940 0055968 0055996 0056024 0056053 0056085 0056115 0056146 0056176 0056225 0056255 0056287 0056317 0056348 0056378 0056412 0056442 0056470 0056500 0056527 0056560 0056590 0056618 0056645 0056674 0056703 0056738 0056767 0056798 0056827 0056862 0056891 0056923 0056952 0056978 0057004 0057032 0057059 0057088 0057117 0057149 0057178 0057208 0057237 0057266 0057295 0057326 0057355 0057388 0057417 0057444 0057480 0057509 0057538 0057567 0057599 0057628 0057670 0057699 0057727 0057755 0057881 0057909 0057939 0057964 0057989 0058017 0058047 0058075 0058109 0058135 0058163 0058191 0058220 0058248 0058280 0058308 0058336 0058363 0058389 0058416 0058447 0058475 0058505 0058533 0058561 0058589 0058617 0058642 0058669 0058693 0058720 0058744 0058768 0058792 0058818 0058865 0058889 0058914 0058938 0058965 0058992 0059022 0059049 0059078 0059105 0059136 0059162 0059187 0059209 0059232 0059257 0059283 0059308 0059332 0059367 0059398 0059425 0059450 0059475 0059501 0059528 0059554 0059584 0059609 0059635 0059658 0059681 0059704 0059717 0059721 0059727 0059791 0059792 0059800 0059804 0059828 0059833 0060201 0060228 0060252 0060275 0060321 0060344 0060367 0060416 0060439 0060462 0060488 0060514 0060540 0060566 0060592 0060616 0060641 0060666 0060695 0060720 0060767 0060791 0060817 0060841 0060866 0060891 0060916 0060940 0060970 0060996 0061021 0061051 0061076 0061102 0061128 0061159 0061185 0061214 0061240 0061268 0061294 0061320 0061346 0061373 0061399 0061428 0061454 0061481 0061507 0061533 0061559 0061592 0061618 0061644 0061669 0061695 0061721 0061758 0061784 0061811 0061839 0061865 0061889 0061913 0061938 0061962 0061990 0062014 0062045 0062069 0062094 0062118 0062145 0062170 0062196 0062220 0062244 0062267 0062293 0062317 0062343 0062367 0062391 0062415 0062442 0062476 0062493 0062521 0062547 0063068 0063079 0063090 0063101 0063111 0063121 0063131 0063141 0063151 0063162 0063173 0063197 0063209 0063221 0063233 0063249 0063277 0063289 0063304 0063316 0063328 0063340 0063352 0063364 0063376 0063390 0063402 0063414 0063436 0063449 0063462 0063474 0063487 0063500 0063513 0063541 0063554 0063567 0063589 0063602 0063619 0063792 0063839 0063863 0063908 0063979 0064188 0064470 0064678 0065176 0066694 0073287 0073288 0073291 0073294 0087331 0114635 0114637 0122474 NODC ACCESSION NUMBER 2014-10-02 publication SEA SURFACE TEMPERATURE theme NODC DATA TYPES THESAURUS AVHRR-3 instrument NODC INSTRUMENT TYPES THESAURUS satellite data theme NODC OBSERVATION TYPES THESAURUS NOAA-17 SATELLITE platform NODC PLATFORM NAMES THESAURUS NERC Earth Observation Data Acquisition and Analysis Service dataCenter NODC COLLECTING INSTITUTION NAMES THESAURUS US NASA; Jet Propulsion Laboratory; Physical Oceanography Distributed Active Archive Center dataCenter NODC SUBMITTING INSTITUTION NAMES THESAURUS Group for High Resolution Sea Surface Temperature (GHRSST) project NODC PROJECT NAMES THESAURUS World-Wide Distribution place NODC SEA AREA NAMES THESAURUS oceanography theme WMO_CategoryCode 2012-09-15 publication Earth Science > Oceans > Ocean Temperature > Sea Surface Temperature > Bulk Sea Surface Temperature theme NASA/GCMD Earth Science Keywords Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C. Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau (2013). NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0 Northeast Atlantic place NASA/GCMD Location Keywords Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C. Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau (2013). NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0 Please note: NOAA and NODC make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NODC cannot assume liability for any damages caused by any errors or omissions in these data. accessLevel: Public otherRestrictions Cite as: NERC Earth Observation Data Acquisition and Analysis Service (NEODAAS) (2008). GHRSST Level 2P North Atlantic Regional Bulk Sea Surface Temperature from the Advanced Very High Resolution Radiometer (AVHRR) on the NOAA-17 satellite produced by NEODAAS (GDS version 1). National Oceanographic Data Center, NOAA. Dataset. [access date] otherRestrictions None GHRSST Level 2P North Atlantic Regional Bulk Sea Surface Temperature from the Advanced Very High Resolution Radiometer (AVHRR) on the NOAA-17 satellite produced by NEODAAS Sea surface temperature from AVHRR 20080526 creation 1 NEODAAS http://www.neodaas.ac.uk/faq/ originator NEODAAS NERC Earth Observation Data Acquisition and Analysis Service, UK publisher collection userGuide Portal to the GHRSST Global Data Assembly Center and data access Group for High Resolution Sea Surface Temperature http://ghrsst.jpl.nasa.gov HTTP Standard Internet browser Portal to the GHRSST Global Data Assembly Center and data access Portal to the GHRSST Global Data Assembly Center and data access custodian crossReference collection GHRSST Project homepage Group for High Resolution Sea Surface Temperature http://www.ghrsst.org HTTP Standard Internet browser GHRSST Project homepage GHRSST Project homepage custodian crossReference collection Web Service (PO.DAAC Labs) (Search Granule) Group for High Resolution Sea Surface Temperature http://podaac.jpl.nasa.gov/ws/search/granule/?datasetId=PODAAC-GH17L-2PS01&apidoc HTTP Standard Internet browser Web Service (PO.DAAC Labs) (Search Granule) custodian crossReference collection grid eng utf8 oceans environment biota climatologyMeteorologyAtmosphere -60 60 24 90 2008-09-02 2010-05-18 referenceInformation lat float lon float time int US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov 8:30-6:00 PM, EST pointOfContact Digital data may be downloaded from NODC at no charge in most cases. For custom orders of digital data or to obtain a copy of analog materials, please contact NODC User Services for information about current fees. Data may be searched and downloaded using online services provided by the NODC using the online resource URLs in this record. Contact NODC User Services for custom orders. When requesting data from the NODC, the desired data set may be referred to by the NODC Accession Number listed in this metadata record. netCDF netCDF-3 BZIP2 http://www.nodc.noaa.gov/geoportal/rest/find/document?searchText=fileIdentifier%3AGHRSST-NEODAAS-L2P-AVHRR17_L*%20OR%20fileIdentifier%3ANEODAAS-L2P-AVHRR17_L*&start=1&max=100&f=SearchPage HTTP Standard Internet browser Granule Search Granule Search search http://data.nodc.noaa.gov/cgi-bin/iso?id=gov.noaa.nodc:GHRSST-NEODAAS-L2P-AVHRR17_L HTTP Standard Internet browser Details Navigate directly to the URL for a descriptive web page with download links. information http://data.nodc.noaa.gov/thredds/catalog/ghrsst/L2P/AVHRR17_L/NEODAAS/ THREDDS Standard Internet browsers can browse THREDDS Data Servers and specialized THREDDS software can enable more sophisticated data access and visualizations. THREDDS These data are available through a variety of services via a THREDDS (Thematic Real-time Environmental Distributed Data Services) Data Server (TDS). The base URL of NODC's TDS is http://data.nodc.noaa.gov/thredds. Depending on the dataset, the TDS can provide WMS, WCS, DAP, HTTP, and other data access and metadata services as well. For more information on the TDS, see http://www.unidata.ucar.edu/software/thredds/current/tds/. download http://data.nodc.noaa.gov/opendap/ghrsst/L2P/AVHRR17_L/NEODAAS/ DAP Standard Internet browsers can browse OPeNDAP servers and specialized OPeNDAP software can enable more sophisticated data access and visualizations. OPeNDAP These data are available through the Data Access Protocol (DAP) via an OPeNDAP Hyrax server. The base URL of NODC's Hyrax server is http://data.nodc.noaa.gov/opendap/. For a listing of OPeNDAP clients which may be used to access OPeNDAP-enabled data sets, please see the OPeNDAP website at http://opendap.org/. download http://data.nodc.noaa.gov/ghrsst/L2P/AVHRR17_L/NEODAAS/ HTTP Standard Internet browser Download Navigate directly to the URL for data access and direct download. download ftp://ftp.nodc.noaa.gov/pub/data.nodc/ghrsst/L2P/AVHRR17_L/NEODAAS/ FTP Any FTP client FTP These data are available through the File Transfer Protocol (FTP). The base URL of NODC's FTP server is ftp://ftp.nodc.noaa.gov/ and you may use any FTP client to download these data. download asNeeded Combined metadata from JPL and NODC DOC/NOAA/NESDIS/NODC > National Oceanographic Data Center, NESDIS, NOAA, U.S. Department of Commerce custodian AVHRR-3 > Advanced Very High Resolution Radiometer-3 sensor The AVHRR is a radiation-detection imager that can be used for remotely determining cloud cover and the surface temperature. Note that the term surface can mean the surface of the Earth, the upper surfaces of clouds, or the surface of a body of water. NOAA-17 > National Oceanic & Atmospheric Administration-17 The POES satellite system offers the advantage of daily global coverage, with morning and afternoon orbits that deliver global data, for improvement of weather forecasting. The information received includes cloud cover, storm location, temperature, and heat balance in the earth's atmosphere. NEODAAS http://www.neodaas.ac.uk/faq/ sponsor NASA/JPL/PODAAC > Physical Oceanography Distributed Active Archive Center, Jet Propulsion Laboratory, NASA http://podaac.jpl.nasa.gov information sponsor gov.noaa.nodc:GHRSST-NEODAAS-L2P-AVHRR17_L"); @@ -312,6 +320,7 @@ private void setupNodc2Expected() throws Exception { nodc2Expected.put("blockedReplicationMN", ""); nodc2Expected.put("obsoletes", ""); nodc2Expected.put("obsoletedBy", ""); + nodc2Expected.put("archived", "false"); nodc2Expected.put("dateUploaded", dateConverter.convert("2015-05-08T01:47:41.356045")); nodc2Expected.put("dateModified", dateConverter.convert("2015-05-08T01:47:41.391065Z")); nodc2Expected.put("datasource", "urn:node:NODC"); @@ -392,6 +401,8 @@ private void setupIarc1Expected() throws Exception { iarc1Expected .put("text", "8bd65007-f4b7-4b6e-8e71-05d7cf48a620 eng Jake Stroh jnstroh@alaska.edu 2014-03-04T10:48:09 ISO 19115:2003/19139 1.0 Volume, heat and salt transport in the North-Eastern Bering Sea during 2007-2010 derived through the 4dvar data assimilation of in-situ and satellite observations 2014-02-21T10:40:00 The rich collection of BEST-BSIERP observations and other sources of data provide an excellent opportunity for synthesis through modeling and data assimilation to improve our understanding of changes in physical forcings of the Bering ecosystem in response to climate change. Assimilating data of different origins, which may be sparse in space and time, is difficult using simple algorithms (traditional optimal interpolation, correlation analysis etc.).The 4Dvar approach is effective for performing spatiotemporal interpolation of sparse data via interpolation (covariance) functions with scales based on ocean dynamics (Bennett, 2002). Jake Stroh International Arctic Research Center jnstroh@alaska.edu thumbnail large_thumbnail BEST Bering sea BSIERP eng geoscientificInformation 2007-01-01T10:43:00 2010-12-31T10:44:00 -180 -158 50 67 http://climate.iarc.uaf.edu:8080/geonetwork/srv/en/resources.get?id=611&fname=best_bs_currents3-rev_final.pdf&access=private WWW:DOWNLOAD-1.0-http--download best_bs_currents3-rev_final.pdf Ocean Sciences meeting 2014 iso19139_8bd65007-f4b7-4b6e-8e71-05d7cf48a620_0"); + iarc1Expected.put("licenseName", ""); + iarc1Expected.put("licenseDescription", ""); // system metadata iarc1Expected.put("id", pid3); @@ -415,6 +426,7 @@ private void setupIarc1Expected() throws Exception { iarc1Expected.put("blockedReplicationMN", ""); iarc1Expected.put("obsoletes", ""); iarc1Expected.put("obsoletedBy", ""); + iarc1Expected.put("archived", "false"); iarc1Expected.put("dateUploaded", dateConverter.convert("2015-05-08T01:47:46.858771")); iarc1Expected.put("dateModified", dateConverter.convert("2015-05-08T01:47:46.893356Z")); iarc1Expected.put("datasource", "urn:node:IARC"); @@ -474,6 +486,8 @@ private void setupIarc2Expected() throws Exception { iarc2Expected.put("geohash_9", "b7t8h7nmy"); iarc2Expected.put("fileID", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid4, "UTF-8")); + iarc2Expected.put("licenseName", ""); + iarc2Expected.put("licenseDescription", ""); iarc2Expected .put("text", "bcc7e1be-2683-433c-b351-bc061f35ceb8 eng 6a503c5a-78ae-434e-b76e-b2d2755b7aef Dr Jessica Cherry 907-474-5730 jcherry@iarc.uaf.edu 2011-12-08T15:38:44 ISO 19115:2003/19139 1.0 WGS 1984 National Ocean Service Aerial Photographs: Seward Peninsula Coastline - Flight Line 29 Outer Continental Shelf Environmental Assesment Program 1976-07-23T00:00:00 This aerial photograph collection consists of about 1897 frames of color infrared and natural color transparencies. It was flown in the summers of 1976 and 1977 for the Outer Continental Shelf Environmental Assessment Program, at an altitude ranging from about 5,000 - 18,400 feet. ECR prefix indicates color infrared, and CC/ZC indicates natural color. It is filed by flight line.This subset of the aerial photograph collection includes flight lines that included coastline from the Seward Peninsula. Flight lines include numbers 8-14 and 24-40. There are 846 images in this subset, 281 natural color images and 565 color infrared images.The photography may be ordered from the National Archives or duplicated in the National Ocean Service photo lab. Photograph Alaskan coast line during 1976-1977 for comparison at later dates. Dr Jessica Cherry Water and Environmental Research Center, UAF 907-474-5730 Fairbanks Alaska United States of America jcherry@iarc.uaf.edu Seward Peninsula Alaska Coast Norton Bay Candle Aerial Photography Color Infrared eng imageryBaseMapsEarthCover 1976-07-23T00:00:00 1976-07-23T00:00:00 -161.09 -160.55 64.34 65.07 Seward Peninsula CoastlineFlight Line 29Color: Ungalik River - Kenwood CreekInfrared: Ungalik River - KoyukQuad: Norton Bay, Candle 1st Frame - Last FrameColor: 6539 - 6546Infrared: 5760 - 5770Altitude: 18000 feet film none http://climate.iarc.uaf.edu:8080/geonetwork/srv/en/resources.get?id=169&fname=&access=private WWW:DOWNLOAD-1.0-http--download This is not where this data is stored. Please see Point of Contact for information. iso19139_bcc7e1be-2683-433c-b351-bc061f35ceb8_0"); @@ -500,6 +514,7 @@ private void setupIarc2Expected() throws Exception { iarc2Expected.put("blockedReplicationMN", ""); iarc2Expected.put("obsoletes", ""); iarc2Expected.put("obsoletedBy", ""); + iarc2Expected.put("archived", "false"); iarc2Expected.put("dateUploaded", dateConverter.convert("2015-05-08T01:47:41.356045")); iarc2Expected.put("dateModified", dateConverter.convert("2015-05-08T01:47:41.391065Z")); iarc2Expected.put("datasource", "urn:node:IARC"); @@ -544,6 +559,7 @@ private void setupTightlyCoupledServiceExpected() throws Exception { tightlyCoupledServiceExpected.put("blockedReplicationMN", ""); tightlyCoupledServiceExpected.put("obsoletes", ""); tightlyCoupledServiceExpected.put("obsoletedBy", ""); + tightlyCoupledServiceExpected.put("archived", "false"); tightlyCoupledServiceExpected.put("dateUploaded", dateConverter.convert("2016-01-11T20:49:00.385Z")); tightlyCoupledServiceExpected.put("dateModified", dateConverter.convert("2016-01-11T20:49:00.385Z")); tightlyCoupledServiceExpected.put("datasource", "urn:node:mnDemo6"); @@ -610,6 +626,8 @@ private void setupTightlyCoupledServiceExpected() throws Exception { "DataIdentification" + "#" + "DataIdentification"); tightlyCoupledServiceExpected.put("serviceOutput", "DAP/2.0"); + tightlyCoupledServiceExpected.put("licenseName", ""); + tightlyCoupledServiceExpected.put("licenseDescription", "The data may be used and redistributed for free but is not intendedfor legal use, since it may contain inaccuracies. Neither the dataContributor, ERD, NOAA, nor the United States Government, nor anyof their employees or contractors, makes any warranty, express orimplied, including warranties of merchantability and fitness for aparticular purpose, or assumes any legal liability for the accuracy,completeness, or usefulness, of this information."); } private void setupLooselyCoupledServiceExpected() throws Exception { @@ -632,6 +650,7 @@ private void setupLooselyCoupledServiceExpected() throws Exception { looselyCoupledServiceExpected.put("blockedReplicationMN", ""); looselyCoupledServiceExpected.put("obsoletes", ""); looselyCoupledServiceExpected.put("obsoletedBy", ""); + looselyCoupledServiceExpected.put("archived", "false"); looselyCoupledServiceExpected.put("dateUploaded", dateConverter.convert("2016-01-12T17:30:48.415Z")); looselyCoupledServiceExpected.put("dateModified", dateConverter.convert("2016-01-12T17:30:48.415Z")); looselyCoupledServiceExpected.put("datasource", "urn:node:mnDemo6"); @@ -645,7 +664,7 @@ private void setupLooselyCoupledServiceExpected() throws Exception { looselyCoupledServiceExpected.put("isPublic", "true"); looselyCoupledServiceExpected.put("dataUrl", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid6, "UTF-8")); - + // science metadata looselyCoupledServiceExpected.put("author", "Bob"); looselyCoupledServiceExpected.put("authorSurName", "Bob"); @@ -684,6 +703,9 @@ private void setupLooselyCoupledServiceExpected() throws Exception { looselyCoupledServiceExpected.put("serviceInput", "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/CF-1.3" + "#" + "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/CF-1.4"); looselyCoupledServiceExpected.put("serviceOutput", "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/image%2Fsvg%20xml"); + looselyCoupledServiceExpected.put("licenseName", ""); + looselyCoupledServiceExpected.put("licenseDescription", ""); + } private void setupDistributionInfoExpected() throws Exception { @@ -706,6 +728,7 @@ private void setupDistributionInfoExpected() throws Exception { distributionInfoExpected.put("blockedReplicationMN", ""); distributionInfoExpected.put("obsoletes", ""); distributionInfoExpected.put("obsoletedBy", ""); + distributionInfoExpected.put("archived", "false"); distributionInfoExpected.put("dateUploaded", dateConverter.convert("2016-01-12T17:30:48.415Z")); distributionInfoExpected.put("dateModified", dateConverter.convert("2016-01-12T17:30:48.415Z")); distributionInfoExpected.put("datasource", "urn:node:mnDemo6"); @@ -719,7 +742,7 @@ private void setupDistributionInfoExpected() throws Exception { distributionInfoExpected.put("isPublic", "true"); distributionInfoExpected.put("dataUrl", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid7, "UTF-8")); - + // science metadata distributionInfoExpected.put("author", "Robert Potash"); distributionInfoExpected.put("authorSurName", "Robert Potash"); @@ -787,6 +810,12 @@ private void setupDistributionInfoExpected() throws Exception { ); distributionInfoExpected.put("serviceInput", ""); // implicitly part of endpoint URL distributionInfoExpected.put("serviceOutput", "netCDF-4"); + distributionInfoExpected.put("licenseDescription", + "Please note: NOAA and NCEI make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NCEI cannot assume liability for any damages caused by any errors or omissions in these data." + + "#" + "accessLevel: Public" + + "#" + "Cite as: US DOC; NOAA; NESDIS; Office of Satellite and Product Operations (OSPO) (2010). GHRSST Level 2P Western Atlantic Regional Skin Sea Surface Temperature from the Geostationary Operational Environmental Satellites (GOES) Imager on the GOES-13 satellite (GDS versions 1 and 2). National Oceanographic Data Center, NOAA. Dataset. [access date]" + + "#" + "None"); + distributionInfoExpected.put("licenseName", "otherRestrictions"); } private void setupGeoserverExpected() throws Exception { @@ -809,6 +838,7 @@ private void setupGeoserverExpected() throws Exception { geoserverExpected.put("blockedReplicationMN", ""); geoserverExpected.put("obsoletes", ""); geoserverExpected.put("obsoletedBy", ""); + geoserverExpected.put("archived", "false"); geoserverExpected.put("dateUploaded", dateConverter.convert("2016-01-12T17:30:48.415Z")); geoserverExpected.put("dateModified", dateConverter.convert("2016-01-12T17:30:48.415Z")); geoserverExpected.put("datasource", "urn:node:mnDemo6"); @@ -878,6 +908,8 @@ private void setupGeoserverExpected() throws Exception { + "#" + "http://localhost:8080/geoserver/type?distrib=info"); geoserverExpected.put("serviceInput", ""); // implicitly part of endpoint URL geoserverExpected.put("serviceOutput", ""); + geoserverExpected.put("licenseName", ""); + geoserverExpected.put("licenseDescription", ""); } private void setupLooselyCoupledServiceSrvOnlyExpected() throws Exception { @@ -900,6 +932,7 @@ private void setupLooselyCoupledServiceSrvOnlyExpected() throws Exception { looselyCoupledServiceSrvAndDistribExpected.put("blockedReplicationMN", ""); looselyCoupledServiceSrvAndDistribExpected.put("obsoletes", ""); looselyCoupledServiceSrvAndDistribExpected.put("obsoletedBy", ""); + looselyCoupledServiceSrvAndDistribExpected.put("archived", "false"); looselyCoupledServiceSrvAndDistribExpected.put("dateUploaded", dateConverter.convert("2016-01-12T17:30:48.415Z")); looselyCoupledServiceSrvAndDistribExpected.put("dateModified", dateConverter.convert("2016-01-12T17:30:48.415Z")); looselyCoupledServiceSrvAndDistribExpected.put("datasource", "urn:node:mnDemo6"); @@ -955,6 +988,8 @@ private void setupLooselyCoupledServiceSrvOnlyExpected() throws Exception { looselyCoupledServiceSrvAndDistribExpected.put("serviceInput", "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/CF-1.3" + "#" + "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/CF-1.4"); looselyCoupledServiceSrvAndDistribExpected.put("serviceOutput", "https://cn-dev-ucsb-1.test.dataone.org/cn/v2/formats/image%2Fsvg%20xml" + "#" + "DAP/2.0"); + looselyCoupledServiceSrvAndDistribExpected.put("licenseName", ""); + looselyCoupledServiceSrvAndDistribExpected.put("licenseDescription", ""); } private void setupTightlyCoupledServiceSrvOnlyExpected() throws Exception { @@ -977,6 +1012,7 @@ private void setupTightlyCoupledServiceSrvOnlyExpected() throws Exception { tightlyCoupledServiceSrvOnlyExpected.put("blockedReplicationMN", ""); tightlyCoupledServiceSrvOnlyExpected.put("obsoletes", ""); tightlyCoupledServiceSrvOnlyExpected.put("obsoletedBy", ""); + tightlyCoupledServiceSrvOnlyExpected.put("archived", "false"); tightlyCoupledServiceSrvOnlyExpected.put("dateUploaded", dateConverter.convert("2016-01-12T17:30:48.415Z")); tightlyCoupledServiceSrvOnlyExpected.put("dateModified", dateConverter.convert("2016-01-12T17:30:48.415Z")); tightlyCoupledServiceSrvOnlyExpected.put("datasource", "urn:node:mnDemo6"); @@ -990,7 +1026,9 @@ private void setupTightlyCoupledServiceSrvOnlyExpected() throws Exception { tightlyCoupledServiceSrvOnlyExpected.put("isPublic", "true"); tightlyCoupledServiceSrvOnlyExpected.put("dataUrl", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid10, "UTF-8")); - + tightlyCoupledServiceSrvOnlyExpected.put("licenseDescription", ""); + tightlyCoupledServiceSrvOnlyExpected.put("licenseName", ""); + // science metadata tightlyCoupledServiceSrvOnlyExpected.put("author", ""); tightlyCoupledServiceSrvOnlyExpected.put("authorSurName", ""); @@ -1062,6 +1100,11 @@ private void setupNoaaExpected() throws Exception { noaaExpected.put("geohash_9", "emh1q2bnx"); noaaExpected.put("fileID", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid11, "UTF-8")); + noaaExpected.put("licenseName", "otherRestrictions"); + noaaExpected.put("licenseDescription", "Please note: NOAA and NODC make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NODC cannot assume liability for any damages caused by any errors or omissions in these data." + + "#" + "accessLevel: Public" + + "#" + "Cite as: Sy, A. and University of Hamburg; Institut Fuer Meereskunde (2010). DEPTH - OBSERVATION and Other Data from UNKNOWN PLATFORMS and Other Platforms from 19980101 to 19981212 (NODC Accession 9900233). National Oceanographic Data Center, NOAA. Dataset. [access date]" + + "#" + "None"); noaaExpected.put("text", "isotc211_noaa_12345 eng utf8 dataset US National Oceanographic Data Center Data Officer 301-713-3272 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information custodian 2014-01-23T14:00:11 ISO 19115-2 Geographic Information - Metadata - Part 2: Extensions for Imagery and Gridded Data ISO 19115-2:2009(E) DEPTH - OBSERVATION and Other Data from UNKNOWN PLATFORMS and Other Platforms from 19980101 to 19981212 (NODC Accession 9900233) 2010-12-19 publication NODC Accession Number US National Oceanographic Data Center resourceProvider gov.noaa.nodc:9900233 US National Oceanographic Data Center 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.DataOfficer@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information publisher Alexander Sy Federal Maritime Agency - Hamburg 040-3190-3430 BERNHARD-NOCHT-STRASSE 78 HAMBURG D-20359 DEU alexander.sy@bsh.de http://www.bsh.de HTTP Standard Internet browser Federal Maritime Agency - Hamburg website Institution web page information resourceProvider University of Hamburg; Institut Fuer Meereskunde TROPLOWITZSTR, 7 HAMBURG D-2000, 54 DEU resourceProvider tableDigital BASIC RESEARCH completed US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov http://www.nodc.noaa.gov/ HTTP Standard Internet browser US National Oceanographic Data Center website Main NODC website providing links to the NODC Geoportal and access links to data and data services. information 8:30-6:00 PM, EST pointOfContact asNeeded http://data.nodc.noaa.gov/cgi-bin/gfx?id=gov.noaa.nodc:9900233 Preview graphic PNG 9900233 NODC ACCESSION NUMBER 2000-02-29 publication DEPTH - OBSERVATION WATER TEMPERATURE theme NODC DATA TYPES THESAURUS bathythermograph - XBT instrument NODC INSTRUMENT TYPES THESAURUS physical profile theme NODC OBSERVATION TYPES THESAURUS ANTON DOHRN II CAP FINISTERRE GAUSS KOELN EXPRESS UNKNOWN PLATFORMS platform NODC PLATFORM NAMES THESAURUS University of Hamburg; Institut Fuer Meereskunde dataCenter NODC COLLECTING INSTITUTION NAMES THESAURUS University of Hamburg; Institut Fuer Meereskunde dataCenter NODC SUBMITTING INSTITUTION NAMES THESAURUS UNKNOWN WORLD OCEAN CIRCULATION EXPERIMENT (WOCE) project NODC PROJECT NAMES THESAURUS oceanography theme WMO_CategoryCode 2012-09-15 publication Please note: NOAA and NODC make no warranty, expressed or implied, regarding these data, nor does the fact of distribution constitute such a warranty. NOAA and NODC cannot assume liability for any damages caused by any errors or omissions in these data. accessLevel: Public otherRestrictions Cite as: Sy, A. and University of Hamburg; Institut Fuer Meereskunde (2010). DEPTH - OBSERVATION and Other Data from UNKNOWN PLATFORMS and Other Platforms from 19980101 to 19981212 (NODC Accession 9900233). National Oceanographic Data Center, NOAA. Dataset. [access date] otherRestrictions None eng utf8 oceans environment -50 -5.7 -9 65.7 1998-01-01 1998-12-12 Note: Metadata for this accession were extracted from a legacy databasemaintained by the U.S. National Oceanographic Data Center (NODC). Thedesign of the database did not exactly reflect the FGDC ContentStandard for Digital Geospatial Metadata (CSDGM).Principal Investigator (PI) and organization contact informationaccurately represents all available information from the legacy databaseat the time that this description was created. However, properattribution of a PI to a specific institution or the role (submitting orcollecting) taken by an institution may not be correct due to inexactmapping between fields in the legacy database and the CSDGM. Due to thisuncertainty, the contact information was initially recorded in theSupplemental Information element of the CSDGM description.To develop more accurate metadata, the NODC reviews metadata for allaccessions on an ongoing basis.Points of contact for this data set include:Contact info:Agency: UNIVERSITY OF HAMBURG; INSTITUT FUER MEERESKUNDEPI: Sy, Dr. AlexanderAddress:address: TROPLOWITZSTR, 7city: HAMBURGstate: NOT AVAILABLEpostal: D-2000, 54country: GERMANY US National Oceanographic Data Center NODC User Services 301-713-3277 301-713-3302 1315 East-West Highway, SSMC3, 4th floor Silver Spring MD 20910-3282 USA NODC.Services@noaa.gov 8:30-6:00 PM, EST pointOfContact Digital data may be downloaded from NODC at no charge in most cases. For custom orders of digital data or to obtain a copy of analog materials, please contact NODC User Services for information about current fees. Data may be searched and downloaded using online services provided by the NODC using the online resource URLs in this record. Contact NODC User Services for custom orders. When requesting data from the NODC, the desired data set may be referred to by the NODC Accession Number listed in this metadata record. Originator data format http://accession.nodc.noaa.gov/9900233 HTTP Standard Internet browser Details Navigate directly to the URL for a descriptive web page with download links. information asNeeded Metadata are developed, maintained and distributed by the NODC. Updates are performed as needed to maintain currentness. DOC/NOAA/NESDIS/NODC > National Oceanographic Data Center, NESDIS, NOAA, U.S. Department of Commerce custodian isotc211_noaa_12345"); @@ -1085,6 +1128,7 @@ private void setupNoaaExpected() throws Exception { noaaExpected.put("blockedReplicationMN", ""); noaaExpected.put("obsoletes", ""); noaaExpected.put("obsoletedBy", ""); + noaaExpected.put("archived", "false"); noaaExpected.put("dateUploaded", dateConverter.convert("2015-05-08T01:47:41.356045")); noaaExpected.put("dateModified", dateConverter.convert("2015-05-08T01:47:41.391065Z")); noaaExpected.put("datasource", "urn:node:NODC"); @@ -1140,6 +1184,8 @@ private void setupResearchWorkspaceExpected() throws Exception { researchWorkspaceExpected.put("geohash_9", ""); researchWorkspaceExpected.put("fileID", "https://" + hostname + "/cn/v2/resolve/" + URLEncoder.encode(pid12, "UTF-8")); + researchWorkspaceExpected.put("licenseName", ""); + researchWorkspaceExpected.put("licenseDescription", ""); researchWorkspaceExpected.put("text", "eng;USA UTF-8 dataset ISO 19115 Hydrogen, carbon and nitrogen isotopes trace biogeochemical subsidies in glacier runoff into coastal marine food webs 2012-07-30 creation 2015-06-01 creation Multiple creation dates represent a range To demonstrate connectivity between terrestrial and marine ecosystems, we sampled stable and radiogenic isotopes to estimate the relative contribution terrestrial-derived organic matter (OM) via glacier runoff to marine food webs. This spreadsheet dataset contains isotope ratios of water, dissolved organic matter (DOM), dissolved inorganic matter (DIC) and particulate organic matter (POM), mussels, marine sponge, marine snail, shrimp, plankton, fish and seabirds from the Prince William Sound and Aleutian Islands during the peak glacier melt in summer (July-August 2012 and 2013). Data are provided in a CSV file (nprb-1206-glacier-isotope-data.xml), and the full metadata record for this dataset is provided in the FGDC-compliant XML file (nprb-1206-glacier-isotope-metadata.xml) archived as part of the dataset. 1) Estimate the importance of freshwater-derived organic matter and organic nutrients to nearshore marine production using 13C and 2H stable isotopes, 2) Examine whether glacier-derived ancient organic matter subsidizes the nutritional requirements of marine biota using radiocarbon 1C, 3) Model the spatial pattern of freshwater infiltration and mixing in glacial fjords using 2H stable isotopes Keith Hobson University of Saskatchewan Adjunct Professor 112 Science Place Saskatoon Saskatchewan S7N 5E2 Canada principalInvestigator John Piatt 4210 University Dr Anchorage Alaska 99801 United States principalInvestigator Mayumi Arimitsu 3100 National Park Rd Juneau Alaska 99801 United States principalInvestigator Eran Hood 11120 Glacier Highway Juneau Alaska 99801 United States principalInvestigator freshwater zooplankton forage fish seabird carbon glacier nearshore ecosystem organic nutrients radioisotope deuterium theme eng;USA Port Nellie Juan eng; USA true Hydrogen, carbon and nitrogen isotopes trace biogeochemical subsidies in glacier runoff into coastal marine food webs dataset isotc211_researchWorkspace"); @@ -1163,6 +1209,7 @@ private void setupResearchWorkspaceExpected() throws Exception { researchWorkspaceExpected.put("blockedReplicationMN", ""); researchWorkspaceExpected.put("obsoletes", ""); researchWorkspaceExpected.put("obsoletedBy", ""); + researchWorkspaceExpected.put("archived", "false"); researchWorkspaceExpected.put("dateUploaded", dateConverter.convert("2021-03-16T05:34:26.963Z")); researchWorkspaceExpected.put("dateModified", dateConverter.convert("2021-03-16T05:34:26.963Z")); researchWorkspaceExpected.put("datasource", "urn:node:DATAONE_TEST"); diff --git a/src/test/java/org/dataone/cn/index/SolrFieldPortalTest.java b/src/test/java/org/dataone/cn/index/SolrFieldPortalTest.java index 130e54b5..4efc8196 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldPortalTest.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldPortalTest.java @@ -99,6 +99,7 @@ public void setUpPortal() throws Exception { portalExpected.put("blockedReplicationMN", ""); portalExpected.put("obsoletes", "urn:uuid:9174cac2-363c-4f18-ba23-a5bcd8db407d"); portalExpected.put("obsoletedBy", ""); + portalExpected.put("archived", "false"); portalExpected.put("dateUploaded", dateConverter.convert("2019-10-11T14:26:05.59Z")); portalExpected.put("dateModified", dateConverter.convert("2019-10-11T14:26:06.066Z")); portalExpected.put("datasource", "urn:node:mnTestKNB"); diff --git a/src/test/java/org/dataone/cn/index/SolrFieldXPathDryad31Test.java b/src/test/java/org/dataone/cn/index/SolrFieldXPathDryad31Test.java index d20520e3..1428cb7e 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldXPathDryad31Test.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldXPathDryad31Test.java @@ -96,6 +96,7 @@ public void setUp() throws Exception { dryadDataPackage1Expected.put("rightsHolder", "admin@datadryad.org"); dryadDataPackage1Expected.put("replicationAllowed", ""); dryadDataPackage1Expected.put("numberReplicas", ""); + dryadDataPackage1Expected.put("archived", "false"); dryadDataPackage1Expected.put("preferredReplicationMN", ""); dryadDataPackage1Expected.put("blockedReplicationMN", ""); dryadDataPackage1Expected.put("obsoletes", ""); @@ -157,6 +158,7 @@ public void setUp() throws Exception { dryadDataFile1Expected.put("rightsHolder", "admin@datadryad.org"); dryadDataFile1Expected.put("replicationAllowed", ""); dryadDataFile1Expected.put("numberReplicas", ""); + dryadDataFile1Expected.put("archived", "false"); dryadDataFile1Expected.put("preferredReplicationMN", ""); dryadDataFile1Expected.put("blockedReplicationMN", ""); dryadDataFile1Expected.put("obsoletes", ""); diff --git a/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlAttributeTest.java b/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlAttributeTest.java index 3b474a38..64332dcc 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlAttributeTest.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlAttributeTest.java @@ -26,11 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.processor.IndexTaskProcessor; -import org.dataone.cn.indexer.parser.JsonLdSubprocessor; import org.dataone.cn.indexer.parser.ScienceMetadataDocumentSubprocessor; -import org.dataone.cn.indexer.resourcemap.RdfXmlProcessorTest; import org.dataone.service.types.v1.Identifier; import org.dataone.service.types.v1.NodeReference; import org.dataone.service.types.v2.SystemMetadata; @@ -47,17 +43,18 @@ * */ @ThreadLeakScope(ThreadLeakScope.Scope.NONE) -public class SolrFieldXPathEmlAttributeTest extends JsonLdSubprocessorTest { +public class SolrFieldXPathEmlAttributeTest extends DataONESolrJettyTestBase { /* Log it */ private static Log log = LogFactory.getLog( SolrFieldXPathEmlAttributeTest.class); /* The EML objects */ private Resource emlWithDataTable; + private String tableId = "eml2.2.0testdatatable"; private Resource emlWithOtherEntity; + private String otherEntityId = "eml2.2.0testotherentity"; - /* An instance of the EML220 Subprocessor */ - private ScienceMetadataDocumentSubprocessor eml220Subprocessor; + /* Store a map of expected Solr fields and their values for testing */ private HashMap expectedFields = new HashMap(); @@ -76,7 +73,6 @@ public void setUp() throws Exception { super.setUp(); emlWithDataTable = (Resource) context.getBean("emlWithDataTableTestDoc"); emlWithOtherEntity = (Resource) context.getBean("emlWithOtherEntityTestDoc"); - eml220Subprocessor = (ScienceMetadataDocumentSubprocessor) context.getBean("eml220Subprocessor"); } /** @@ -95,62 +91,42 @@ public void tearDown() throws Exception { //@Ignore @Test public void testInsertEmlWithDataTable() throws Exception { - /* variables used to populate system metadata for each resource */ - File object = null; - String formatId = null; - - NodeReference nodeid = new NodeReference(); - nodeid.setValue("urn:node:mnTestXXXX"); - - String userDN = "uid=tester,o=testers,dc=dataone,dc=org"; - - // Insert the schema.org file into the task queue - String id = "urn:uuid:4ad48407-8044-4f4a-9596-18e9cb221656"; - formatId = "https://eml.ecoinformatics.org/eml-2.2.0"; - insertResource(id, formatId, emlWithDataTable, nodeid, userDN); - Identifier identifier = new Identifier(); - SystemMetadata sysmeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); - int count = 0; - while (sysmeta == null && count < TIMES) { - count ++; - Thread.sleep(SLEEPTIME); - sysmeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); - } + indexObjectToSolr(tableId, emlWithDataTable); // now process the tasks - processor.processIndexTaskQueue(); - count = 0; + //processor.processIndexTaskQueue(); + int count = 0; while (count < TIMES) { try { - assertTrue(compareFieldValue(id, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); + assertTrue(compareFieldValue(tableId, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); break; } catch (Exception e) { count ++; Thread.sleep(SLEEPTIME); } } - assertPresentInSolrIndex(id); - assertTrue(compareFieldValue(id, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); + assertPresentInSolrIndex(tableId); + assertTrue(compareFieldValue(tableId, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); String[] projects = {"Chum salmon escapement on Bonanza River in Norton Sound, Alaska"}; - assertTrue(compareFieldValue(id, "project", projects)); + assertTrue(compareFieldValue(tableId, "project", projects)); String[] attributeNames = {"Species","Sp code","Sample Date","GumCard #","Fish #","External Sex","METF Length", "Comments", "ageFresh", "ageSalt", "ageErrorID"}; - assertTrue(compareFieldValue(id, "attributeName", attributeNames)); + assertTrue(compareFieldValue(tableId, "attributeName", attributeNames)); String[] attributeDescriptions = {"Species of salmon sampled","ADF&G species codes","Date that a salmon was collected", "Scale gum card identifier","Fish identifier/number", "Code which represents the sex of a sampled salmon. Sex was determined using external features.", "Mid-eye to fork of tail fish length measurement","comments about sample", "Freshwater age of fish in years","Saltwater age of fish in years","Source of error in age estimate"}; - assertTrue(compareFieldValue(id, "attributeDescription", attributeDescriptions)); + assertTrue(compareFieldValue(tableId, "attributeDescription", attributeDescriptions)); String[] attributeUnits = {"millimeter","dimensionless","dimensionless"}; - assertTrue(compareFieldValue(id, "attributeUnit", attributeUnits)); + assertTrue(compareFieldValue(tableId, "attributeUnit", attributeUnits)); String[] attributes = {"Species Species of salmon sampled","Sp code ADF&G species codes","Sample Date Date that a salmon was collected", "GumCard # Scale gum card identifier","Fish # Fish identifier/number", "External Sex Code which represents the sex of a sampled salmon. Sex was determined using external features.", "METF Length Mid-eye to fork of tail fish length measurement millimeter","Comments comments about sample", "ageFresh Freshwater age of fish in years dimensionless","ageSalt Saltwater age of fish in years dimensionless", "ageErrorID Source of error in age estimate"}; - assertTrue(compareFieldValue(id, "attribute", attributes)); + assertTrue(compareFieldValue(tableId, "attribute", attributes)); } /** @@ -160,61 +136,39 @@ public void testInsertEmlWithDataTable() throws Exception { */ @Test public void testInsertEmlWithOtherEntity() throws Exception { - File object = null; - String formatId = null; - - NodeReference nodeid = new NodeReference(); - nodeid.setValue("urn:node:mnTestXXXX"); - - String userDN = "uid=tester,o=testers,dc=dataone,dc=org"; - - // Insert the schema.org file into the task queue - String id = "urn:uuid:4ad48407-8044-4f4a-9596-18e9cb221658"; - formatId = "https://eml.ecoinformatics.org/eml-2.2.0"; - insertResource(id, formatId, emlWithOtherEntity, nodeid, userDN); - Identifier identifier = new Identifier(); - SystemMetadata sysmeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); + indexObjectToSolr(otherEntityId, emlWithOtherEntity); int count = 0; - while (sysmeta == null && count < TIMES) { - count ++; - Thread.sleep(SLEEPTIME); - sysmeta = HazelcastClientFactory.getSystemMetadataMap().get(identifier); - } - - // now process the tasks - processor.processIndexTaskQueue(); - count = 0; while (count < TIMES) { try { - assertTrue(compareFieldValue(id, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); + assertTrue(compareFieldValue(otherEntityId, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); break; } catch (Exception e) { count ++; Thread.sleep(SLEEPTIME); } } - assertPresentInSolrIndex(id); - assertTrue(compareFieldValue(id, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); + assertPresentInSolrIndex(otherEntityId); + assertTrue(compareFieldValue(otherEntityId, "title", "Chum salmon escapement on Bonanza River in Norton Sound, Alaska")); String[] projects = {"Chum salmon escapement on Bonanza River in Norton Sound, Alaska"}; - assertTrue(compareFieldValue(id, "project", projects)); + assertTrue(compareFieldValue(otherEntityId, "project", projects)); String[] attributeNames = {"Species","Sp code","Sample Date","GumCard #","Fish #","External Sex","METF Length", "Comments", "ageFresh", "ageSalt", "ageErrorID"}; - assertTrue(compareFieldValue(id, "attributeName", attributeNames)); + assertTrue(compareFieldValue(otherEntityId, "attributeName", attributeNames)); String[] attributeDescriptions = {"Species of salmon sampled","ADF&G species codes","Date that a salmon was collected", "Scale gum card identifier","Fish identifier/number", "Code which represents the sex of a sampled salmon. Sex was determined using external features.", "Mid-eye to fork of tail fish length measurement","comments about sample", "Freshwater age of fish in years","Saltwater age of fish in years","Source of error in age estimate"}; - assertTrue(compareFieldValue(id, "attributeDescription", attributeDescriptions)); + assertTrue(compareFieldValue(otherEntityId, "attributeDescription", attributeDescriptions)); String[] attributeUnits = {"millimeter","dimensionless", "dimensionless"}; - assertTrue(compareFieldValue(id, "attributeUnit", attributeUnits)); + assertTrue(compareFieldValue(otherEntityId, "attributeUnit", attributeUnits)); String[] attributes = {"Species Species of salmon sampled","Sp code ADF&G species codes","Sample Date Date that a salmon was collected", "GumCard # Scale gum card identifier","Fish # Fish identifier/number", "External Sex Code which represents the sex of a sampled salmon. Sex was determined using external features.", "METF Length Mid-eye to fork of tail fish length measurement millimeter","Comments comments about sample", "ageFresh Freshwater age of fish in years dimensionless","ageSalt Saltwater age of fish in years dimensionless", "ageErrorID Source of error in age estimate"}; - assertTrue(compareFieldValue(id, "attribute", attributes)); + assertTrue(compareFieldValue(otherEntityId, "attribute", attributes)); } /** diff --git a/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlTest.java b/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlTest.java index 5e017bb3..d0ad2433 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlTest.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldXPathEmlTest.java @@ -170,6 +170,7 @@ public void setUpEml210() throws Exception { eml210Expected.put("rightsHolder", "dataone_integration_test_user"); eml210Expected.put("replicationAllowed", "true"); eml210Expected.put("numberReplicas", ""); + eml210Expected.put("archived", "false"); eml210Expected.put("preferredReplicationMN", ""); eml210Expected.put("blockedReplicationMN", ""); eml210Expected.put("obsoletes", "peggym.130.3"); @@ -191,6 +192,7 @@ public void setUpEml210() throws Exception { eml210Expected.put("serviceTitle", ""); eml210Expected.put("serviceDescription", ""); eml210Expected.put("serviceEndpoint", ""); + eml210Expected.put("licenseDescription", ""); emlRefExpected .put("abstract", @@ -259,6 +261,7 @@ public void setUpEml210() throws Exception { emlRefExpected.put("serviceTitle", ""); emlRefExpected.put("serviceDescription", ""); emlRefExpected.put("serviceEndpoint", ""); + emlRefExpected.put("licenseDescription", "This material is based upon work funded by the Exxon Valdez Oil Spill Trustee Council. Any opinions, findings, conclusions, or recommendations expressed herein are those of the author(s) and do not necessarily reflect the views or positions of the Trustee Council.Standard scientific norms for attribution and credit should be followed when using this data including to the Owners, Exxon Valdez Oil Spill Trustee Council and other sources of funding. Please let the Owner know when this data is used.This data is licensed under CC0. The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission."); } public void setUpEml220() throws Exception { @@ -324,7 +327,11 @@ public void setUpEml220() throws Exception { eml220Expected.put("fileID", "https://" + hostname + "/cn/v2/resolve/eml-test-doc"); eml220Expected .put("text", - "EML Annotation Example EML Annotator EML Annotator MY PROJECT EML Annotator principalInvestigator SOME_RANDOM_FUNDING_INFO My Funder MY_FUNDER AWARD1 An example award title https://example.org/someaward eml-test-doc SOME_ATTRIBUTE SOME_ATTRIBUTE's definition"); + "EML Annotation Example EML Annotator Creative Commons Attribution 4.0 International https://spdx.org/licenses/CC-BY-4.0.html CC-BY-4.0 EML Annotator MY PROJECT EML Annotator principalInvestigator SOME_RANDOM_FUNDING_INFO My Funder MY_FUNDER AWARD1 An example award title https://example.org/someaward eml-test-doc SOME_ATTRIBUTE SOME_ATTRIBUTE's definition"); + + eml220Expected.put("licenseDescription", ""); + eml220Expected.put("licenseName", "Creative Commons Attribution 4.0 International"); + eml220Expected.put("licenseUrl", "https://spdx.org/licenses/CC-BY-4.0.html"); // system metadata eml220Expected.put("id", "eml-test-doc"); @@ -341,6 +348,7 @@ public void setUpEml220() throws Exception { eml220Expected.put("rightsHolder", "dataone_integration_test_user"); eml220Expected.put("replicationAllowed", "true"); eml220Expected.put("numberReplicas", ""); + eml220Expected.put("archived", "false"); eml220Expected.put("preferredReplicationMN", ""); eml220Expected.put("blockedReplicationMN", ""); eml220Expected.put("obsoletes", ""); @@ -435,6 +443,7 @@ public void setUpEmlService() throws Exception { emlServiceExpected.put("rightsHolder", "dataone_integration_test_user"); emlServiceExpected.put("replicationAllowed", "true"); emlServiceExpected.put("numberReplicas", ""); + emlServiceExpected.put("archived", "false"); emlServiceExpected.put("preferredReplicationMN", ""); emlServiceExpected.put("blockedReplicationMN", ""); emlServiceExpected.put("obsoletes", ""); @@ -451,6 +460,8 @@ public void setUpEmlService() throws Exception { emlServiceExpected.put("changePermission", ""); emlServiceExpected.put("isPublic", "true"); emlServiceExpected.put("dataUrl", "https://" + hostname + "/cn/v2/resolve/" + serviceEmlPid); + emlServiceExpected.put("licenseDescription", ""); + } /** diff --git a/src/test/java/org/dataone/cn/index/SolrFieldXPathFgdcTest.java b/src/test/java/org/dataone/cn/index/SolrFieldXPathFgdcTest.java index 8174e841..4e317dd1 100644 --- a/src/test/java/org/dataone/cn/index/SolrFieldXPathFgdcTest.java +++ b/src/test/java/org/dataone/cn/index/SolrFieldXPathFgdcTest.java @@ -178,6 +178,7 @@ public static void setUp() throws Exception { csiroExpected.put("rightsHolder", "CN=Dave Vieglais T799,O=Google,C=US,DC=cilogon,DC=org"); csiroExpected.put("replicationAllowed", "true"); csiroExpected.put("numberReplicas", "3"); + csiroExpected.put("archived", "false"); csiroExpected.put("preferredReplicationMN", ""); csiroExpected.put("blockedReplicationMN", ""); csiroExpected.put("obsoletes", "csiro_c_abayadultprawns"); @@ -303,6 +304,7 @@ public static void setUp() throws Exception { "CN=Dave Vieglais T799,O=Google,C=US,DC=cilogon,DC=org"); fgdcNasaExpected.put("replicationAllowed", "true"); fgdcNasaExpected.put("numberReplicas", "3"); + fgdcNasaExpected.put("archived", "false"); fgdcNasaExpected.put("preferredReplicationMN", ""); fgdcNasaExpected.put("blockedReplicationMN", ""); fgdcNasaExpected.put("obsoletes", "nasa_d_FEDGPS1292"); @@ -403,6 +405,7 @@ public static void setUp() throws Exception { esriExpected.put("rightsHolder", "uid=nikkis,o=SAEON,dc=ecoinformatics,dc=org"); esriExpected.put("replicationAllowed", "false"); esriExpected.put("numberReplicas", ""); + esriExpected.put("archived", "false"); esriExpected.put("preferredReplicationMN", ""); esriExpected.put("blockedReplicationMN", ""); esriExpected.put("obsoletes", ""); @@ -501,6 +504,7 @@ public static void setUp() throws Exception { ornlMercuryExpected.put("rightsHolder", "CN=mnEDORA,DC=dataone,DC=org"); ornlMercuryExpected.put("replicationAllowed", ""); ornlMercuryExpected.put("numberReplicas", ""); + ornlMercuryExpected.put("archived", "false"); ornlMercuryExpected.put("preferredReplicationMN", ""); ornlMercuryExpected.put("blockedReplicationMN", ""); ornlMercuryExpected.put("obsoletes", ""); diff --git a/src/test/java/org/dataone/cn/index/SolrIndexBatchAddTest.java b/src/test/java/org/dataone/cn/index/SolrIndexBatchAddTest.java deleted file mode 100644 index 3a36abf0..00000000 --- a/src/test/java/org/dataone/cn/index/SolrIndexBatchAddTest.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.dataone.cn.index; - -import java.io.File; -import java.io.IOException; - -import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Logger; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.generator.IndexTaskGenerator; -import org.dataone.cn.index.processor.IndexTaskProcessor; -import org.dataone.cn.indexer.solrhttp.HTTPService; -import org.dataone.service.types.v2.SystemMetadata; -import org.dataone.service.util.TypeMarshaller; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.core.io.Resource; - -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope; - - -@ThreadLeakScope(ThreadLeakScope.Scope.NONE) -public class SolrIndexBatchAddTest extends DataONESolrJettyTestBase { - - private static Logger logger = Logger.getLogger(SolrIndexBatchAddTest.class.getName()); - - private IndexTaskProcessor processor; - private IndexTaskGenerator generator; - - private static final int NUM_FILES = 10; - - private Resource peggym1271Sys; - private Resource peggym1281Sys; - private Resource peggym1304Sys; - private Resource fdgc01111999SysMeta; - private Resource fgdcNasaSysMeta; - private Resource fgdcEsriSysMeta; - private Resource isotc211_noaa_SysMeta; - private Resource ornl_mercury_system_metadata; - private Resource isotc211_tightlyCoupledServiceSrvOnly_SysMeta; - private Resource isotc211_nodc_2_SysMeta; - - @Test - public void testBatchAddRuntime() throws Exception { - - /*long totalIndivTime = 0; - long totalBatchTime = 0; - int iterations = 100; - - for (int x=0; x fieldList = new ArrayList(); - fieldList.add(new SolrElementField("fieldName1", "value1")); - fieldList.add(new SolrElementField("fieldName2", "value2")); - fieldList.add(new SolrElementField("fieldName3", "value3")); - fieldList.add(new SolrElementField("fieldName4", "value4")); - fieldList.add(new SolrElementField("fieldName5", "value5")); - fieldList.add(new SolrElementField("fieldName6", "value6")); - SolrDoc doc = new SolrDoc(fieldList); - SolrElementAdd add = new SolrElementAdd(); - add.getDocList().add(doc); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - BufferedOutputStream bos = new BufferedOutputStream(baos); - add.serialize(bos, "UTF-8"); - bos.flush(); - baos.flush(); - System.out.println("output: " + new String(baos.toByteArray(), "UTF-8")); - } -} diff --git a/src/test/java/org/dataone/cn/indexer/IndexWorkerTest.java b/src/test/java/org/dataone/cn/indexer/IndexWorkerTest.java new file mode 100644 index 00000000..e6d10f85 --- /dev/null +++ b/src/test/java/org/dataone/cn/indexer/IndexWorkerTest.java @@ -0,0 +1,176 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.cn.indexer; + +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.dataone.configuration.Settings; +import org.junit.Test; + +/** + * A junit test class for methods without third party software running + * @author tao + * + */ +public class IndexWorkerTest { + + /** + * Test the initIndexParsers methdo + * @throws Exception + */ + @Test + public void testInitIndexParsers() throws Exception { + boolean initialize = false; + IndexWorker worker = new IndexWorker(initialize); + worker.initIndexParsers(); + assertTrue(worker.solrIndex != null); + } + + /** + * Test the initExecutorServicemethod + * @throws Exception + */ + @Test + public void testInitExecutorService() throws Exception { + //first to try the property of index.thread.number without value (the default setting in the test) + int availableProcessors = Runtime.getRuntime().availableProcessors(); + System.out.println("availableProcessors: " + availableProcessors); + availableProcessors = availableProcessors - 1; + int finalThreads = Math.max(1, availableProcessors); + boolean initialize = false; + IndexWorker worker = new IndexWorker(initialize); + worker.initExecutorService(); + System.out.println("worker.nThreads(default): " + worker.nThreads); + assertTrue(worker.nThreads == finalThreads); + if (finalThreads > 1) { + assertTrue(worker.multipleThread); + } else { + assertTrue(!worker.multipleThread); + } + String propertyName = "index.thread.number"; + String numberStr = "5"; + int number = (new Integer(numberStr)).intValue(); + // only test setting multiple threads if enough processors are available + if (finalThreads > number) { + Settings.getConfiguration().setProperty(propertyName, numberStr); + worker.initExecutorService(); + System.out.println("worker.nThreads(" + numberStr + "): " + worker.nThreads); + assertTrue(worker.nThreads == number); + assertTrue(worker.multipleThread); + } + numberStr = "1"; + number = (new Integer(numberStr)).intValue(); + Settings.getConfiguration().setProperty(propertyName, numberStr); + worker.initExecutorService(); + System.out.println("worker.nThreads(1): " + worker.nThreads); + assertTrue(worker.nThreads == number); + assertTrue(!worker.multipleThread); + Settings.getConfiguration().clearProperty(propertyName); + } + + /** + * Test the loadExternalPropertiesFile method + * @throws Exception + */ + @Test + public void testLoadExternalPropertiesFile() throws Exception { + boolean readFromEnv = false; + IndexWorker.loadExternalPropertiesFile(null); + String propertyFilePath = System.getenv("DATAONE_INDEXER_CONFIG"); + if (propertyFilePath != null && !propertyFilePath.trim().equals("")) { + File defaultFile = new File (propertyFilePath); + if (defaultFile.exists() && defaultFile.canRead()) { + //The one from the env variable + System.out.println("read from the env variable ----- " + propertyFilePath); + assertTrue(IndexWorker.propertyFilePath.equals(propertyFilePath)); + readFromEnv = true; + } + } + + if(!readFromEnv) { + propertyFilePath = "/etc/dataone/dataone-indexer.properties"; + File defaultFile = new File (propertyFilePath); + if (defaultFile.exists() && defaultFile.canRead()) { + //The one from the default the location + System.out.println("read from the default location /etc/dataone/dataone-indexer.properties"); + assertTrue(IndexWorker.propertyFilePath.equals(propertyFilePath)); + } else { + //read from jar file + System.out.println("read from the property file embedded in the jar file " + IndexWorker.propertyFilePath); + assertTrue(IndexWorker.propertyFilePath == null); + } + } + } + + /** + * Test the loadExternalPropertiesFile method + * @throws Exception + */ + @Test + public void testLoadUserSpecifiedExternalPropertiesFile() throws Exception { + String propertyFilePath = "./src/main/resources/org/dataone/configuration/index-processor.properties"; + IndexWorker.loadExternalPropertiesFile(propertyFilePath); + File defaultFile = new File (propertyFilePath); + if (defaultFile.exists() && defaultFile.canRead()) { + //The one from the user specified location + assertTrue(IndexWorker.propertyFilePath.equals(propertyFilePath)); + } else { + //read from jar file + System.out.println("read from the property file embedded in the jar file " + IndexWorker.propertyFilePath); + assertTrue(IndexWorker.propertyFilePath == null); + } + + } + + /** + * Test the loadAdditionalPropertiesFile method + * @throws Exception + */ + @Test + public void testLoadAdditionalPropertiesFile() throws Exception { + String propertyFilePath = "./src/main/resources/org/dataone/configuration/index-processor.properties"; + IndexWorker.loadExternalPropertiesFile(propertyFilePath); + File defaultFile = new File (propertyFilePath); + //The one from the user specified location + assertTrue(IndexWorker.propertyFilePath.equals(propertyFilePath)); + assertTrue(Settings.getConfiguration().getString("dataone.mn.baseURL"). + equals("https://valley.duckdns.org/metacat/d1/mn")); + assertTrue(Settings.getConfiguration(). + getString("index.data.root.directory").equals("/var/metacat/data")); + assertTrue(Settings.getConfiguration(). + getString("index.document.root.directory").equals("/var/metacat/documents")); + assertTrue(Settings.getConfiguration().getString("cn.router.hostname2") == null); + //load another file, it will overwrite the properties which have different values + String propertyFilePath2 = "./src/test/resources/org/dataone/configuration/index-processor-2.properties"; + IndexWorker.loadAdditionalPropertyFile(propertyFilePath2); + assertTrue(IndexWorker.propertyFilePath.equals(propertyFilePath)); + assertTrue(Settings.getConfiguration().getString("dataone.mn.baseURL"). + equals("https://valley.duckdns.org/metacat/d1/mn")); + assertTrue(Settings.getConfiguration(). + getString("index.data.root.directory").equals("/objects")); + assertTrue(Settings.getConfiguration(). + getString("index.document.root.directory").equals("/objects")); + assertTrue(Settings.getConfiguration().getString("cn.router.hostname2").equals("cn.dataone.org")); + } + +} diff --git a/src/test/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessorTest.java b/src/test/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessorTest.java index 1b4556bd..2f19bdd8 100644 --- a/src/test/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessorTest.java +++ b/src/test/java/org/dataone/cn/indexer/annotation/EmlAnnotationSubprocessorTest.java @@ -60,17 +60,26 @@ public void testConceptExpansion() { // Set up expected concepts and assert List expectedConcepts = new ArrayList(); - expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00000512"); + expectedConcepts.add("http://www.w3.org/2002/07/owl#FunctionalProperty"); expectedConcepts.add("http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#MeasurementType"); + expectedConcepts.add("http://purl.dataone.org/odo/ARCRC_00000040"); expectedConcepts.add("http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#hasUnit"); - expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00001102"); - expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00001243"); + expectedConcepts.add("http://www.w3.org/2000/01/rdf-schema#Class"); expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00000629"); + expectedConcepts.add("http://purl.dataone.org/odo/ARCRC_00000048"); expectedConcepts.add("http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#containsMeasurementsOfType"); + expectedConcepts.add("http://www.w3.org/2002/07/owl#Class"); expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00000518"); - expectedConcepts.add("http://www.w3.org/2000/01/rdf-schema#Resource"); expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00000516"); expectedConcepts.add("http://purl.obolibrary.org/obo/UO_0000301"); + expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00000512"); + expectedConcepts.add("http://purl.dataone.org/odo/ARCRC_00000500"); + expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00001102"); + expectedConcepts.add("http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"); + expectedConcepts.add("http://purl.dataone.org/odo/ECSO_00001243"); + expectedConcepts.add("http://www.w3.org/2002/07/owl#ObjectProperty"); + expectedConcepts.add("http://www.w3.org/2002/07/owl#NamedIndividual"); + expectedConcepts.add("http://www.w3.org/2000/01/rdf-schema#Resource"); assertEquals(1, solrDocs.size()); assertEquals(expectedConcepts, expandedConcepts); diff --git a/src/test/java/org/dataone/cn/indexer/annotation/OntologyModelServiceTest.java b/src/test/java/org/dataone/cn/indexer/annotation/OntologyModelServiceTest.java index 61f19064..5922403a 100644 --- a/src/test/java/org/dataone/cn/indexer/annotation/OntologyModelServiceTest.java +++ b/src/test/java/org/dataone/cn/indexer/annotation/OntologyModelServiceTest.java @@ -67,6 +67,8 @@ public void testECSOMeasurementTypeExpansion() { values.add("http://purl.dataone.org/odo/ECSO_00000514"); values.add("http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#MeasurementType"); values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://www.w3.org/2002/07/owl#Class"); assertEquals(values, concepts.get("annotation_value_uri")); } catch (Exception e) { @@ -93,4 +95,266 @@ public void testPropertyExpansion() { fail(e.getMessage()); } } + + @Test + public void testMOSAiCExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("https://purl.dataone.org/odo/MOSAIC_00000865"); + + Set values = new HashSet(); + values.add("https://purl.dataone.org/odo/MOSAIC_00000865"); + values.add("https://purl.dataone.org/odo/MOSAIC_00000036"); + values.add("https://purl.dataone.org/odo/MOSAIC_00012000"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://www.w3.org/2002/07/owl#Class"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testMOSAiCSameAsExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("https://purl.dataone.org/odo/MOSAIC_00000225"); + + Set values = new HashSet(); + values.add("https://purl.dataone.org/odo/MOSAIC_00000022"); // Project + values.add("https://purl.dataone.org/odo/MOSAIC_00000225"); // MOSAiC + values.add("https://purl.dataone.org/odo/MOSAIC_00000226"); // Multidisciplinary drifting Observatory for the Study of Arctic Climate (sameAs) + values.add("https://purl.dataone.org/odo/MOSAIC_00000023"); // MOSAiC20192020 (sameAs) + values.add("http://www.w3.org/2002/07/owl#NamedIndividual"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testARCRCExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("http://purl.dataone.org/odo/ARCRC_00000051"); + + Set values = new HashSet(); + /** + * Add values for ARCRC:SnowDepth and its supertypes: + * + * SnowDepth -> Snow Key Variable Arctic Key Variable -> Arctic Report Card Component + */ + values.add("http://purl.dataone.org/odo/ARCRC_00000051"); // ARCRC:SnowDepth + values.add("http://purl.dataone.org/odo/ARCRC_00000502"); // ARCRC:SnowKeyVariable + values.add("http://purl.dataone.org/odo/ARCRC_00000040"); // ARCRC:KeyVariable + values.add("http://purl.dataone.org/odo/ARCRC_00000500"); // ARCRC:ArcticReportCardComponent + + + /** + * Add values for ARCRC:SnowDepth's equivalentClass of ECSO:SnowDepth and its supertypes: + * + * SnowDepth -> Water Depth -> Depth -> linearMeasurementType -> Measurement Type + */ + values.add("http://purl.dataone.org/odo/ECSO_00001205"); // ECSO:SnowDepth + values.add("http://purl.dataone.org/odo/ECSO_00000553"); // ECSO:linearMeasurementType + values.add("http://purl.dataone.org/odo/ECSO_00001203"); // ECSO:WaterDepth + values.add("http://purl.dataone.org/odo/ECSO_00001250"); // ECSO:Depth + values.add("http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#MeasurementType"); + + // Values for high level stuff + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("http://www.w3.org/2002/07/owl#NamedIndividual"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testNamedIndividualExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("http://purl.dataone.org/odo/ARCRC_00000507"); + + Set values = new HashSet(); + values.add("http://purl.dataone.org/odo/ARCRC_00000507"); // ARCRC:Greenland itself + values.add("http://www.w3.org/2002/07/owl#NamedIndividual"); // the type of ARCRC:Greenland + values.add("http://purl.dataone.org/odo/ARCRC_00000505"); // ARCRC:GeographicNamedPlace (type of ARCRC:Greenland) + values.add("http://purl.dataone.org/odo/ARCRC_00000506"); // ARCRC:Place (supertype of GeographicNamedPlace) + values.add("http://purl.dataone.org/odo/ARCRC_00000500"); // ARCRC:ArcticReportCardComponent + values.add("http://purl.obolibrary.org/obo/GAZ_00001507"); // sameAs + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testEquivalentPropertyExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("https://purl.dataone.org/odo/MOSAIC_00002250"); + + Set values = new HashSet(); + values.add("http://www.w3.org/ns/ssn/deployedSystem"); + values.add("https://purl.dataone.org/odo/MOSAIC_00002250"); + + assertEquals(values, concepts.get("annotation_property_uri")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testADCADExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("https://purl.dataone.org/odo/ADCAD_00034"); + + + // Assert on Solr fields returend + Set fields = new HashSet(); + fields.add("annotation_property_uri"); + fields.add("annotation_value_uri"); + assertEquals(concepts.keySet(), fields); + + // Assert on Solr field values returned + Set values = new HashSet(); + values.add("https://purl.dataone.org/odo/ADCAD_00034"); + values.add("https://purl.dataone.org/odo/ADCAD_00067"); + values.add("https://purl.dataone.org/odo/ADCAD_00033"); + values.add("https://purl.dataone.org/odo/ADCAD_00000"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://localhost/plosthes.2017-1#2863"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("https://www.wikidata.org/wiki/Q2329"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testSALMONExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("https://purl.dataone.org/odo/MOSAIC_00000041"); + + + // Assert on Solr fields returend + Set fields = new HashSet(); + fields.add("annotation_property_uri"); + fields.add("annotation_value_uri"); + assertEquals(concepts.keySet(), fields); + + // Assert on Solr field values returned + Set values = new HashSet(); + values.add("https://purl.dataone.org/odo/MOSAIC_00000041"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("https://purl.dataone.org/odo/MOSAIC_00012000"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testSALMONAlignmentExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("http://purl.dataone.org/odo/salmon_000529"); + + // Assert on Solr fields returend + Set fields = new HashSet(); + fields.add("annotation_property_uri"); + fields.add("annotation_value_uri"); + assertEquals(concepts.keySet(), fields); + + // Assert on Solr field values returned + Set values = new HashSet(); + values.add("http://purl.dataone.org/odo/SALMON_00000672"); + values.add("http://purl.dataone.org/odo/SALMON_00000572"); + values.add("http://purl.dataone.org/odo/SALMON_00000528"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("http://purl.dataone.org/odo/salmon_000529"); + values.add("http://purl.dataone.org/odo/SALMON_00000529"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testSASAPExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("http://purl.dataone.org/odo/SASAP_00000393"); + + + // Assert on Solr fields returend + Set fields = new HashSet(); + fields.add("annotation_property_uri"); + fields.add("annotation_value_uri"); + assertEquals(concepts.keySet(), fields); + + // Assert on Solr field values returned + Set values = new HashSet(); + values.add("http://purl.dataone.org/odo/SASAP_00000098"); + values.add("http://purl.dataone.org/odo/SASAP_00000174"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://purl.dataone.org/odo/SASAP_00000393"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testSENSOExpansion() { + try { + Map> concepts = OntologyModelService.getInstance().expandConcepts("http://purl.dataone.org/odo/SENSO_00000002"); + + + // Assert on Solr fields returend + Set fields = new HashSet(); + fields.add("annotation_property_uri"); + fields.add("annotation_value_uri"); + assertEquals(concepts.keySet(), fields); + + // Assert on Solr field values returned + Set values = new HashSet(); + values.add("http://purl.dataone.org/odo/SENSO_00000002"); + values.add("http://www.w3.org/2000/01/rdf-schema#Class"); + values.add("http://purl.dataone.org/odo/SENSO_00000001"); + values.add("http://www.w3.org/2002/07/owl#Class"); + values.add("http://www.w3.org/2000/01/rdf-schema#Resource"); + + assertEquals(values, concepts.get("annotation_value_uri")); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } } diff --git a/src/test/java/org/dataone/cn/indexer/annotation/SolrFieldEmlAnnotationTest.java b/src/test/java/org/dataone/cn/indexer/annotation/SolrFieldEmlAnnotationTest.java index b6afb4d8..74552c61 100644 --- a/src/test/java/org/dataone/cn/indexer/annotation/SolrFieldEmlAnnotationTest.java +++ b/src/test/java/org/dataone/cn/indexer/annotation/SolrFieldEmlAnnotationTest.java @@ -65,18 +65,26 @@ public class SolrFieldEmlAnnotationTest extends BaseSolrFieldXPathTest { public void setUp() throws Exception { // annotations should include the superclass[es] annotationExpected.put("sem_annotation", - "http://purl.dataone.org/odo/ECSO_00000512" + "||" + + "http://www.w3.org/2002/07/owl#FunctionalProperty" + "||" + "http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#MeasurementType" + "||" + - "http://purl.dataone.org/odo/ECSO_00001102" + "||" + - "http://purl.dataone.org/odo/ECSO_00001243" + "||" + + "http://purl.dataone.org/odo/ARCRC_00000040" + "||" + + "http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#hasUnit" + "||" + + "http://www.w3.org/2000/01/rdf-schema#Class" + "||" + "http://purl.dataone.org/odo/ECSO_00000629" + "||" + + "http://purl.dataone.org/odo/ARCRC_00000048" + "||" + + "http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#containsMeasurementsOfType" + "||" + + "http://www.w3.org/2002/07/owl#Class" + "||" + "http://purl.dataone.org/odo/ECSO_00000518" + "||" + - "http://www.w3.org/2000/01/rdf-schema#Resource" + "||" + "http://purl.dataone.org/odo/ECSO_00000516" + "||" + "http://purl.obolibrary.org/obo/UO_0000301" + "||" + - "http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#hasUnit" + "||" + - "http://purl.dataone.org/odo/ECSO_00000629" + "||" + - "http://ecoinformatics.org/oboe/oboe.1.2/oboe-core.owl#containsMeasurementsOfType"); + "http://purl.dataone.org/odo/ECSO_00000512" + "||" + + "http://purl.dataone.org/odo/ARCRC_00000500" + "||" + + "http://purl.dataone.org/odo/ECSO_00001102" + "||" + + "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" + "||" + + "http://purl.dataone.org/odo/ECSO_00001243" + "||" + + "http://www.w3.org/2002/07/owl#ObjectProperty" + "||" + + "http://www.w3.org/2002/07/owl#NamedIndividual" + "||" + + "http://www.w3.org/2000/01/rdf-schema#Resource"); } protected boolean compareFields(HashMap expected, InputStream document, diff --git a/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexAnnotatorTest.java b/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexAnnotatorTest.java index 991b8090..6fcc94ed 100644 --- a/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexAnnotatorTest.java +++ b/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexAnnotatorTest.java @@ -56,10 +56,11 @@ public void testSystemMetadataEml210AndAnnotation() throws Exception { // document String pid = "peggym.130.4"; Resource systemMetadataResource = (Resource) context.getBean("peggym1304Sys"); + Resource scienceMetadataResource = (Resource) context.getBean("peggym1304Sci"); // add peggym.130.4 to solr index, using XPathDocumentParser (used by // index-task-processor) - addEmlToSolrIndex(systemMetadataResource); + indexObjectToSolr(pid, scienceMetadataResource); // retrieve solrDocument for peggym130.4 from solr server by pid SolrDocument result = assertPresentInSolrIndex(pid); @@ -69,7 +70,7 @@ public void testSystemMetadataEml210AndAnnotation() throws Exception { ScienceMetadataDocumentSubprocessor eml210 = (ScienceMetadataDocumentSubprocessor) context .getBean("eml210Subprocessor"); - Resource scienceMetadataResource = (Resource) context.getBean("peggym1304Sci"); + Document scienceMetadataDoc = XmlDocumentUtility .generateXmlDocument(scienceMetadataResource.getInputStream()); for (ISolrField field : eml210.getFieldList()) { @@ -90,7 +91,7 @@ public void testSystemMetadataEml210AndAnnotation() throws Exception { //byte[] annotationBytes = IOUtils.toByteArray(annotationResource.getInputStream()); //add the annotation - addSysAndSciMetaToSolrIndex(annotationSysMeta, annotationResource); + indexObjectToSolr("annotation.130.4", annotationResource); result = assertPresentInSolrIndex(pid); for (String field : result.getFieldNames()) { @@ -123,6 +124,7 @@ public void setUp() throws Exception { super.setUp(); systemMetadata200Subprocessor = (BaseXPathDocumentSubprocessor) context .getBean("systemMetadata200Subprocessor"); + sendSolrDeleteAll(); } @After diff --git a/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexEmlAnnotationTest.java b/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexEmlAnnotationTest.java index fbd2ee91..00838016 100644 --- a/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexEmlAnnotationTest.java +++ b/src/test/java/org/dataone/cn/indexer/annotation/SolrIndexEmlAnnotationTest.java @@ -48,7 +48,7 @@ public void testSystemMetadataEml220AndAnnotation() throws Exception { Resource systemMetadataResource = (Resource) context.getBean("eml220TestDocSysMeta"); Resource scienceMetadataResource = (Resource) context.getBean("eml220TestDocSciMeta"); - addSysAndSciMetaToSolrIndex(systemMetadataResource, scienceMetadataResource); + indexObjectToSolr(pid, scienceMetadataResource); SolrDocument result = assertPresentInSolrIndex(pid); // Compare EML 2.2.0 fields @@ -92,6 +92,7 @@ public void setUp() throws Exception { super.setUp(); systemMetadata200Subprocessor = (BaseXPathDocumentSubprocessor) context .getBean("systemMetadata200Subprocessor"); + sendSolrDeleteAll(); } @After diff --git a/src/test/java/org/dataone/cn/indexer/object/MockMNode.java b/src/test/java/org/dataone/cn/indexer/object/MockMNode.java new file mode 100644 index 00000000..ec216ec0 --- /dev/null +++ b/src/test/java/org/dataone/cn/indexer/object/MockMNode.java @@ -0,0 +1,157 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.cn.indexer.object; + +import java.io.IOException; + +import org.dataone.client.exception.ClientSideException; +import org.dataone.client.v2.impl.MultipartMNode; +import org.dataone.service.exceptions.InvalidToken; +import org.dataone.service.exceptions.NotAuthorized; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.exceptions.NotImplemented; +import org.dataone.service.exceptions.ServiceFailure; +import org.dataone.service.types.v1.Identifier; +import org.dataone.service.types.v1.NodeType; +import org.dataone.service.types.v1.Session; +import org.dataone.service.types.v2.SystemMetadata; +import org.dataone.service.util.TypeMarshaller; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.core.io.Resource; + +/** + * MockMNode mimics a DataONE Member Node, and should be used only for testing + * when there is a dependency on MN services + */ +public class MockMNode extends MultipartMNode { + public static final String NODE_ID = "urn:node:MNMetacat_Test"; + private ApplicationContext context = null; + private ApplicationContext provenanceContext = null; + private Resource peggym1271Sys = null; + private Resource peggym1281Sys = null; + private Resource peggym1291Sys = null; + private Resource peggym1304Sys = null; + private Resource provAlaWaiNS02MatlabProcessingDataProcessor1mSys = null; + private Resource provAlaWaiNS02MatlabProcessingConfigure1mSys = null; + private Resource provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mSys = null; + private Resource provAlaWaiNS02MatlabProcessingEML1xmlSys = null; + + /* + * Constructor + */ + public MockMNode(String nodeBaseServiceUrl) throws IOException, ClientSideException { + super(nodeBaseServiceUrl); + this.nodeType = NodeType.MN; + provenanceContext = new ClassPathXmlApplicationContext("org/dataone/cn/indexer/resourcemap/test-context-provenance.xml"); + + } + + /** + * Get the system metadata from a resource with the specified pid. + * It is a hard-coded mapping between pids for system metadata files. + */ + @Override + public SystemMetadata getSystemMetadata(Session session, Identifier id) + throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, NotImplemented { + System.out.println("In the get System metadata method in the MockMNode for " + id.getValue()); + SystemMetadata sysmeta = null; + initialize(); + Resource resource = null; + if (id == null || id.getValue().trim().equals("")) { + throw new InvalidToken("0000", "In the getSystemMetadata method, the id can't be null or blank"); + } + String identifier = id.getValue(); + switch (identifier) { + case "peggym.127.1" : + resource = peggym1271Sys; + break; + case "peggym.128.1" : + resource = peggym1281Sys; + break; + case "peggym.129.1" : + resource = peggym1291Sys; + break; + case "peggym.130.4" : + resource = peggym1304Sys; + break; + case "ala-wai-canal-ns02-matlab-processing-DataProcessor.1.m" : + resource = provAlaWaiNS02MatlabProcessingDataProcessor1mSys; + break; + case "ala-wai-canal-ns02-matlab-processing.eml.1.xml" : + resource = provAlaWaiNS02MatlabProcessingEML1xmlSys; + break; + case "ala-wai-canal-ns02-matlab-processing-Configure.1.m" : + resource = provAlaWaiNS02MatlabProcessingConfigure1mSys; + break; + case "ala-wai-canal-ns02-matlab-processing-schedule_AW02XX_001CTDXXXXR00_processing.1.m" : + resource = provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mSys; + break; + default : + throw new NotFound("0000", "MockMNode couldn't find the system metadata for identifier " + identifier); + } + try { + sysmeta = TypeMarshaller.unmarshalTypeFromStream(SystemMetadata.class, resource.getInputStream()); + } catch (Exception e) { + throw new ServiceFailure("0000", e.getMessage()); + } + System.out.println("In the get System metadata method in the MockMNode for " + id.getValue() + " after successfully getting it."); + return sysmeta; + } + + /** + * Initialize the resource (only once) + * @throws ServiceFailure + */ + private void initialize() throws ServiceFailure{ + if (peggym1271Sys == null) { + synchronized (MockMNode.class){ + if (context == null) { + throw new ServiceFailure("0000", "The context should be set before calling the getSystemMetadata method."); + } + peggym1271Sys = (Resource) context.getBean("peggym1271Sys"); + peggym1281Sys = (Resource) context.getBean("peggym1281Sys"); + peggym1291Sys = (Resource) context.getBean("peggym1291Sys"); + peggym1304Sys = (Resource) context.getBean("peggym1304Sys"); + provAlaWaiNS02MatlabProcessingDataProcessor1mSys = (Resource) provenanceContext + .getBean("provAlaWaiNS02MatlabProcessingDataProcessor1mSys"); + + provAlaWaiNS02MatlabProcessingConfigure1mSys = (Resource) provenanceContext + .getBean("provAlaWaiNS02MatlabProcessingConfigure1mSys"); + + provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mSys = (Resource) provenanceContext + .getBean("provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mSys"); + + provAlaWaiNS02MatlabProcessingEML1xmlSys = (Resource) provenanceContext + .getBean("provAlaWaiNS02MatlabProcessingEML1xmlSys"); + System.out.println("finished to intialize the resources in the MockMNode"); + } + } + } + + /** + * Set the context first + * @param context + */ + public void setContext(ApplicationContext context) { + this.context = context; + } +} diff --git a/src/test/java/org/dataone/cn/indexer/object/ObjectManagerTest.java b/src/test/java/org/dataone/cn/indexer/object/ObjectManagerTest.java new file mode 100644 index 00000000..b50c6e5c --- /dev/null +++ b/src/test/java/org/dataone/cn/indexer/object/ObjectManagerTest.java @@ -0,0 +1,108 @@ +/** + * This work was created by participants in the DataONE project, and is + * jointly copyrighted by participating institutions in DataONE. For + * more information on DataONE, see our web site at http://dataone.org. + * + * Copyright 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.dataone.cn.indexer.object; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.nio.file.Paths; + +import org.dataone.cn.index.DataONESolrJettyTestBase; +import org.dataone.service.exceptions.NotFound; +import org.dataone.service.types.v2.SystemMetadata; +import org.junit.Test; + +/** + * A junit test class for the ObjecManager class. + * @author tao + * + */ +public class ObjectManagerTest { + + /** + * Test the getFilePath method + * @throws Exception + */ + @Test + public void testgetFilePath() throws Exception { + ObjectManager manager = ObjectManager.getInstance(); + String path = null; + String format = "eml://ecoinformatics.org/eml-2.0.1"; + String resultPath = manager.getFilePath(path, format); + assertTrue(resultPath == null); + format = "image/bmp"; + resultPath = manager.getFilePath(path, format); + assertTrue(resultPath == null); + + path = ""; + format = "eml://ecoinformatics.org/eml-2.0.1"; + resultPath = manager.getFilePath(path, format); + assertTrue(resultPath == null); + format = "image/bmp"; + resultPath = manager.getFilePath(path, format); + assertTrue(resultPath == null); + + path = "/var/metacat/documents/foo.1.1"; + format = "eml://ecoinformatics.org/eml-2.0.1"; + resultPath = manager.getFilePath(path, format); + assertTrue(resultPath.equals("//var/metacat/documents/foo.1.1")); + + path = "/var/metacat/documents/foo.2.1"; + format = "image/bmp";; + resultPath = manager.getFilePath(path, format); + assertTrue(resultPath.equals("//var/metacat/documents/foo.2.1")); + } + + /** + * Test the getSystemMetadata method + * @throws Exception + */ + @Test + public void testGetSystemMetadata() throws Exception { + //Test to get system metadata from a file + String currentDir = Paths.get(".").toAbsolutePath().normalize().toString(); + System.out.println("current dir " + currentDir); + String path = currentDir + "/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/hakai-deep-schema.jsonld"; + String id = "hakai-deep-schema.jsonld"; + SystemMetadata sysmeta = ObjectManager.getInstance().getSystemMetadata(id, path); + assertTrue(sysmeta.getIdentifier().getValue().equals(id)); + + //Test to get system metadata from the Mock dataone cn server. + id = "ala-wai-canal-ns02-matlab-processing.eml.1.xml"; + path = null; + MockMNode mockMNode = new MockMNode("http://mnode.foo"); + mockMNode.setContext(DataONESolrJettyTestBase.getContext()); + ObjectManager.setD1Node(mockMNode); + sysmeta = ObjectManager.getInstance().getSystemMetadata(id, path); + assertTrue(sysmeta.getIdentifier().getValue().equals(id)); + + //Test the system metadata not found + id = "foo.1.1"; + path = "foo1"; + try { + sysmeta = ObjectManager.getInstance().getSystemMetadata(id, path); + fail("We should reach here"); + } catch (NotFound e) { + assert(true); + } + } + +} diff --git a/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessor.java b/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessor.java deleted file mode 100644 index d0a722be..00000000 --- a/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessor.java +++ /dev/null @@ -1,941 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.indexer.processor; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Queue; -import java.util.Vector; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentSkipListSet; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.commons.collections4.queue.CircularFifoQueue; -import org.apache.log4j.Logger; -import org.dataone.client.v2.formats.ObjectFormatCache; -import org.dataone.cn.hazelcast.HazelcastClientFactory; -import org.dataone.cn.index.processor.IndexTaskProcessingStrategy; -import org.dataone.cn.index.task.IndexTask; -import org.dataone.cn.index.task.IndexTaskRepository; -import org.dataone.cn.index.task.ResourceMapIndexTask; -import org.dataone.cn.index.util.PerformanceLogger; -import org.dataone.cn.indexer.XmlDocumentUtility; -import org.dataone.cn.indexer.parser.utility.SeriesIdResolver; -import org.dataone.cn.indexer.resourcemap.ForesiteResourceMap; -import org.dataone.cn.indexer.resourcemap.ResourceMap; -import org.dataone.cn.indexer.resourcemap.ResourceMapFactory; -import org.dataone.cn.indexer.solrhttp.HTTPService; -import org.dataone.cn.indexer.solrhttp.SolrDoc; -import org.dataone.configuration.Settings; -import org.dataone.service.exceptions.BaseException; -import org.dataone.service.types.v1.Identifier; -import org.dataone.service.types.v1.ObjectFormatIdentifier; -import org.dataone.service.types.v1.TypeFactory; -import org.dataone.service.types.v2.ObjectFormat; -import org.dataone.service.types.v2.SystemMetadata; -import org.dspace.foresite.OREParserException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException; -import org.w3c.dom.Document; - -/** - * MockIndexTaskProcessor is the controller class for processing IndexTasks. These - * tasks are generated by the IndexTaskGenerator class and associated - * collaborators. MockIndexTaskProcessor uses the IndexTaskRepository to locate - * IndexTasks for processing and delegates to IndexTaskProcessingStrategy - * implementations for actual processing behavior. - * - * @author sroseboo - * - */ -public class MockIndexTaskProcessor { - - private static Logger logger = Logger.getLogger(MockIndexTaskProcessor.class.getName()); - private static final String FORMAT_TYPE_DATA = "DATA"; - private static final String LOAD_LOGGER_NAME = "indexProcessorLoad"; - private static int BATCH_UPDATE_SIZE = Settings.getConfiguration().getInt("dataone.indexing.batchUpdateSize", 1000); - private static int NUMOFPROCESSOR = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.processThreadPoolSize", 10); - private static int MAXATTEMPTS = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.resourceMapWait.maxAttempt", 10); - private static int FUTUREQUEUESIZE = Settings.getConfiguration().getInt("dataone.indexing.multiThreads.futureQueueSize", 100); - private static ExecutorService executor = Executors.newFixedThreadPool(NUMOFPROCESSOR); - private static final ReentrantLock lock = new ReentrantLock(); - private static CircularFifoQueue futureQueue = new CircularFifoQueue(FUTUREQUEUESIZE); - //a concurrent map to main the information about current processing resource map objects and their referenced ids - //the key is a referenced id and value is the id of resource map. - private static ConcurrentHashMap referencedIdsMap = new ConcurrentHashMap(); - private static ConcurrentSkipListSet seriesIdsSet = new ConcurrentSkipListSet(); - - @Autowired - private IndexTaskRepository repo; - - @Autowired - private IndexTaskProcessingStrategy deleteProcessor; - - @Autowired - private IndexTaskProcessingStrategy updateProcessor; - - @Autowired - private HTTPService httpService; - - @Autowired - private String solrQueryUri; - - private PerformanceLogger perfLog = PerformanceLogger.getInstance(); - - public MockIndexTaskProcessor() { - } - - /** - * Processes the index task queue written by the IndexTaskGenerator, - * but unlike {@link #processIndexTaskQueue()}, all IndexTasks that - * add solr documents will be grouped into batches and done in one - * command to solr. - */ - /*public void batchProcessIndexTaskQueue() { - logProcessorLoad(); - - List queue = getIndexTaskQueue(); - List batchProcessList = new ArrayList(BATCH_UPDATE_SIZE); - - logger.info("batchProcessIndexTaskQueue, queue size: " + queue.size() + " tasks"); - - IndexTask nextTask = getNextIndexTask(queue); - while (nextTask != null) { - batchProcessList.add(nextTask); - logger.info("added task: " + nextTask.getPid()); - nextTask = getNextIndexTask(queue); - if (nextTask != null) - logger.info("next task: " + nextTask.getPid()); - logger.info("queue size: " + queue.size()); - - if (batchProcessList.size() >= BATCH_UPDATE_SIZE) { - batchProcessTasksOnThread(batchProcessList); - batchProcessList = new ArrayList(BATCH_UPDATE_SIZE); - } - } - batchProcessTasksOnThread(batchProcessList); - - List retryQueue = getIndexTaskRetryQueue(); - List batchProcessRetryList = new ArrayList(BATCH_UPDATE_SIZE); - - logger.info("batchProcessIndexTaskQueue, retry queue size: " + queue.size() + " tasks"); - - nextTask = getNextIndexTask(retryQueue); - while (nextTask != null) { - batchProcessRetryList.add(nextTask); - nextTask = getNextIndexTask(retryQueue); - - if (batchProcessRetryList.size() >= BATCH_UPDATE_SIZE) { - batchProcessTasksOnThread(batchProcessRetryList); - batchProcessRetryList = new ArrayList(BATCH_UPDATE_SIZE); - } - } - batchProcessTasksOnThread(batchProcessRetryList); - }*/ - - /** - * Start a round of IndexTask processing. The IndexTask data store is - * abstracted as a queue of tasks to process ordered by priority and - * modification date. Typically invoked periodically by a quartz scheduled - * job. - */ - public void processIndexTaskQueue() { - logProcessorLoad(); - - List queue = getIndexTaskQueue(); - IndexTask task = getNextIndexTask(queue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(queue); - } - - processFailedIndexTaskQueue(); - /*List retryQueue = getIndexTaskRetryQueue(); - task = getNextIndexTask(retryQueue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(retryQueue); - }*/ - - } - - public void mockProcessIndexTaskQueue() { - - System.out.println(" entering mockProcessIndexTaskQueue..."); - - try { - Thread.sleep(20000); - - - - - - - - - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - System.out.println(" ... exiting mockProcessIndexTaskQueue."); - - } - - /** - * Index the given index queue - * @param queue - */ - public void processIndexTaskQueue(List queue) { - IndexTask task = null; - if(queue != null) { - int size = queue.size(); - task = getNextIndexTask(queue); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(queue); - } - logger.info("MockIndexTaskProcessor.processIndexTaskQueue - finish submitting the index task queue with the size "+size+ " and current queue size is down to "+queue.size()); - } - - } - - /** - * Index the index task which currently has the failed status on the index task repository - */ - public void processFailedIndexTaskQueue() { - List retryQueue = getIndexTaskRetryQueue(); - if(retryQueue != null) { - IndexTask task = getNextIndexTask(retryQueue); - logger.info("MockIndexTaskProcessor.processFailedIndexTaskQueue with size "+retryQueue.size()); - while (task != null) { - processTaskOnThread(task); - task = getNextIndexTask(retryQueue); - } - } - } - - /** - * Logs the number of {@link IndexTask}s that need to be processed - * and the number of tasks that have failed. - */ - private void logProcessorLoad() { - - Logger loadLogger = Logger.getLogger(LOAD_LOGGER_NAME); - - Long newTasks = null; - Long failedTasks = null; - try { - newTasks = repo.countByStatus(IndexTask.STATUS_NEW); - failedTasks = repo.countByStatus(IndexTask.STATUS_FAILED); - } catch (Exception e) { - logger.error("Unable to count NEW or FAILED tasks in task index repository.", e); - } - - loadLogger.info("new tasks:" + newTasks + ", tasks previously failed: " + failedTasks ); - } - - - - /* - * Use multiple threads to process the index task - */ - private void processTaskOnThread(final IndexTask task) { - logger.info("using multiple threads to process index and the size of the thread pool is "+NUMOFPROCESSOR); - Runnable newThreadTask = new Runnable() { - public void run() { - processTask(task); - } - }; - Future future = executor.submit(newThreadTask); - futureQueue.add(future); - } - - private void processTask(IndexTask task) { - long start = System.currentTimeMillis(); - try { - checkReadinessProcessResourceMap(task); - if (task.isDeleteTask()) { - logger.info("+++++++++++++start to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - //System.out.println("+++++++++++++start to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - deleteProcessor.process(task); - //System.out.println("+++++++++++++end to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - logger.info("+++++++++++++end to process delete index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - } else { - logger.info("*********************start to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - //System.out.println("*********************start to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - updateProcessor.process(task); - //System.out.println("*********************end to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - logger.info("*********************end to process update index task for "+task.getPid()+" in thread "+Thread.currentThread().getId()); - } - } catch (Exception e) { - logger.error("Unable to process task for pid: " + task.getPid(), e); - if(task != null) { - repo.delete(task.getId()); - } - handleFailedTask(task); - return; - } finally { - removeIdsFromResourceMapReferencedSetAndSeriesIdsSet(task); - } - if(task != null) { - repo.delete(task.getId()); - } - /*if(task != null && task instanceof ResourceMapIndexTask) { - repo.delete(task.getId());//the ReousrceMapIndexTask is not the original object. repo.delete(IndexTask) wouldn't work. - } else { - repo.delete(task); - }*/ - - logger.info("Indexing complete for pid: " + task.getPid()); - perfLog.log("MockIndexTaskProcessor.processTasks process pid "+task.getPid(), System.currentTimeMillis()-start); - } - - /* - * When a resource map object is indexed, it will change the solr index of its referenced ids. - * It can be a race condition. https://redmine.dataone.org/issues/7771 - * So we maintain a set containing the referenced ids which the resource map objects are currently being processed. - * Before we start to process a new resource map object on a thread, we need to check the set. - */ - private void checkReadinessProcessResourceMap(IndexTask task) throws Exception{ - //only handle resourceMap index task - if(task != null && task instanceof ResourceMapIndexTask ) { - logger.debug("$$$$$$$$$$$$$$$$$ the index task "+task.getPid()+" is a resource map task in the the thread "+ Thread.currentThread().getId()); - lock.lock(); - try { - ResourceMapIndexTask resourceMapTask = (ResourceMapIndexTask) task; - List referencedIds = resourceMapTask.getReferencedIds(); - if(referencedIds != null) { - for (String id : referencedIds) { - if(SeriesIdResolver.isSeriesId(TypeFactory.buildIdentifier(id))) { - boolean isClear = false; - for(int i=0; i referencedIds = resourceMapTask.getReferencedIds(); - if(referencedIds != null) { - for (String id : referencedIds) { - if(id != null) { - referencedIdsMap.remove(id); - seriesIdsSet.remove(id); - } - } - } - } else { - Identifier id = new Identifier(); - id.setValue(task.getPid()); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(id); - logger.debug("remove the series id (if it has) for +++++ "+task.getPid()); - if(smd != null && smd.getSeriesId()!= null && smd.getSeriesId().getValue()!= null) { - logger.debug("remove the series id "+smd.getSeriesId().getValue()+" for +++++ "+task.getPid()); - seriesIdsSet.remove(smd.getSeriesId().getValue()); - } - } - } - - /* - * Use multiple threads to process the index task - */ - /*private void batchProcessTasksOnThread(final List taskList) { - logger.info("using multiple threads to process BATCHED index tasks and the size of the pool is "+NUMOFPROCESSOR); - Runnable newThreadTask = new Runnable() { - public void run() { - batchProcessTasks(taskList); - } - }; - Future future = executor.submit(newThreadTask); - futureQueue.add(future); - }*/ - - /*private void batchProcessTasks(List taskList) { - if(taskList == null) { - return; - } - long startBatch = System.currentTimeMillis(); - int size = taskList.size(); - logger.info("batch processing: " + size + " tasks"); - - List updateTasks = new ArrayList<>(); - List deleteTasks = new ArrayList<>(); - - for (IndexTask task : taskList) { - if (task.isDeleteTask()) { - logger.info("Adding delete task to be processed for pid: " + task.getPid()); - deleteTasks.add(task); - } else { - logger.info("Adding update task to be processed for pid: " + task.getPid()); - updateTasks.add(task); - } - } - - logger.info("update tasks: " + updateTasks.size()); - logger.info("delete tasks: " + deleteTasks.size()); - try { - batchCheckReadinessProcessResourceMap(taskList); - try { - deleteProcessor.process(deleteTasks); - - for (IndexTask task : deleteTasks) { - repo.delete(task); - logger.info("Indexing complete for pid: " + task.getPid()); - } - - } catch (Exception e) { - StringBuilder failedPids = new StringBuilder(); - for (IndexTask task : deleteTasks) - failedPids.append(task.getPid()).append(", "); - logger.error("Unable to process tasks for pids: " + failedPids.toString(), e); - handleFailedTasks(deleteTasks); - } - - try { - updateProcessor.process(updateTasks); - - for (IndexTask task : updateTasks) { - repo.delete(task); - logger.info("Indexing complete for pid: " + task.getPid()); - } - - } catch (Exception e) { - StringBuilder failedPids = new StringBuilder(); - for (IndexTask task : updateTasks) - failedPids.append(task.getPid()).append(", "); - logger.error("Unable to process tasks for pids: " + failedPids.toString(), e); - handleFailedTasks(deleteTasks); - } - } catch(Exception e) { - logger.error("Couldn't batch indexing the tasks since "+e.getMessage()); - } finally { - batchRemoveIdsFromResourceMapReferencedSet(taskList); - } - - perfLog.log("MockIndexTaskProcessor.batchProcessTasks process "+size+" objects in ", System.currentTimeMillis()-startBatch); - }*/ - - private void batchCheckReadinessProcessResourceMap(List tasks) throws Exception{ - lock.lock(); - try { - if(tasks != null) { - for (IndexTask task : tasks) { - checkReadinessProcessResourceMap(task); - } - } - - } finally { - lock.unlock(); - } - } - - private void batchRemoveIdsFromResourceMapReferencedSet(List tasks) { - if(tasks != null) { - for (IndexTask task : tasks) { - removeIdsFromResourceMapReferencedSetAndSeriesIdsSet(task); - } - } - } - - private void handleFailedTasks(List tasks) { - for (IndexTask task : tasks) { - task.markFailed(); - saveTaskWithoutDuplication(task); - } - } - - private void handleFailedTask(IndexTask task) { - if(task != null) { - task.markFailed(); - saveTaskWithoutDuplication(task); - } - - } - - /** - * returns the next ready task from the given queue. Readiness is determined - * by availability of the object (unless it's a data object), and the prior - * indexing of all Dataone objects referenced by resource maps. - * - * @param queue - * @return the next ready task - */ - private IndexTask getNextIndexTask(List queue) { - IndexTask task = null; - while (task == null && queue.isEmpty() == false) { - task = queue.remove(0); - - if (task == null) continue; - - task.markInProgress(); - task = saveTask(task); - - if (task == null) continue; // saveTask can return null - - logger.info("Start of indexing pid: " + task.getPid()); - - if (task.isDeleteTask()) { - return task; - } - - if (!isObjectPathReady(task)) { - task.markNew(); - saveTaskWithoutDuplication(task); - logger.info("Task for pid: " + task.getPid() + " not processed since the object path is not ready."); - task = null; - continue; - } - - if (representsResourceMap(task)) { - boolean ready = true; - ResourceMap rm = null; - List referencedIds = null; - try { - rm = ResourceMapFactory.buildResourceMap(task.getObjectPath()); - referencedIds = rm.getAllDocumentIDs(); - - boolean found = referencedIds.remove(task.getPid()); - // list.remove removes only the first occurrence found, so keep going until non left. - while(found) { - found = referencedIds.remove(task.getPid()); - } - - if (areAllReferencedDocsIndexed(referencedIds) == false) { - logger.info("****************Not all map resource references indexed for map: " + task.getPid() - + ". Marking new and continuing..."); - ready = false; - } - } catch (OREParserException oreException) { - ready = false; - logger.error("Unable to parse ORE doc: " + task.getPid() - + ". Unrecoverable parse error: task will not be re-tried."); - if (logger.isTraceEnabled()) { - oreException.printStackTrace(); - - } - } catch (Exception e) { - ready = false; - logger.error("unable to load resource for pid: " + task.getPid() - + " at object path: " + task.getObjectPath() - + ". Marking new and continuing..."); - } - if(!ready) { - task.markNew(); - saveTaskWithoutDuplication(task); - logger.info("Task for resource map pid: " + task.getPid() + " not processed."); - task = null; - continue; - } else { - logger.info("the original index task - "+task.toString()); - ResourceMapIndexTask resourceMapIndexTask = new ResourceMapIndexTask(); - resourceMapIndexTask.copy(task); - resourceMapIndexTask.setReferencedIds(referencedIds); - task = resourceMapIndexTask; - if(task instanceof ResourceMapIndexTask) { - logger.info("the new index task is a ResourceMapIndexTask"); - logger.info("the new index task - "+task.toString()); - } else { - logger.error("Something is wrong to change the IndexTask object to the ResourceMapIndexTask object "); - } - - } - - } - } - return task; - } - - /*private boolean isResourceMapReadyToIndex(IndexTask task, List queue) { - boolean ready = true; - - if (representsResourceMap(task)) { - ResourceMap rm = null; - try { - rm = ResourceMapFactory.buildResourceMap(task.getObjectPath()); - List referencedIds = rm.getAllDocumentIDs(); - referencedIds.remove(task.getPid()); - - if (areAllReferencedDocsIndexed(referencedIds) == false) { - logger.info("Not all map resource references indexed for map: " + task.getPid() - + ". Marking new and continuing..."); - ready = false; - } - } catch (OREParserException oreException) { - ready = false; - logger.error("Unable to parse ORE doc: " + task.getPid() - + ". Unrecoverable parse error: task will not be re-tried."); - if (logger.isTraceEnabled()) { - oreException.printStackTrace(); - - } - } catch (Exception e) { - ready = false; - logger.error("unable to load resource for pid: " + task.getPid() - + " at object path: " + task.getObjectPath() - + ". Marking new and continuing..."); - } - } - - return ready; - }*/ - - /** - * Referenced documents are PIDs or SIDs that are either archived or not. - * This routine checks the solr index first, then failing to find a record, - * checks HZ system metadata map. - * - * @param referencedIds - * @return - */ - private boolean areAllReferencedDocsIndexed(List referencedIds) { - if (referencedIds == null || referencedIds.size() == 0) { - return true; // empty reference map...ok/ready to index. - } - List updateDocuments = null; - int numberOfIndexedOrRemovedReferences = 0; - try { - updateDocuments = httpService.getDocumentsById(this.solrQueryUri, referencedIds); - numberOfIndexedOrRemovedReferences = 0; - for (String id : referencedIds) { - boolean foundId = false; - for (SolrDoc solrDoc : updateDocuments) { - if (solrDoc.getIdentifier().equals(id) || id.equals(solrDoc.getSeriesId())) { - foundId = true; - numberOfIndexedOrRemovedReferences++; - break; - } - } - if (foundId == false) { - Identifier pid = new Identifier(); - pid.setValue(id); - logger.info("Identifier " + id - + " was not found in the referenced id list in the Solr search index."); - SystemMetadata smd = HazelcastClientFactory.getSystemMetadataMap().get(pid); - if (smd != null && notVisibleInIndex(smd)) { - numberOfIndexedOrRemovedReferences++; - } - } - } - } catch (Exception e) { - logger.error(e.getMessage(), e); - return false; - } - return referencedIds.size() == numberOfIndexedOrRemovedReferences; - } - - private boolean notVisibleInIndex(SystemMetadata smd) { - - if (smd == null) - return false; - - return ! SolrDoc.visibleInIndex(smd); - } -// return (!SolrDoc.visibleInIndex(smd) && smd != null); - - - private boolean representsResourceMap(IndexTask task) { - return ForesiteResourceMap.representsResourceMap(task.getFormatId()); - } - - /** - * returns true if the task is for a data object, otherwise, if the objectPath - * in the task is not filled, attempt to fill it via hazelclient. - * if not available, the task is not ready and false is returned. - * if object path is available, update the task and return true - */ - private boolean isObjectPathReady(IndexTask task) { - - if (isDataObject(task)) - return true; - - boolean ok = true; - - if (task.getObjectPath() == null) { - String objectPath = retrieveHzObjectPath(task.getPid()); - if (objectPath == null) { - ok = false; - evictHzObjectPathEntry(task.getPid()); - logger.info("Object path for pid: " + task.getPid() - + " is not available. Object path entry will be evicting from map. " - + "Task will be retried."); - } - task.setObjectPath(objectPath); - } - - // TODO: if the task has the wrong path to begin with, but the right path - // exists in Hazelcast, we never get to for the correct information. - // if the objectPath is invalid, should we not check Hazelcast to see if it - // has a valid path? - - if (task.getObjectPath() != null) { - File objectPathFile = new File(task.getObjectPath()); - if (!objectPathFile.exists()) { - // object path is present but doesn't correspond to a file - // this task is not ready to index. - ok = false; - logger.info("Object path exists for pid: " + task.getPid() - + " however the file location: " + task.getObjectPath() - + " does not exist. " - + "Marking not ready - task will be marked new and retried."); - } - } - return ok; - } - - private boolean isDataObject(IndexTask task) { - ObjectFormat format = null; - try { - ObjectFormatIdentifier formatId = new ObjectFormatIdentifier(); - formatId.setValue(task.getFormatId()); - format = ObjectFormatCache.getInstance().getFormat(formatId); - } catch (BaseException e) { - logger.error(e.getMessage(), e); - return false; - } - return FORMAT_TYPE_DATA.equals(format.getFormatType()); - } - - private String retrieveHzObjectPath(String pid) { - Identifier PID = new Identifier(); - PID.setValue(pid); - return HazelcastClientFactory.getObjectPathMap().get(PID); - } - - private void evictHzObjectPathEntry(String pid) { - Identifier PID = new Identifier(); - PID.setValue(pid); - HazelcastClientFactory.getObjectPathMap().evict(PID); - } - - private List getIndexTaskQueue() { - long getIndexTasksStart = System.currentTimeMillis(); - List indexTasks = repo.findByStatusOrderByPriorityAscTaskModifiedDateAsc(IndexTask.STATUS_NEW); - perfLog.log("MockIndexTaskProcessor.getIndexTaskQueue() fetching NEW IndexTasks from repo", System.currentTimeMillis() - getIndexTasksStart); - return indexTasks; - } - - private List getIndexTaskRetryQueue() { - return repo.findByStatusAndNextExecutionLessThan(IndexTask.STATUS_FAILED, - System.currentTimeMillis()); - } - - /* - * @return - Can return null upon error - */ - private IndexTask saveTask(IndexTask task) { - try { - task = repo.save(task); - logger.info("IndexTaskProcess.saveTask save the index task "+task.getPid()); - } catch (HibernateOptimisticLockingFailureException e) { - logger.error("Unable to update index task for pid: " + task.getPid() + "."); - task = null; - } - return task; - } - - /* - * Save the task only if no new or failed task already exists for the pid - */ - private void saveTaskWithoutDuplication(IndexTask task) { - if(task != null) { - if(!newOrFailedIndexTaskExists(task.getPid())) { - saveTask(task); - } - } - } - - /** - * If an index task exists with the new or failed status for the given id - * @param id - * @return true if the index task with new or failed status exists; otherwise false. - */ - private boolean newOrFailedIndexTaskExists(String id) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists for id "+id); - boolean exist=false; - if(id != null ) { - List itList = repo.findByPidAndStatus(id, IndexTask.STATUS_NEW); - if(itList != null && !itList.isEmpty()) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists did find a new-status index task for id "+id); - exist = true; - } - if(!exist) { - itList = repo.findByPidAndStatus(id, IndexTask.STATUS_FAILED); - if(itList != null && !itList.isEmpty()) { - logger.info("IndexTaskProcess.newOrFailedIndexTaskExists did find a failed-status index task for id "+id); - exist = true; - } - } - } - - return exist; - } - -// private Document loadDocument(IndexTask task) { -// Document docObject = null; -// try { -// docObject = XmlDocumentUtility.loadDocument(task.getObjectPath()); -// } catch (Exception e) { -// logger.error(e.getMessage(), e); -// } -// if (docObject == null) { -// logger.error("Could not load OBJECT file for ID,Path=" + task.getPid() + ", " -// + task.getObjectPath()); -// } -// return docObject; -// } - - public void setSolrQueryUri(String uri) { - this.solrQueryUri = uri; - } - - /** - * Get the ExecutorService to handle multiple thread - * @return - */ - public ExecutorService getExecutorService() { - return executor; - } - - /** - * Get the last 100 futures of the index task threads scheduled by executor service. - * @return - */ -// public Queue getFutureQueue() { -// return futureQueue; -// } -} diff --git a/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessorJob.java b/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessorJob.java deleted file mode 100644 index 05bef711..00000000 --- a/src/test/java/org/dataone/cn/indexer/processor/MockIndexTaskProcessorJob.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * This work was created by participants in the DataONE project, and is - * jointly copyrighted by participating institutions in DataONE. For - * more information on DataONE, see our web site at http://dataone.org. - * - * Copyright ${year} - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Id$ - */ - -package org.dataone.cn.indexer.processor; - -import java.util.Date; - -import org.apache.log4j.Logger; -import org.quartz.DisallowConcurrentExecution; -import org.quartz.InterruptableJob; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.quartz.UnableToInterruptJobException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * The scope of each job is processing a list of IndexTasks. Only one Job is - * permitted to run at a time. - * - * @author rnahf - * - */ -@DisallowConcurrentExecution -public class MockIndexTaskProcessorJob implements InterruptableJob { - - private static Logger logger = Logger.getLogger(MockIndexTaskProcessorJob.class.getName()); - - private static Date context; - private static MockTaskProcessor processor = new MockTaskProcessor(); - - public MockIndexTaskProcessorJob() { - System.out.println("instantiating MockIndexTaskProcessorJob: "); - } - - public void execute(JobExecutionContext arg0) throws JobExecutionException { - long start = System.currentTimeMillis(); - System.out.println("MockIndexTaskProcessorJob: entering execute... "); - - processor.processList(); - long end = System.currentTimeMillis(); - System.out.println("MockIndexTaskProcessorJob...finished execution in (millis) " + (end - start));//System.currentTimeMillis()); - } - - - @Override - public void interrupt() throws UnableToInterruptJobException { - interruptCurrent(); - - } - - public static void interruptCurrent() { - System.out.println("********************* ProcessorJob interrupt called, calling executorservice shutdown..."); - processor.getExecutorService().shutdown(); - } -} diff --git a/src/test/java/org/dataone/cn/indexer/processor/MockTaskProcessor.java b/src/test/java/org/dataone/cn/indexer/processor/MockTaskProcessor.java deleted file mode 100644 index af0fe974..00000000 --- a/src/test/java/org/dataone/cn/indexer/processor/MockTaskProcessor.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.dataone.cn.indexer.processor; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.log4j.Logger; - -public class MockTaskProcessor { - - - private static Logger logger = Logger.getLogger("MockTaskProcessor"); - private static ExecutorService executor = Executors.newFixedThreadPool(3); - private static final ReentrantLock lock = new ReentrantLock(); - - public MockTaskProcessor() { - // TODO Auto-generated constructor stub - } - - public void processList() { - logger.info("MockTaskProcessor: entering processList..."); - - for(int i=0; i < 100; i++) { - processOnThread(i); - } - - logger.info("MockTaskProcessor: ... leaving processList"); - } - - void processOnThread(final int i) { - - Runnable r = new Runnable() { - - @Override - public void run() { - waitAndPrint(3000, i); - } - - }; - executor.submit(r); - System.out.println(" Submitted task " + i); - - } - - void waitAndPrint(long t, int i) { - System.out.println("Starting task: " + i); - try { - Thread.sleep(t); - } catch (InterruptedException e) { - System.out.println("Runnable task " + i + " was interrupted, so finishing early..."); - } - System.out.println( - String.format("after %d millis, finishing task: %d", t, i)); - } - - public ExecutorService getExecutorService() { - return executor; - } -} diff --git a/src/test/java/org/dataone/cn/indexer/processor/TestIndexTaskProcessorConcurrency.java b/src/test/java/org/dataone/cn/indexer/processor/TestIndexTaskProcessorConcurrency.java deleted file mode 100644 index 3fda72e5..00000000 --- a/src/test/java/org/dataone/cn/indexer/processor/TestIndexTaskProcessorConcurrency.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.dataone.cn.indexer.processor; - -import static org.junit.Assert.*; -import static org.quartz.JobBuilder.newJob; -import static org.quartz.JobKey.jobKey; -import static org.quartz.TriggerBuilder.newTrigger; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Properties; - -import org.dataone.cn.index.processor.IndexTaskProcessorJob; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.quartz.InterruptableJob; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.SchedulerFactory; -import org.quartz.SimpleScheduleBuilder; -import org.quartz.SimpleTrigger; -import org.quartz.impl.StdSchedulerFactory; - -public class TestIndexTaskProcessorConcurrency { - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @Before - public void setUp() throws Exception { - } - - @Test - public void testTrue() - { - ; - } - - @Test - public void runThroughSchedulerBehavior() throws IOException, SchedulerException { - - - Properties properties = new Properties(); - properties.load(this.getClass().getResourceAsStream( - "/org/dataone/configuration/quartz.properties")); - SchedulerFactory schedulerFactory = new StdSchedulerFactory(properties); - Scheduler scheduler = schedulerFactory.getScheduler(); - - JobDetail job = newJob(MockIndexTaskProcessorJob.class) - .withIdentity("test_job", "test_group") - .build(); - - SimpleTrigger trigger = newTrigger() - .withIdentity("test_trigger", "test_group") - .startNow() - .withSchedule(SimpleScheduleBuilder.repeatHourlyForever()) - .build(); - - scheduler.scheduleJob(job, trigger); - - - System.out.println("============= scheduler START ==============" + new Date()); - scheduler.start(); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - throw new SchedulerException("Interrupted", e); - } -// System.out.println("============= scheduler STANDBY ==============" + new Date()); -// scheduler.standby(); -// -// -// -// -// try { -// Thread.sleep(5000); -// } catch (InterruptedException e) { -// throw new SchedulerException("Scheduler Interrupted", e); -// } - - System.out.println("============= attempt to kill the Job ==============" + new Date()); - try { - if (scheduler.isStarted()) { - scheduler.standby(); -// scheduler.unscheduleJob(new TriggerKey(QUARTZ_PROCESSOR_TRIGGER, QUARTZ_PROCESSOR_GROUP)); - MockIndexTaskProcessorJob.interruptCurrent(); - - while (!(scheduler.getCurrentlyExecutingJobs().isEmpty())) { - System.out.println(String.format("%d jobs executing, waiting for them to complete...", - scheduler.getCurrentlyExecutingJobs().size())); - - try { - Thread.sleep(5000); - } catch (InterruptedException ex) { - System.out.println("Sleep interrupted. check again!"); - } - } - System.out.println("Job scheduler finish executing all jobs."); - } - } catch (SchedulerException e) { - e.printStackTrace(); - } - System.out.println("============= continue to wait 5 sec... ==============" + new Date()); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - throw new SchedulerException("Interrupted", e); - } - - - -// System.out.println("============= scheduler START (again) ==============" + new Date()); -// scheduler. start(); -// try { -// Thread.sleep(5000); -// } catch (InterruptedException e) { -// throw new SchedulerException("Interrupted", e); -// } - System.out.println("============= scheduler SHUTDOWN ==============" + new Date()); - scheduler.shutdown(false); - try { - Thread.sleep(30000); - } catch (InterruptedException e) { - throw new SchedulerException("Interrupted", e); - } - System.out.println("============= DONE !!!!!!!!!! ==============" + new Date()); - } - -} diff --git a/src/test/java/org/dataone/cn/indexer/resourcemap/OREResourceMapTest.java b/src/test/java/org/dataone/cn/indexer/resourcemap/OREResourceMapTest.java index dbb60853..1dc4b528 100644 --- a/src/test/java/org/dataone/cn/indexer/resourcemap/OREResourceMapTest.java +++ b/src/test/java/org/dataone/cn/indexer/resourcemap/OREResourceMapTest.java @@ -35,39 +35,37 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPathExpressionException; +import org.dataone.cn.index.DataONESolrJettyTestBase; import org.dataone.service.types.v1.Identifier; import org.dspace.foresite.OREException; import org.dspace.foresite.OREParserException; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.w3c.dom.Document; import org.xml.sax.SAXException; import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope; @ThreadLeakScope(ThreadLeakScope.Scope.NONE) -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "test-context.xml" }) -public class OREResourceMapTest { +//@RunWith(SpringJUnit4ClassRunner.class) +//@ContextConfiguration(locations = { "test-context.xml" }) +public class OREResourceMapTest extends DataONESolrJettyTestBase{ - @Autowired + //@Autowired private Resource testDoc; - @Autowired + //@Autowired private Resource incompleteResourceMap; - @Autowired + //@Autowired private Resource dryadDoc; - @Autowired + //@Autowired private Resource transitiveRelationshipsDoc; - @Autowired + //@Autowired private Resource incompleteTransitiveRelationshipsDoc; /** @@ -722,5 +720,41 @@ public boolean documentExists(Identifier pid) { return false; } } + + /** + * For each test, set up the Solr service and test data + * + * @throws Exception + */ + @Before + public void setUp() throws Exception { + // Start up the embedded Jetty server and Solr service + super.setUp(); + // load the prov context beans + configureSpringResources(); + } + + + /* Load the indexer and provenance context beans */ + protected void configureSpringResources() throws IOException { + + // Instantiate the generator and processor from the test-context beans + //processor = (IndexTaskProcessor) context.getBean("indexTaskProcessor"); + //generator = (IndexTaskGenerator) context.getBean("indexTaskGenerator"); + + // instantiate the RDF resource to be tested + + testDoc = (Resource) context.getBean("testDoc"); + + incompleteResourceMap = (Resource) context.getBean("incompleteResourceMap"); + + dryadDoc = (Resource) context.getBean("dryadDoc"); + + transitiveRelationshipsDoc = (Resource) context.getBean("transitiveRelationshipsDoc"); + + incompleteTransitiveRelationshipsDoc = (Resource) context.getBean("incompleteTransitiveRelationshipsDoc"); + + } + } diff --git a/src/test/java/org/dataone/cn/indexer/resourcemap/RdfXmlProcessorTest.java b/src/test/java/org/dataone/cn/indexer/resourcemap/RdfXmlProcessorTest.java index dc1f4022..4311c0de 100644 --- a/src/test/java/org/dataone/cn/indexer/resourcemap/RdfXmlProcessorTest.java +++ b/src/test/java/org/dataone/cn/indexer/resourcemap/RdfXmlProcessorTest.java @@ -47,12 +47,7 @@ import org.apache.solr.client.solrj.util.ClientUtils; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.params.ModifiableSolrParams; -import org.dataone.cn.hazelcast.HazelcastClientFactory; import org.dataone.cn.index.DataONESolrJettyTestBase; -import org.dataone.cn.index.HazelcastClientFactoryTest; -import org.dataone.cn.index.generator.IndexTaskGenerator; -import org.dataone.cn.index.processor.IndexTaskProcessor; -import org.dataone.cn.index.task.IndexTask; import org.dataone.cn.indexer.annotation.RdfXmlSubprocessor; import org.dataone.cn.indexer.convert.SolrDateConverter; import org.dataone.cn.indexer.solrhttp.HTTPService; @@ -95,36 +90,46 @@ public class RdfXmlProcessorTest extends DataONESolrJettyTestBase { private ApplicationContext provenanceContext = null; /* The index task processor used to process tasks in the queue */ - protected IndexTaskProcessor processor; + //protected IndexTaskProcessor processor; /* The task generator that adds tasks to the queue */ - private IndexTaskGenerator generator; + //private IndexTaskGenerator generator; /* the RDF/XML resource map to parse */ private Resource provAlaWaiNS02MatlabProcessing2RDF; + private String provAlaWaiNS02MatlabProcessing2RDFPid = "ala-wai-ns02-matlab-processing.2.rdf"; /* The three Matlab scripts involved in the processing */ private Resource provAlaWaiNS02MatlabProcessingDataProcessor1m; + private String provAlaWaiNS02MatlabProcessingDataProcessor1mPid = "ala-wai-canal-ns02-matlab-processing-DataProcessor.1.m"; private Resource provAlaWaiNS02MatlabProcessingConfigure1m; + private String provAlaWaiNS02MatlabProcessingConfigure1mPid = "ala-wai-canal-ns02-matlab-processing-Configure.1.m"; private Resource provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1m; + private String provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mPid = "ala-wai-canal-ns02-matlab-processing-schedule_AW02XX_001CTDXXXXR00_processing.1.m"; /* The EML science metadata describing the processing */ private Resource provAlaWaiNS02MatlabProcessingEML1xml; + private String provAlaWaiNS02MatlabProcessingEML1xmlPid = "ala-wai-canal-ns02-matlab-processing.eml.1.xml"; /* The input data being processed */ private Resource provAlaWaiNS02CTDData1txt; + private String provAlaWaiNS02CTDData1txtPid = "ala-wai-canal-ns02-ctd-data.1.txt"; /* The processed output image */ private Resource provAlaWaiNS02ImageDataAW02XX_001CTDXXXXR00_20150203_10day1jpg; + private String provAlaWaiNS02ImageDataAW02XX_001CTDXXXXR00_20150203_10day1jpgPid = "ala-wai-canal-ns02-image-data-AW02XX_001CTDXXXXR00_20150203_10day.1.jpg"; /* The eml 2.2.0 object is part of a portal */ private Resource partEml220; + private String partEml220Pid = "eml-test-doc"; /* The portal object which has the part eml 220 object*/ private Resource partPortal; + private String partPortalPid = "urn:uuid:b210adf0-f08a-4cae-aa86-5b64605e9297"; /* The resource map describing the hasPart/isPartOf relationship */ private Resource partResourcemap; + private String partResourcemapPid = "resourcemap-with-part.xml"; /* An instance of the RDF/XML Subprocessor */ private RdfXmlSubprocessor provRdfXmlSubprocessor; @@ -157,12 +162,12 @@ public class RdfXmlProcessorTest extends DataONESolrJettyTestBase { @BeforeClass public static void init() { - HazelcastClientFactoryTest.setUp(); + //HazelcastClientFactoryTest.setUp(); } @AfterClass public static void cleanup() throws Exception { - HazelcastClientFactoryTest.shutDown(); + //HazelcastClientFactoryTest.shutDown(); } /** @@ -181,6 +186,7 @@ public void setUp() throws Exception { // instantiate the subprocessor provRdfXmlSubprocessor = (RdfXmlSubprocessor) context.getBean("rdfXMLSubprocessor"); + sendSolrDeleteAll(); } @@ -354,60 +360,39 @@ public void testPartFields() throws Exception { //@Ignore @Test public void testInsertProvResourceMap() throws Exception { + String script1 = provAlaWaiNS02MatlabProcessingDataProcessor1mPid; + indexObjectToSolr(script1, provAlaWaiNS02MatlabProcessingDataProcessor1m); - /* variables used to populate system metadata for each resource */ - File object = null; - String formatId = null; + String script2 = provAlaWaiNS02MatlabProcessingConfigure1mPid; + indexObjectToSolr(script2,provAlaWaiNS02MatlabProcessingConfigure1m); - NodeReference nodeid = new NodeReference(); - nodeid.setValue("urn:node:mnTestXXXX"); - - String userDN = "uid=tester,o=testers,dc=dataone,dc=org"; - - // Insert the three processing files into the task queue - String script1 = "ala-wai-canal-ns02-matlab-processing-DataProcessor.1.m"; - formatId = "text/plain"; - insertResource(script1, formatId, provAlaWaiNS02MatlabProcessingDataProcessor1m, nodeid, - userDN); - - String script2 = "ala-wai-canal-ns02-matlab-processing-Configure.1.m"; - formatId = "text/plain"; - insertResource(script2, formatId, provAlaWaiNS02MatlabProcessingConfigure1m, nodeid, userDN); - - String script3 = "ala-wai-canal-ns02-matlab-processing-schedule_AW02XX_001CTDXXXXR00_processing.1.m"; - formatId = "text/plain"; - insertResource(script3, formatId, - provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1m, nodeid, - userDN); + String script3 = provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1mPid; + indexObjectToSolr(script3, provAlaWaiNS02MatlabProcessingScheduleAW02XX_001CTDXXXXR00Processing1m); // Insert the EML file into the task queue - String emlDoc = "ala-wai-canal-ns02-matlab-processing.eml.1.xml"; - formatId = "eml://ecoinformatics.org/eml-2.1.1"; - insertResource(emlDoc, formatId, provAlaWaiNS02MatlabProcessingEML1xml, nodeid, userDN); + String emlDoc = provAlaWaiNS02MatlabProcessingEML1xmlPid; + indexObjectToSolr(emlDoc, provAlaWaiNS02MatlabProcessingEML1xml); // Insert the output image into the task queue - String jpgImage = "ala-wai-ns02-image-data-AW02XX_001CTDXXXXR00_20150203_10day.1.jpg"; - formatId = "image/jpeg"; - insertResource(jpgImage, formatId, - provAlaWaiNS02ImageDataAW02XX_001CTDXXXXR00_20150203_10day1jpg, nodeid, userDN); + String jpgImage = provAlaWaiNS02ImageDataAW02XX_001CTDXXXXR00_20150203_10day1jpgPid; + indexObjectToSolr(jpgImage, provAlaWaiNS02ImageDataAW02XX_001CTDXXXXR00_20150203_10day1jpg); // Insert the CTD data into the task queue - String ctdData = "ala-wai-ns02-ctd-data.1.txt"; - formatId = "text/plain"; - insertResource(ctdData, formatId, provAlaWaiNS02CTDData1txt, nodeid, userDN); + String ctdData = provAlaWaiNS02CTDData1txtPid; + indexObjectToSolr(ctdData, provAlaWaiNS02CTDData1txt); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); + //processor.processIndexTaskQueue(); // Insert the resource map into the task queue - String resourceMap = "ala-wai-canal-ns02-matlab-processing.2.rdf"; - formatId = "http://www.openarchives.org/ore/terms"; - insertResource(resourceMap, formatId, provAlaWaiNS02MatlabProcessing2RDF, nodeid, userDN); + String resourceMap = provAlaWaiNS02MatlabProcessing2RDFPid; + //formatId = "http://www.openarchives.org/ore/terms"; + indexObjectToSolr(resourceMap, provAlaWaiNS02MatlabProcessing2RDF); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); + //processor.processIndexTaskQueue(); Thread.sleep(SLEEPTIME); @@ -432,41 +417,28 @@ public void testInsertProvResourceMap() throws Exception { //@Ignore @Test public void testInsertPartsResourceMap() throws Exception { - - /* variables used to populate system metadata for each resource */ - File object = null; - String formatId = null; - - NodeReference nodeid = new NodeReference(); - nodeid.setValue("urn:node:mnTestXXXX"); - - String userDN = "uid=tester,o=testers,dc=dataone,dc=org"; - // Insert the EML file into the task queue - String emlId = "urn:uuid:f18812ac-7f4f-496c-82cc-3f4f54830274"; - formatId = "https://eml.ecoinformatics.org/eml-2.2.0"; - insertResource(emlId, formatId, partEml220, nodeid, userDN); + String emlId = partEml220Pid; + //formatId = "https://eml.ecoinformatics.org/eml-2.2.0"; + indexObjectToSolr(emlId, partEml220); // Insert the portal document into the task queue - String portalId = "urn:uuid:b210adf0-f08a-4cae-aa86-5b64605e9297"; - formatId = "https://purl.dataone.org/portals-1.0.0"; + String portalId = partPortalPid; + //formatId = "https://purl.dataone.org/portals-1.0.0"; String serieId = "urn:uuid:27ae3627-be62-4963-859a-8c96d940cadc"; - insertResource(portalId, formatId, - partPortal, nodeid, userDN, serieId); + indexObjectToSolr(portalId, partPortal); Thread.sleep(SLEEPTIME); // now process the tasks - processor.processIndexTaskQueue(); + //processor.processIndexTaskQueue(); // Insert the resource map into the task queue String resourceMapId = "resource_map_urn:uuid:cd489c7e-be88-4d57-b13a-911b25a0b47f"; - formatId = "http://www.openarchives.org/ore/terms"; + //formatId = "http://www.openarchives.org/ore/terms"; + //The following statement was commented before we created the dataone-indexer project //insertResource(resourceMapId, formatId, partResourcemap, nodeid, userDN); Thread.sleep(SLEEPTIME); - // now process the tasks - processor.processIndexTaskQueue(); - Thread.sleep(SLEEPTIME); assertPresentInSolrIndex(emlId); assertPresentInSolrIndex(portalId); @@ -489,8 +461,8 @@ public void testInit() { protected void configureSpringResources() throws IOException { // Instantiate the generator and processor from the test-context beans - processor = (IndexTaskProcessor) context.getBean("indexTaskProcessor"); - generator = (IndexTaskGenerator) context.getBean("indexTaskGenerator"); + //processor = (IndexTaskProcessor) context.getBean("indexTaskProcessor"); + //generator = (IndexTaskGenerator) context.getBean("indexTaskGenerator"); // instantiate the RDF resource to be tested if (provenanceContext == null) { @@ -525,176 +497,5 @@ protected void configureSpringResources() throws IOException { partResourcemap = (Resource) provenanceContext.getBean("partResourceMap"); } - /* Delete a solr entry based on its identifier */ - private void deleteFromSolr(String pid) throws Exception { - HTTPService httpService = (HTTPService) context.getBean("httpService"); - httpService.sendSolrDelete(pid); - - } - - /* - * Generate system metadata for the object being uploaded - * - * @param pidStr the identifier string of this object - * @param formatIdStr the object format identifier of this object - * @param nodeId the Member Node identifier - * @param subjectStr the subject DN string of the submitter/rightsholder - * @param object the object to be uploaded - * @return - */ - protected SystemMetadata generateSystemMetadata(String pidStr, String formatIdStr, - NodeReference nodeId, String subjectStr, File object) { - SystemMetadata sysmeta = new SystemMetadata(); - - // Used to calculate checksum - InputStream fileInputStream = null; - - try { - fileInputStream = new FileInputStream(object); - } catch (FileNotFoundException fnfe) { - log.debug("Couldn't find file. Error was: " + fnfe.getMessage()); - fnfe.printStackTrace(); - - } - - // Set the serial version, although the CN will modify it - sysmeta.setSerialVersion(new BigInteger("1")); - - // Set the identifier - Identifier pid = new Identifier(); - pid.setValue(pidStr); - sysmeta.setIdentifier(pid); - - // Set the object format identifier - ObjectFormatIdentifier formatId = new ObjectFormatIdentifier(); - formatId.setValue(formatIdStr); - sysmeta.setFormatId(formatId); - - // Set the size - long size = object.length(); - sysmeta.setSize(new BigInteger(String.valueOf(size))); - - // Set the checksum - try { - Checksum checksum = ChecksumUtil.checksum(fileInputStream, "SHA-1"); - sysmeta.setChecksum(checksum); - - } catch (NoSuchAlgorithmException e) { - log.debug("Unknown algorithm. Error was: " + e.getMessage()); - e.printStackTrace(); - - } catch (IOException fnfe) { - log.debug("Couldn't find file. Error was: " + fnfe.getMessage()); - fnfe.printStackTrace(); - - } - - // Set the submitter and rightsholder - Subject subject = new Subject(); - subject.setValue(subjectStr); - sysmeta.setSubmitter(subject); - sysmeta.setRightsHolder(subject); - - // Set the access policy to allow public read - AccessPolicy policy = AccessUtil.createSingleRuleAccessPolicy(new String[] { "public" }, - new Permission[] { Permission.READ }); - sysmeta.setAccessPolicy(policy); - - // Set the upload and modification dates - Date now = new Date(); - sysmeta.setDateUploaded(now); - sysmeta.setDateSysMetadataModified(now); - - // Set the node fields - sysmeta.setOriginMemberNode(nodeId); - sysmeta.setAuthoritativeMemberNode(nodeId); - - if (log.isTraceEnabled()) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - TypeMarshaller.marshalTypeToOutputStream(sysmeta, baos); - log.trace(baos.toString()); - - } catch (MarshallingException e) { - fail("System metadata could not be parsed. Check for errors: " + e.getMessage()); - - } catch (IOException e) { - fail("System metadata could not be read. Check for errors: " + e.getMessage()); - - } - } - return sysmeta; - - } - - /* - * Insert members of the resource map into the index task queue by first generating - * system metadata for each, then crating the tasks - */ - protected void insertResource(String pid, String formatId, Resource resource, - NodeReference nodeid, String userDN) throws IOException { - - // Get the File object of the resource to calculate size, checksum, etc. - File object = resource.getFile(); - - // Build the system metadata - SystemMetadata sysMeta = generateSystemMetadata(pid, formatId, nodeid, userDN, object); - // Add the system metadata to hazelcast, and create an index task in the queue - addSystemMetadata(resource, sysMeta); - } - - /* - * Insert members of the resource map into the index task queue by first generating - * system metadata for each, then crating the tasks. This method offers an extra field - - * series id for the system metadata - */ - private void insertResource(String pid, String formatId, Resource resource, - NodeReference nodeid, String userDN, String seriesId) throws IOException { - - // Get the File object of the resource to calculate size, checksum, etc. - File object = resource.getFile(); - - // Build the system metadata - SystemMetadata sysMeta = generateSystemMetadata(pid, formatId, nodeid, userDN, object); - Identifier seriesIdentifier = new Identifier(); - seriesIdentifier.setValue(seriesId); - sysMeta.setSeriesId(seriesIdentifier); - // Add the system metadata to hazelcast, and create an index task in the queue - addSystemMetadata(resource, sysMeta); - } - - /* - * Trigger an index task to be processed given an object as a Resource and the - * system metadata describing it - * - * @param object the object as a Resource - * @param sysmeta the system metadata describing the object - */ - private void addSystemMetadata(Resource object, SystemMetadata sysmeta) { - - String path = null; - try { - path = object.getFile().getPath(); - - } catch (IOException e) { - fail("Couldn't get the path to the resource: " + object.getFilename()); - - } - try { - // insert the system metadata into Hazelcast - HazelcastClientFactory.getSystemMetadataMap().put(sysmeta.getIdentifier(), sysmeta); - // insert the object path into Hazelcast - HazelcastClientFactory.getObjectPathMap().put(sysmeta.getIdentifier(), path); - - } catch (RuntimeException e) { - e.printStackTrace(); - fail("Couldn't insert into Hazelcast: " + e.getMessage()); - - } - - // Trigger the index task creation - IndexTask task = generator.processSystemMetaDataUpdate(sysmeta, path); - log.debug("Index task returned: " + task.getPid()); - - } + } diff --git a/src/test/java/org/dataone/indexer/queue/IndexQueueMessageParserTest.java b/src/test/java/org/dataone/indexer/queue/IndexQueueMessageParserTest.java new file mode 100644 index 00000000..b6a5c1cc --- /dev/null +++ b/src/test/java/org/dataone/indexer/queue/IndexQueueMessageParserTest.java @@ -0,0 +1,174 @@ +package org.dataone.indexer.queue; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.Map; + +import org.dataone.service.exceptions.InvalidRequest; +import org.junit.Test; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.LongString; +import com.rabbitmq.client.impl.LongStringHelper; + +/** + * A junit test class for IndexQueueMessageParser + * @author tao + * + */ +public class IndexQueueMessageParserTest { + private final static String HEADER_ID = "id"; //The header name in the message to store the identifier + private final static String HEADER_PATH = "path"; //The header name in the message to store the path of the object + private final static String HEADER_INDEX_TYPE = "index_type"; //The header name in the message to store the index type + + /** + * Test the invalid messages + * @throws Exception + */ + @Test + public void testInvalidRequest() throws Exception { + LongString id = null; + LongString index_type = LongStringHelper.asLongString("create"); + int priority = 1; + LongString filePath = LongStringHelper.asLongString("foo"); + AMQP.BasicProperties properties = generateProperties(id, index_type, priority, filePath); + byte[] body = null; + IndexQueueMessageParser parser = new IndexQueueMessageParser(); + try { + parser.parse(properties, body); + fail("Since the idenitifer is null, we shoulder get here"); + } catch (InvalidRequest e) { + + } + + id = LongStringHelper.asLongString(" "); + index_type = LongStringHelper.asLongString("create"); + priority = 1; + filePath = LongStringHelper.asLongString("foo"); + properties = generateProperties(id, index_type, priority, filePath); + try { + parser.parse(properties, body); + fail("Since the idenitifer is null, we shouldn't get here"); + } catch (InvalidRequest e) { + + } + + id = LongStringHelper.asLongString("foo"); + index_type = null; + priority = 1; + filePath = LongStringHelper.asLongString("foo"); + properties = generateProperties(id, index_type, priority, filePath); + try { + parser.parse(properties, body); + fail("Since the index type is null, we shouldn't get here"); + } catch (InvalidRequest e) { + + } + + id = LongStringHelper.asLongString("foo"); + index_type = LongStringHelper.asLongString(""); + priority = 1; + filePath = LongStringHelper.asLongString("foo"); + properties = generateProperties(id, index_type, priority, filePath); + try { + parser.parse(properties, body); + fail("Since the index type is null, we shouldn't get here"); + } catch (InvalidRequest e) { + + } + } + + /** + * Test valid messages + * @throws Exception + */ + @Test + public void testParse() throws Exception { + String id = "doi:10.5063/F1HX1B4Q"; + String indexType = "create"; + int priority = 1; + String filePath = "/var/metacat/12dfad"; + LongString longId = LongStringHelper.asLongString(id); + LongString longIndexType = LongStringHelper.asLongString(indexType); + LongString longFilePath = LongStringHelper.asLongString(filePath); + AMQP.BasicProperties properties = generateProperties(longId, longIndexType, priority, longFilePath); + byte[] body = null; + IndexQueueMessageParser parser = new IndexQueueMessageParser(); + parser.parse(properties, body); + assertTrue(parser.getIdentifier().getValue().equals(id)); + assertTrue(parser.getIndexType().equals(indexType)); + assertTrue(parser.getPriority() == priority); + assertTrue(parser.getObjectPath().equals(filePath)); + + id = "urn:uuid:45298965-f867-440c-841f-91d3abd729b7"; + indexType = "delete"; + priority = 2; + filePath = ""; + longId = LongStringHelper.asLongString(id); + longIndexType = LongStringHelper.asLongString(indexType); + longFilePath = LongStringHelper.asLongString(filePath); + properties = generateProperties(longId, longIndexType, priority, longFilePath); + parser = new IndexQueueMessageParser(); + parser.parse(properties, body); + assertTrue(parser.getIdentifier().getValue().equals(id)); + assertTrue(parser.getIndexType().equals(indexType)); + assertTrue(parser.getPriority() == priority); + assertTrue(parser.getObjectPath().equals(filePath)); + + id = "test-foo"; + indexType = "sysmeta"; + priority = 10; + filePath = "c:\\foo\\abc"; + longId = LongStringHelper.asLongString(id); + longIndexType = LongStringHelper.asLongString(indexType); + longFilePath = LongStringHelper.asLongString(filePath); + properties = generateProperties(longId, longIndexType, priority, longFilePath); + parser = new IndexQueueMessageParser(); + parser.parse(properties, body); + assertTrue(parser.getIdentifier().getValue().equals(id)); + assertTrue(parser.getIndexType().equals(indexType)); + assertTrue(parser.getPriority() == priority); + assertTrue(parser.getObjectPath().equals(filePath)); + + id = "test-foo2"; + indexType = "sysmeta2"; + priority = 10; + longId = LongStringHelper.asLongString(id); + longIndexType = LongStringHelper.asLongString(indexType); + longFilePath = null; + properties = generateProperties(longId, longIndexType, priority, longFilePath); + parser = new IndexQueueMessageParser(); + parser.parse(properties, body); + assertTrue(parser.getIdentifier().getValue().equals(id)); + assertTrue(parser.getIndexType().equals(indexType)); + assertTrue(parser.getPriority() == priority); + assertTrue(parser.getObjectPath() == null); + } + + /** + * Generate the BasicProperties for the given values + * @param id + * @param index_type + * @param priority + * @param filePath + * @return + */ + private AMQP.BasicProperties generateProperties(LongString id, LongString index_type, int priority, LongString filePath) { + Map headers = new HashMap(); + headers.put(HEADER_ID, id); + headers.put(HEADER_INDEX_TYPE, index_type); + if (filePath != null) { + headers.put(HEADER_PATH, filePath); + } + AMQP.BasicProperties basicProperties = new AMQP.BasicProperties.Builder() + .contentType("text/plain") + .deliveryMode(2) // set this message to persistent + .priority(priority) + .headers(headers) + .build(); + return basicProperties; + } + +} diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties deleted file mode 100644 index 9c28ce59..00000000 --- a/src/test/resources/log4j.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Direct log messages to stderr -# Root logger option -log4j.rootLogger=ERROR,stderr - -#INFO etc to stderr -log4j.appender.stderr=org.apache.log4j.ConsoleAppender -log4j.appender.stderr.threshold=TRACE -log4j.appender.stderr.target=System.err -log4j.appender.stderr.layout=org.apache.log4j.PatternLayout -log4j.appender.stderr.layout.ConversionPattern=[%5p] %d (%C:%M:%L) %m%n - -log4j.logger.org.dataone.cn.indexer=WARN -log4j.logger.org.apache.solr=WARN \ No newline at end of file diff --git a/src/test/resources/log4j2.properties b/src/test/resources/log4j2.properties new file mode 100644 index 00000000..7297f62d --- /dev/null +++ b/src/test/resources/log4j2.properties @@ -0,0 +1,45 @@ +# /** +# * '$rcsfile: log4j2.properties,v $' +# * copyright: 2020 regents of the university of california and the +# * national center for ecological analysis and synthesis +# * +# * this program is free software; you can redistribute it and/or modify +# * it under the terms of the gnu general public license as published by +# * the free software foundation; either version 2 of the license, or +# * (at your option) any later version. +# * +# * this program is distributed in the hope that it will be useful, +# * but without any warranty; without even the implied warranty of +# * merchantability or fitness for a particular purpose. see the +# * gnu general public license for more details. +# * +# * you should have received a copy of the gnu general public license +# * along with this program; if not, write to the free software +# * foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa +# */ + +name=Log4j2PropertiesConfigForDataONEIndex + +#Reload the file every 120 seconds +monitorInterval=120 + +############################################################# +# the appendder named consoleAppender with the Console type # +############################################################# +appender.consoleAppender.type=Console +appender.consoleAppender.name=consoleAppender +appender.consoleAppender.layout.type=PatternLayout +appender.consoleAppender.layout.pattern=dataone-indexer %d{yyyyMMdd-HH:mm:ss}: [%p]: %m [%C:%M:%L]%n + +################################## +# the root logger configuration # +################################## +rootLogger.level=INFO +rootLogger.appenderRef.console.ref=consoleAppender + +################################################################################ +# a customized logger - dataone for the package org.dataone.client on console # +################################################################################ +logger.dataone.name=org.dataone.cn +logger.dataone.level=INFO +logger.dataone.appenderRef.console.ref=consoleAppender diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4.json b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4/annotation.130.4.json similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4.json rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4/annotation.130.4.json diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/annotation/annotation.130.4/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/datacite/datacite-science-metadata-1.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/datacite/datacite-science-metadata-1.xml index f9715a9e..48275961 100644 --- a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/datacite/datacite-science-metadata-1.xml +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/datacite/datacite-science-metadata-1.xml @@ -40,4 +40,7 @@ Ponhook Lake, Nova Scotia + + CC0 1.0 Universal + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1/peggym.127.1 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1/peggym.127.1 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.127.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.127.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.127.1/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy/peggym.128.1-obsoletedBy similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy/peggym.128.1-obsoletedBy diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.1-obsoletedBy b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.1-obsoletedBy rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1-obsoletedBy/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1/peggym.128.1 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1/peggym.128.1 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.1/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2/peggym.128.2 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2/peggym.128.2 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.2 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.128.2 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.128.2/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1/peggym.129.1 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1/peggym.129.1 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.129.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.129.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.129.1/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy/peggym.130.4-obsoletedBy similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy/peggym.130.4-obsoletedBy diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.4-obsoletedBy b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.4-obsoletedBy rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4-obsoletedBy/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4/peggym.130.4 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4/peggym.130.4 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.4 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.4 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.4/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5/peggym.130.5 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5/peggym.130.5 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.5 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.130.5 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.130.5/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated/peggym.resourcemap-complicated similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated/peggym.resourcemap-complicated diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap-complicated b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap-complicated rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap-complicated/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series/peggym.resourcemap.series similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series/peggym.resourcemap.series diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap.series b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap.series rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap.series/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap/peggym.resourcemap similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap/peggym.resourcemap diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap/peggym.resourcemap1-overlap similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap/peggym.resourcemap1-overlap diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap1-overlap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap1-overlap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap1-overlap/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated/peggym.resourcemap2-complicated similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated/peggym.resourcemap2-complicated diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2-complicated b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2-complicated rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-complicated/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap/peggym.resourcemap2-overlap similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap/peggym.resourcemap2-overlap diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2-overlap b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2-overlap rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2-overlap/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2/peggym.resourcemap2 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2/peggym.resourcemap2 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/peggym.resourcemap2 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/peggym.resourcemap2/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/tao.12930.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/SystemMetadata/tao.12930.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1 b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1/tao.12930.1 similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1 rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml210/tao.12930.1/tao.12930.1 diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/eml2.2.0testdatatable.xml similarity index 98% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/eml2.2.0testdatatable.xml index 9d960ae6..a3b78972 100644 --- a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable.xml +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/eml2.2.0testdatatable.xml @@ -27,6 +27,11 @@ This work is dedicated to the public domain under the Creative Commons Universal 1.0 Public Domain Dedication. To view a copy of this dedication, visit https://creativecommons.org/publicdomain/zero/1.0/. + + CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + https://spdx.org/licenses/CC0-1.0.html + CC0-1.0 + Bonanza River, Norton Sound, AK diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/systemmetadata.xml new file mode 100644 index 00000000..4b3d944c --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testdatatable/systemmetadata.xml @@ -0,0 +1,29 @@ + + + 1 + eml2.2.0testdatatable + https://eml.ecoinformatics.org/eml-2.2.0 + 20004 + 42e7983f865e9cf0a28834048cc303c6 + dataone_integration_test_user + dataone_integration_test_user + + + public + read + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2019-07-31T15:59:47.000 + 2019-07-31T15:59:47.000 + test_documents + test_documents + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/eml2.2.0testotherentity.xml similarity index 98% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/eml2.2.0testotherentity.xml index 2f51cc25..7172dad3 100644 --- a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity.xml +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/eml2.2.0testotherentity.xml @@ -27,6 +27,11 @@ This work is dedicated to the public domain under the Creative Commons Universal 1.0 Public Domain Dedication. To view a copy of this dedication, visit https://creativecommons.org/publicdomain/zero/1.0/. + + CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + https://spdx.org/licenses/CC0-1.0.html + CC0-1.0 + Bonanza River, Norton Sound, AK diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/systemmetadata.xml new file mode 100644 index 00000000..1cd27e08 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml2.2.0testotherentity/systemmetadata.xml @@ -0,0 +1,29 @@ + + + 1 + eml2.2.0testotherentity + https://eml.ecoinformatics.org/eml-2.2.0 + 20048 + 55c89e1e95543a4d49e3e9d85f4c94c7 + dataone_integration_test_user + dataone_integration_test_user + + + public + read + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2019-07-31T15:59:47.000 + 2019-07-31T15:59:47.000 + test_documents + test_documents + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta/eml220testdocscimeta.xml similarity index 93% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta/eml220testdocscimeta.xml index 5b05662f..ba5e632b 100644 --- a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta.xml +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta/eml220testdocscimeta.xml @@ -8,6 +8,11 @@ Annotator + + Creative Commons Attribution 4.0 International + https://spdx.org/licenses/CC-BY-4.0.html + CC-BY-4.0 + EML diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocsysmeta.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocsysmeta.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/eml220/eml220testdocscimeta/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns/csiro_d_abayadultprawns.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns/csiro_d_abayadultprawns.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawnsSysmeta.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawnsSysmeta.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/csiro_d_abayadultprawns/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/fgdc_scan/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/fgdc_scan/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.SystemMetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/fgdc_scan/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/68e96cf6-fb14-42aa-bbea-6da546ccb507-scan_201407_2172.SystemMetadata.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/fgdc/fgdc_scan/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full/ESIP-SOSO-v1.2.0-example-full.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full/ESIP-SOSO-v1.2.0-example-full.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full/systemmetadata.xml new file mode 100644 index 00000000..5a72fc35 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/ESIP-SOSO-v1.2.0-example-full/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + ESIP-SOSO-v1.2.0-example-full.jsonld + science-on-schema.org/Dataset;ld+json + 9194 + 78c03bb67cf1ffcb9f11d8ca77e58af2 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo/bco-dmo.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo/bco-dmo.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo/systemmetadata.xml new file mode 100644 index 00000000..24b0e84c --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/bco-dmo/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + bco-dmo.jsonld + science-on-schema.org/Dataset;ld+json + 26335 + 1a06dfa7e219fbab654e3431d72b7586 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab/context-http-vocab.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab/context-http-vocab.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab/systemmetadata.xml new file mode 100644 index 00000000..20fc4fb7 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-vocab/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + context-http-vocab.jsonld + science-on-schema.org/Dataset;ld+json + 581 + 7d1e95adf8b7acb526ca76c5e8acaeb1 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab/context-http-without-vocab.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab/context-http-without-vocab.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab/systemmetadata.xml new file mode 100644 index 00000000..e364a6a1 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http-without-vocab/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + context-http-without-vocab.jsonld + science-on-schema.org/Dataset;ld+json + 8814 + 530ac19fe5ccbe9d29e22373377a313a + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http/context-http.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http/context-http.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http/systemmetadata.xml new file mode 100644 index 00000000..66087874 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-http/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + context-http.jsonld + science-on-schema.org/Dataset;ld+json + 654 + 3f62e690e4303cad8fcf4bc541e35c19 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab/context-https-vocab.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab/context-https-vocab.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab/systemmetadata.xml new file mode 100644 index 00000000..17ece795 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https-vocab/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + context-https-vocab.jsonld + science-on-schema.org/Dataset;ld+json + 498 + + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https/context-https.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https/context-https.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https/systemmetadata.xml new file mode 100644 index 00000000..1305b055 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/context-https/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + context-https.jsonld + science-on-schema.org/Dataset;ld+json + 459 + 845c66f41823c32d908e1ffe55409ce0 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145/doi.org_10.5061_dryad.41sk145.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145/doi.org_10.5061_dryad.41sk145.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145/systemmetadata.xml new file mode 100644 index 00000000..785c5804 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.41sk145/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + doi.org_10.5061_dryad.41sk145.jsonld + science-on-schema.org/Dataset;ld+json + 4207 + 6342da96877035af46e120bb9b9e48d5 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78/doi.org_10.5061_dryad.5qb78.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78/doi.org_10.5061_dryad.5qb78.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78/systemmetadata.xml new file mode 100644 index 00000000..5fc2ebc4 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi.org_10.5061_dryad.5qb78/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + doi.org_10.5061_dryad.5qb78.jsonld + science-on-schema.org/Dataset;ld+json + 3528 + 8ecc5d5305919ad639f44328d71e7912 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36/doi_A10.5061_dryad.m8s2r36.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36/doi_A10.5061_dryad.m8s2r36.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36/systemmetadata.xml new file mode 100644 index 00000000..1644acaf --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/doi_A10.5061_dryad.m8s2r36/systemmetadata.xml @@ -0,0 +1,32 @@ + + + + 1 + doi_A10.5061_dryad.m8s2r36.jsonld + science-on-schema.org/Dataset;ld+json + 3032 + 206cceaf499a06f411e13f0987fbcaf9 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema.jsonld b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/hakai-deep-schema.jsonld similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema.jsonld rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/hakai-deep-schema.jsonld diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/systemmetadata.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/systemmetadata.xml new file mode 100644 index 00000000..d1c5eae5 --- /dev/null +++ b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/json-ld/hakai-deep-schema/systemmetadata.xml @@ -0,0 +1,26 @@ + + + 1 + hakai-deep-schema.jsonld + science-on-schema.org/Dataset;ld+json + 6562 + 2079757f007d6ed9c90442fcfe7ed130 + dataone_integration_test_user + dataone_integration_test_user + + + dataone_public_user + read + + + dataone_integration_test_user + write + + + + 2011-08-31T15:59:47.171874 + 2011-08-31T15:59:47.173344 + test_documents + test_documents + + diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal/portal.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal/portal.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portalsysmeta.xml b/src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal/systemmetadata.xml similarity index 100% rename from src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portalsysmeta.xml rename to src/test/resources/org/dataone/cn/index/resources/d1_testdocs/portal/portal/systemmetadata.xml diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/admin-extra.html b/src/test/resources/org/dataone/cn/index/resources/solr/conf/admin-extra.html deleted file mode 100644 index aa739da8..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/admin-extra.html +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-FoldToASCII.txt b/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-FoldToASCII.txt deleted file mode 100644 index 9a84b6ea..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-FoldToASCII.txt +++ /dev/null @@ -1,3813 +0,0 @@ -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT 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 map converts alphabetic, numeric, and symbolic Unicode characters -# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode -# block) into their ASCII equivalents, if one exists. -# -# Characters from the following Unicode blocks are converted; however, only -# those characters with reasonable ASCII alternatives are converted: -# -# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf -# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf -# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf -# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf -# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf -# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf -# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf -# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf -# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf -# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf -# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf -# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf -# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf -# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf -# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf -# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf -# -# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode -# -# The set of character conversions supported by this map is a superset of -# those supported by the map represented by mapping-ISOLatin1Accent.txt. -# -# See the bottom of this file for the Perl script used to generate the contents -# of this file (without this header) from ASCIIFoldingFilter.java. - - -# Syntax: -# "source" => "target" -# "source".length() > 0 (source cannot be empty.) -# "target".length() >= 0 (target can be empty.) - - -# À [LATIN CAPITAL LETTER A WITH GRAVE] -"\u00C0" => "A" - -# Á [LATIN CAPITAL LETTER A WITH ACUTE] -"\u00C1" => "A" - -#  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX] -"\u00C2" => "A" - -# à [LATIN CAPITAL LETTER A WITH TILDE] -"\u00C3" => "A" - -# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS] -"\u00C4" => "A" - -# Å [LATIN CAPITAL LETTER A WITH RING ABOVE] -"\u00C5" => "A" - -# Ā [LATIN CAPITAL LETTER A WITH MACRON] -"\u0100" => "A" - -# Ă [LATIN CAPITAL LETTER A WITH BREVE] -"\u0102" => "A" - -# Ą [LATIN CAPITAL LETTER A WITH OGONEK] -"\u0104" => "A" - -# Ə http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA] -"\u018F" => "A" - -# Ǎ [LATIN CAPITAL LETTER A WITH CARON] -"\u01CD" => "A" - -# Ǟ [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON] -"\u01DE" => "A" - -# Ǡ [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON] -"\u01E0" => "A" - -# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE] -"\u01FA" => "A" - -# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE] -"\u0200" => "A" - -# Ȃ [LATIN CAPITAL LETTER A WITH INVERTED BREVE] -"\u0202" => "A" - -# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE] -"\u0226" => "A" - -# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE] -"\u023A" => "A" - -# ᴀ [LATIN LETTER SMALL CAPITAL A] -"\u1D00" => "A" - -# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW] -"\u1E00" => "A" - -# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW] -"\u1EA0" => "A" - -# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE] -"\u1EA2" => "A" - -# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE] -"\u1EA4" => "A" - -# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE] -"\u1EA6" => "A" - -# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1EA8" => "A" - -# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE] -"\u1EAA" => "A" - -# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW] -"\u1EAC" => "A" - -# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE] -"\u1EAE" => "A" - -# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE] -"\u1EB0" => "A" - -# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE] -"\u1EB2" => "A" - -# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE] -"\u1EB4" => "A" - -# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW] -"\u1EB6" => "A" - -# Ⓐ [CIRCLED LATIN CAPITAL LETTER A] -"\u24B6" => "A" - -# A [FULLWIDTH LATIN CAPITAL LETTER A] -"\uFF21" => "A" - -# à [LATIN SMALL LETTER A WITH GRAVE] -"\u00E0" => "a" - -# á [LATIN SMALL LETTER A WITH ACUTE] -"\u00E1" => "a" - -# â [LATIN SMALL LETTER A WITH CIRCUMFLEX] -"\u00E2" => "a" - -# ã [LATIN SMALL LETTER A WITH TILDE] -"\u00E3" => "a" - -# ä [LATIN SMALL LETTER A WITH DIAERESIS] -"\u00E4" => "a" - -# å [LATIN SMALL LETTER A WITH RING ABOVE] -"\u00E5" => "a" - -# ā [LATIN SMALL LETTER A WITH MACRON] -"\u0101" => "a" - -# ă [LATIN SMALL LETTER A WITH BREVE] -"\u0103" => "a" - -# ą [LATIN SMALL LETTER A WITH OGONEK] -"\u0105" => "a" - -# ǎ [LATIN SMALL LETTER A WITH CARON] -"\u01CE" => "a" - -# ǟ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON] -"\u01DF" => "a" - -# ǡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON] -"\u01E1" => "a" - -# ǻ [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE] -"\u01FB" => "a" - -# ȁ [LATIN SMALL LETTER A WITH DOUBLE GRAVE] -"\u0201" => "a" - -# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE] -"\u0203" => "a" - -# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE] -"\u0227" => "a" - -# ɐ [LATIN SMALL LETTER TURNED A] -"\u0250" => "a" - -# ə [LATIN SMALL LETTER SCHWA] -"\u0259" => "a" - -# ɚ [LATIN SMALL LETTER SCHWA WITH HOOK] -"\u025A" => "a" - -# ᶏ [LATIN SMALL LETTER A WITH RETROFLEX HOOK] -"\u1D8F" => "a" - -# ᶕ [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK] -"\u1D95" => "a" - -# ạ [LATIN SMALL LETTER A WITH RING BELOW] -"\u1E01" => "a" - -# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING] -"\u1E9A" => "a" - -# ạ [LATIN SMALL LETTER A WITH DOT BELOW] -"\u1EA1" => "a" - -# ả [LATIN SMALL LETTER A WITH HOOK ABOVE] -"\u1EA3" => "a" - -# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE] -"\u1EA5" => "a" - -# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE] -"\u1EA7" => "a" - -# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1EA9" => "a" - -# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE] -"\u1EAB" => "a" - -# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW] -"\u1EAD" => "a" - -# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE] -"\u1EAF" => "a" - -# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE] -"\u1EB1" => "a" - -# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE] -"\u1EB3" => "a" - -# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE] -"\u1EB5" => "a" - -# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW] -"\u1EB7" => "a" - -# ₐ [LATIN SUBSCRIPT SMALL LETTER A] -"\u2090" => "a" - -# ₔ [LATIN SUBSCRIPT SMALL LETTER SCHWA] -"\u2094" => "a" - -# ⓐ [CIRCLED LATIN SMALL LETTER A] -"\u24D0" => "a" - -# ⱥ [LATIN SMALL LETTER A WITH STROKE] -"\u2C65" => "a" - -# Ɐ [LATIN CAPITAL LETTER TURNED A] -"\u2C6F" => "a" - -# a [FULLWIDTH LATIN SMALL LETTER A] -"\uFF41" => "a" - -# Ꜳ [LATIN CAPITAL LETTER AA] -"\uA732" => "AA" - -# Æ [LATIN CAPITAL LETTER AE] -"\u00C6" => "AE" - -# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON] -"\u01E2" => "AE" - -# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE] -"\u01FC" => "AE" - -# ᴁ [LATIN LETTER SMALL CAPITAL AE] -"\u1D01" => "AE" - -# Ꜵ [LATIN CAPITAL LETTER AO] -"\uA734" => "AO" - -# Ꜷ [LATIN CAPITAL LETTER AU] -"\uA736" => "AU" - -# Ꜹ [LATIN CAPITAL LETTER AV] -"\uA738" => "AV" - -# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR] -"\uA73A" => "AV" - -# Ꜽ [LATIN CAPITAL LETTER AY] -"\uA73C" => "AY" - -# ⒜ [PARENTHESIZED LATIN SMALL LETTER A] -"\u249C" => "(a)" - -# ꜳ [LATIN SMALL LETTER AA] -"\uA733" => "aa" - -# æ [LATIN SMALL LETTER AE] -"\u00E6" => "ae" - -# ǣ [LATIN SMALL LETTER AE WITH MACRON] -"\u01E3" => "ae" - -# ǽ [LATIN SMALL LETTER AE WITH ACUTE] -"\u01FD" => "ae" - -# ᴂ [LATIN SMALL LETTER TURNED AE] -"\u1D02" => "ae" - -# ꜵ [LATIN SMALL LETTER AO] -"\uA735" => "ao" - -# ꜷ [LATIN SMALL LETTER AU] -"\uA737" => "au" - -# ꜹ [LATIN SMALL LETTER AV] -"\uA739" => "av" - -# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR] -"\uA73B" => "av" - -# ꜽ [LATIN SMALL LETTER AY] -"\uA73D" => "ay" - -# Ɓ [LATIN CAPITAL LETTER B WITH HOOK] -"\u0181" => "B" - -# Ƃ [LATIN CAPITAL LETTER B WITH TOPBAR] -"\u0182" => "B" - -# Ƀ [LATIN CAPITAL LETTER B WITH STROKE] -"\u0243" => "B" - -# ʙ [LATIN LETTER SMALL CAPITAL B] -"\u0299" => "B" - -# ᴃ [LATIN LETTER SMALL CAPITAL BARRED B] -"\u1D03" => "B" - -# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE] -"\u1E02" => "B" - -# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW] -"\u1E04" => "B" - -# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW] -"\u1E06" => "B" - -# Ⓑ [CIRCLED LATIN CAPITAL LETTER B] -"\u24B7" => "B" - -# B [FULLWIDTH LATIN CAPITAL LETTER B] -"\uFF22" => "B" - -# ƀ [LATIN SMALL LETTER B WITH STROKE] -"\u0180" => "b" - -# ƃ [LATIN SMALL LETTER B WITH TOPBAR] -"\u0183" => "b" - -# ɓ [LATIN SMALL LETTER B WITH HOOK] -"\u0253" => "b" - -# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE] -"\u1D6C" => "b" - -# ᶀ [LATIN SMALL LETTER B WITH PALATAL HOOK] -"\u1D80" => "b" - -# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE] -"\u1E03" => "b" - -# ḅ [LATIN SMALL LETTER B WITH DOT BELOW] -"\u1E05" => "b" - -# ḇ [LATIN SMALL LETTER B WITH LINE BELOW] -"\u1E07" => "b" - -# ⓑ [CIRCLED LATIN SMALL LETTER B] -"\u24D1" => "b" - -# b [FULLWIDTH LATIN SMALL LETTER B] -"\uFF42" => "b" - -# ⒝ [PARENTHESIZED LATIN SMALL LETTER B] -"\u249D" => "(b)" - -# Ç [LATIN CAPITAL LETTER C WITH CEDILLA] -"\u00C7" => "C" - -# Ć [LATIN CAPITAL LETTER C WITH ACUTE] -"\u0106" => "C" - -# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX] -"\u0108" => "C" - -# Ċ [LATIN CAPITAL LETTER C WITH DOT ABOVE] -"\u010A" => "C" - -# Č [LATIN CAPITAL LETTER C WITH CARON] -"\u010C" => "C" - -# Ƈ [LATIN CAPITAL LETTER C WITH HOOK] -"\u0187" => "C" - -# Ȼ [LATIN CAPITAL LETTER C WITH STROKE] -"\u023B" => "C" - -# ʗ [LATIN LETTER STRETCHED C] -"\u0297" => "C" - -# ᴄ [LATIN LETTER SMALL CAPITAL C] -"\u1D04" => "C" - -# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE] -"\u1E08" => "C" - -# Ⓒ [CIRCLED LATIN CAPITAL LETTER C] -"\u24B8" => "C" - -# C [FULLWIDTH LATIN CAPITAL LETTER C] -"\uFF23" => "C" - -# ç [LATIN SMALL LETTER C WITH CEDILLA] -"\u00E7" => "c" - -# ć [LATIN SMALL LETTER C WITH ACUTE] -"\u0107" => "c" - -# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX] -"\u0109" => "c" - -# ċ [LATIN SMALL LETTER C WITH DOT ABOVE] -"\u010B" => "c" - -# č [LATIN SMALL LETTER C WITH CARON] -"\u010D" => "c" - -# ƈ [LATIN SMALL LETTER C WITH HOOK] -"\u0188" => "c" - -# ȼ [LATIN SMALL LETTER C WITH STROKE] -"\u023C" => "c" - -# ɕ [LATIN SMALL LETTER C WITH CURL] -"\u0255" => "c" - -# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE] -"\u1E09" => "c" - -# ↄ [LATIN SMALL LETTER REVERSED C] -"\u2184" => "c" - -# ⓒ [CIRCLED LATIN SMALL LETTER C] -"\u24D2" => "c" - -# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT] -"\uA73E" => "c" - -# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT] -"\uA73F" => "c" - -# c [FULLWIDTH LATIN SMALL LETTER C] -"\uFF43" => "c" - -# ⒞ [PARENTHESIZED LATIN SMALL LETTER C] -"\u249E" => "(c)" - -# Ð [LATIN CAPITAL LETTER ETH] -"\u00D0" => "D" - -# Ď [LATIN CAPITAL LETTER D WITH CARON] -"\u010E" => "D" - -# Đ [LATIN CAPITAL LETTER D WITH STROKE] -"\u0110" => "D" - -# Ɖ [LATIN CAPITAL LETTER AFRICAN D] -"\u0189" => "D" - -# Ɗ [LATIN CAPITAL LETTER D WITH HOOK] -"\u018A" => "D" - -# Ƌ [LATIN CAPITAL LETTER D WITH TOPBAR] -"\u018B" => "D" - -# ᴅ [LATIN LETTER SMALL CAPITAL D] -"\u1D05" => "D" - -# ᴆ [LATIN LETTER SMALL CAPITAL ETH] -"\u1D06" => "D" - -# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE] -"\u1E0A" => "D" - -# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW] -"\u1E0C" => "D" - -# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW] -"\u1E0E" => "D" - -# Ḑ [LATIN CAPITAL LETTER D WITH CEDILLA] -"\u1E10" => "D" - -# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW] -"\u1E12" => "D" - -# Ⓓ [CIRCLED LATIN CAPITAL LETTER D] -"\u24B9" => "D" - -# Ꝺ [LATIN CAPITAL LETTER INSULAR D] -"\uA779" => "D" - -# D [FULLWIDTH LATIN CAPITAL LETTER D] -"\uFF24" => "D" - -# ð [LATIN SMALL LETTER ETH] -"\u00F0" => "d" - -# ď [LATIN SMALL LETTER D WITH CARON] -"\u010F" => "d" - -# đ [LATIN SMALL LETTER D WITH STROKE] -"\u0111" => "d" - -# ƌ [LATIN SMALL LETTER D WITH TOPBAR] -"\u018C" => "d" - -# ȡ [LATIN SMALL LETTER D WITH CURL] -"\u0221" => "d" - -# ɖ [LATIN SMALL LETTER D WITH TAIL] -"\u0256" => "d" - -# ɗ [LATIN SMALL LETTER D WITH HOOK] -"\u0257" => "d" - -# ᵭ [LATIN SMALL LETTER D WITH MIDDLE TILDE] -"\u1D6D" => "d" - -# ᶁ [LATIN SMALL LETTER D WITH PALATAL HOOK] -"\u1D81" => "d" - -# ᶑ [LATIN SMALL LETTER D WITH HOOK AND TAIL] -"\u1D91" => "d" - -# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE] -"\u1E0B" => "d" - -# ḍ [LATIN SMALL LETTER D WITH DOT BELOW] -"\u1E0D" => "d" - -# ḏ [LATIN SMALL LETTER D WITH LINE BELOW] -"\u1E0F" => "d" - -# ḑ [LATIN SMALL LETTER D WITH CEDILLA] -"\u1E11" => "d" - -# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW] -"\u1E13" => "d" - -# ⓓ [CIRCLED LATIN SMALL LETTER D] -"\u24D3" => "d" - -# ꝺ [LATIN SMALL LETTER INSULAR D] -"\uA77A" => "d" - -# d [FULLWIDTH LATIN SMALL LETTER D] -"\uFF44" => "d" - -# DŽ [LATIN CAPITAL LETTER DZ WITH CARON] -"\u01C4" => "DZ" - -# DZ [LATIN CAPITAL LETTER DZ] -"\u01F1" => "DZ" - -# Dž [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON] -"\u01C5" => "Dz" - -# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z] -"\u01F2" => "Dz" - -# ⒟ [PARENTHESIZED LATIN SMALL LETTER D] -"\u249F" => "(d)" - -# ȸ [LATIN SMALL LETTER DB DIGRAPH] -"\u0238" => "db" - -# dž [LATIN SMALL LETTER DZ WITH CARON] -"\u01C6" => "dz" - -# dz [LATIN SMALL LETTER DZ] -"\u01F3" => "dz" - -# ʣ [LATIN SMALL LETTER DZ DIGRAPH] -"\u02A3" => "dz" - -# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL] -"\u02A5" => "dz" - -# È [LATIN CAPITAL LETTER E WITH GRAVE] -"\u00C8" => "E" - -# É [LATIN CAPITAL LETTER E WITH ACUTE] -"\u00C9" => "E" - -# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX] -"\u00CA" => "E" - -# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS] -"\u00CB" => "E" - -# Ē [LATIN CAPITAL LETTER E WITH MACRON] -"\u0112" => "E" - -# Ĕ [LATIN CAPITAL LETTER E WITH BREVE] -"\u0114" => "E" - -# Ė [LATIN CAPITAL LETTER E WITH DOT ABOVE] -"\u0116" => "E" - -# Ę [LATIN CAPITAL LETTER E WITH OGONEK] -"\u0118" => "E" - -# Ě [LATIN CAPITAL LETTER E WITH CARON] -"\u011A" => "E" - -# Ǝ [LATIN CAPITAL LETTER REVERSED E] -"\u018E" => "E" - -# Ɛ [LATIN CAPITAL LETTER OPEN E] -"\u0190" => "E" - -# Ȅ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE] -"\u0204" => "E" - -# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE] -"\u0206" => "E" - -# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA] -"\u0228" => "E" - -# Ɇ [LATIN CAPITAL LETTER E WITH STROKE] -"\u0246" => "E" - -# ᴇ [LATIN LETTER SMALL CAPITAL E] -"\u1D07" => "E" - -# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE] -"\u1E14" => "E" - -# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE] -"\u1E16" => "E" - -# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW] -"\u1E18" => "E" - -# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW] -"\u1E1A" => "E" - -# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE] -"\u1E1C" => "E" - -# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW] -"\u1EB8" => "E" - -# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE] -"\u1EBA" => "E" - -# Ẽ [LATIN CAPITAL LETTER E WITH TILDE] -"\u1EBC" => "E" - -# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE] -"\u1EBE" => "E" - -# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE] -"\u1EC0" => "E" - -# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1EC2" => "E" - -# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE] -"\u1EC4" => "E" - -# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW] -"\u1EC6" => "E" - -# Ⓔ [CIRCLED LATIN CAPITAL LETTER E] -"\u24BA" => "E" - -# ⱻ [LATIN LETTER SMALL CAPITAL TURNED E] -"\u2C7B" => "E" - -# E [FULLWIDTH LATIN CAPITAL LETTER E] -"\uFF25" => "E" - -# è [LATIN SMALL LETTER E WITH GRAVE] -"\u00E8" => "e" - -# é [LATIN SMALL LETTER E WITH ACUTE] -"\u00E9" => "e" - -# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX] -"\u00EA" => "e" - -# ë [LATIN SMALL LETTER E WITH DIAERESIS] -"\u00EB" => "e" - -# ē [LATIN SMALL LETTER E WITH MACRON] -"\u0113" => "e" - -# ĕ [LATIN SMALL LETTER E WITH BREVE] -"\u0115" => "e" - -# ė [LATIN SMALL LETTER E WITH DOT ABOVE] -"\u0117" => "e" - -# ę [LATIN SMALL LETTER E WITH OGONEK] -"\u0119" => "e" - -# ě [LATIN SMALL LETTER E WITH CARON] -"\u011B" => "e" - -# ǝ [LATIN SMALL LETTER TURNED E] -"\u01DD" => "e" - -# ȅ [LATIN SMALL LETTER E WITH DOUBLE GRAVE] -"\u0205" => "e" - -# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE] -"\u0207" => "e" - -# ȩ [LATIN SMALL LETTER E WITH CEDILLA] -"\u0229" => "e" - -# ɇ [LATIN SMALL LETTER E WITH STROKE] -"\u0247" => "e" - -# ɘ [LATIN SMALL LETTER REVERSED E] -"\u0258" => "e" - -# ɛ [LATIN SMALL LETTER OPEN E] -"\u025B" => "e" - -# ɜ [LATIN SMALL LETTER REVERSED OPEN E] -"\u025C" => "e" - -# ɝ [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK] -"\u025D" => "e" - -# ɞ [LATIN SMALL LETTER CLOSED REVERSED OPEN E] -"\u025E" => "e" - -# ʚ [LATIN SMALL LETTER CLOSED OPEN E] -"\u029A" => "e" - -# ᴈ [LATIN SMALL LETTER TURNED OPEN E] -"\u1D08" => "e" - -# ᶒ [LATIN SMALL LETTER E WITH RETROFLEX HOOK] -"\u1D92" => "e" - -# ᶓ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK] -"\u1D93" => "e" - -# ᶔ [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK] -"\u1D94" => "e" - -# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE] -"\u1E15" => "e" - -# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE] -"\u1E17" => "e" - -# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW] -"\u1E19" => "e" - -# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW] -"\u1E1B" => "e" - -# ḝ [LATIN SMALL LETTER E WITH CEDILLA AND BREVE] -"\u1E1D" => "e" - -# ẹ [LATIN SMALL LETTER E WITH DOT BELOW] -"\u1EB9" => "e" - -# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE] -"\u1EBB" => "e" - -# ẽ [LATIN SMALL LETTER E WITH TILDE] -"\u1EBD" => "e" - -# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE] -"\u1EBF" => "e" - -# ề [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE] -"\u1EC1" => "e" - -# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1EC3" => "e" - -# ễ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE] -"\u1EC5" => "e" - -# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW] -"\u1EC7" => "e" - -# ₑ [LATIN SUBSCRIPT SMALL LETTER E] -"\u2091" => "e" - -# ⓔ [CIRCLED LATIN SMALL LETTER E] -"\u24D4" => "e" - -# ⱸ [LATIN SMALL LETTER E WITH NOTCH] -"\u2C78" => "e" - -# e [FULLWIDTH LATIN SMALL LETTER E] -"\uFF45" => "e" - -# ⒠ [PARENTHESIZED LATIN SMALL LETTER E] -"\u24A0" => "(e)" - -# Ƒ [LATIN CAPITAL LETTER F WITH HOOK] -"\u0191" => "F" - -# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE] -"\u1E1E" => "F" - -# Ⓕ [CIRCLED LATIN CAPITAL LETTER F] -"\u24BB" => "F" - -# ꜰ [LATIN LETTER SMALL CAPITAL F] -"\uA730" => "F" - -# Ꝼ [LATIN CAPITAL LETTER INSULAR F] -"\uA77B" => "F" - -# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F] -"\uA7FB" => "F" - -# F [FULLWIDTH LATIN CAPITAL LETTER F] -"\uFF26" => "F" - -# ƒ [LATIN SMALL LETTER F WITH HOOK] -"\u0192" => "f" - -# ᵮ [LATIN SMALL LETTER F WITH MIDDLE TILDE] -"\u1D6E" => "f" - -# ᶂ [LATIN SMALL LETTER F WITH PALATAL HOOK] -"\u1D82" => "f" - -# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE] -"\u1E1F" => "f" - -# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE] -"\u1E9B" => "f" - -# ⓕ [CIRCLED LATIN SMALL LETTER F] -"\u24D5" => "f" - -# ꝼ [LATIN SMALL LETTER INSULAR F] -"\uA77C" => "f" - -# f [FULLWIDTH LATIN SMALL LETTER F] -"\uFF46" => "f" - -# ⒡ [PARENTHESIZED LATIN SMALL LETTER F] -"\u24A1" => "(f)" - -# ff [LATIN SMALL LIGATURE FF] -"\uFB00" => "ff" - -# ffi [LATIN SMALL LIGATURE FFI] -"\uFB03" => "ffi" - -# ffl [LATIN SMALL LIGATURE FFL] -"\uFB04" => "ffl" - -# fi [LATIN SMALL LIGATURE FI] -"\uFB01" => "fi" - -# fl [LATIN SMALL LIGATURE FL] -"\uFB02" => "fl" - -# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX] -"\u011C" => "G" - -# Ğ [LATIN CAPITAL LETTER G WITH BREVE] -"\u011E" => "G" - -# Ġ [LATIN CAPITAL LETTER G WITH DOT ABOVE] -"\u0120" => "G" - -# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA] -"\u0122" => "G" - -# Ɠ [LATIN CAPITAL LETTER G WITH HOOK] -"\u0193" => "G" - -# Ǥ [LATIN CAPITAL LETTER G WITH STROKE] -"\u01E4" => "G" - -# ǥ [LATIN SMALL LETTER G WITH STROKE] -"\u01E5" => "G" - -# Ǧ [LATIN CAPITAL LETTER G WITH CARON] -"\u01E6" => "G" - -# ǧ [LATIN SMALL LETTER G WITH CARON] -"\u01E7" => "G" - -# Ǵ [LATIN CAPITAL LETTER G WITH ACUTE] -"\u01F4" => "G" - -# ɢ [LATIN LETTER SMALL CAPITAL G] -"\u0262" => "G" - -# ʛ [LATIN LETTER SMALL CAPITAL G WITH HOOK] -"\u029B" => "G" - -# Ḡ [LATIN CAPITAL LETTER G WITH MACRON] -"\u1E20" => "G" - -# Ⓖ [CIRCLED LATIN CAPITAL LETTER G] -"\u24BC" => "G" - -# Ᵹ [LATIN CAPITAL LETTER INSULAR G] -"\uA77D" => "G" - -# Ꝿ [LATIN CAPITAL LETTER TURNED INSULAR G] -"\uA77E" => "G" - -# G [FULLWIDTH LATIN CAPITAL LETTER G] -"\uFF27" => "G" - -# ĝ [LATIN SMALL LETTER G WITH CIRCUMFLEX] -"\u011D" => "g" - -# ğ [LATIN SMALL LETTER G WITH BREVE] -"\u011F" => "g" - -# ġ [LATIN SMALL LETTER G WITH DOT ABOVE] -"\u0121" => "g" - -# ģ [LATIN SMALL LETTER G WITH CEDILLA] -"\u0123" => "g" - -# ǵ [LATIN SMALL LETTER G WITH ACUTE] -"\u01F5" => "g" - -# ɠ [LATIN SMALL LETTER G WITH HOOK] -"\u0260" => "g" - -# ɡ [LATIN SMALL LETTER SCRIPT G] -"\u0261" => "g" - -# ᵷ [LATIN SMALL LETTER TURNED G] -"\u1D77" => "g" - -# ᵹ [LATIN SMALL LETTER INSULAR G] -"\u1D79" => "g" - -# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK] -"\u1D83" => "g" - -# ḡ [LATIN SMALL LETTER G WITH MACRON] -"\u1E21" => "g" - -# ⓖ [CIRCLED LATIN SMALL LETTER G] -"\u24D6" => "g" - -# ꝿ [LATIN SMALL LETTER TURNED INSULAR G] -"\uA77F" => "g" - -# g [FULLWIDTH LATIN SMALL LETTER G] -"\uFF47" => "g" - -# ⒢ [PARENTHESIZED LATIN SMALL LETTER G] -"\u24A2" => "(g)" - -# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX] -"\u0124" => "H" - -# Ħ [LATIN CAPITAL LETTER H WITH STROKE] -"\u0126" => "H" - -# Ȟ [LATIN CAPITAL LETTER H WITH CARON] -"\u021E" => "H" - -# ʜ [LATIN LETTER SMALL CAPITAL H] -"\u029C" => "H" - -# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE] -"\u1E22" => "H" - -# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW] -"\u1E24" => "H" - -# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS] -"\u1E26" => "H" - -# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA] -"\u1E28" => "H" - -# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW] -"\u1E2A" => "H" - -# Ⓗ [CIRCLED LATIN CAPITAL LETTER H] -"\u24BD" => "H" - -# Ⱨ [LATIN CAPITAL LETTER H WITH DESCENDER] -"\u2C67" => "H" - -# Ⱶ [LATIN CAPITAL LETTER HALF H] -"\u2C75" => "H" - -# H [FULLWIDTH LATIN CAPITAL LETTER H] -"\uFF28" => "H" - -# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX] -"\u0125" => "h" - -# ħ [LATIN SMALL LETTER H WITH STROKE] -"\u0127" => "h" - -# ȟ [LATIN SMALL LETTER H WITH CARON] -"\u021F" => "h" - -# ɥ [LATIN SMALL LETTER TURNED H] -"\u0265" => "h" - -# ɦ [LATIN SMALL LETTER H WITH HOOK] -"\u0266" => "h" - -# ʮ [LATIN SMALL LETTER TURNED H WITH FISHHOOK] -"\u02AE" => "h" - -# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL] -"\u02AF" => "h" - -# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE] -"\u1E23" => "h" - -# ḥ [LATIN SMALL LETTER H WITH DOT BELOW] -"\u1E25" => "h" - -# ḧ [LATIN SMALL LETTER H WITH DIAERESIS] -"\u1E27" => "h" - -# ḩ [LATIN SMALL LETTER H WITH CEDILLA] -"\u1E29" => "h" - -# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW] -"\u1E2B" => "h" - -# ẖ [LATIN SMALL LETTER H WITH LINE BELOW] -"\u1E96" => "h" - -# ⓗ [CIRCLED LATIN SMALL LETTER H] -"\u24D7" => "h" - -# ⱨ [LATIN SMALL LETTER H WITH DESCENDER] -"\u2C68" => "h" - -# ⱶ [LATIN SMALL LETTER HALF H] -"\u2C76" => "h" - -# h [FULLWIDTH LATIN SMALL LETTER H] -"\uFF48" => "h" - -# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR] -"\u01F6" => "HV" - -# ⒣ [PARENTHESIZED LATIN SMALL LETTER H] -"\u24A3" => "(h)" - -# ƕ [LATIN SMALL LETTER HV] -"\u0195" => "hv" - -# Ì [LATIN CAPITAL LETTER I WITH GRAVE] -"\u00CC" => "I" - -# Í [LATIN CAPITAL LETTER I WITH ACUTE] -"\u00CD" => "I" - -# Î [LATIN CAPITAL LETTER I WITH CIRCUMFLEX] -"\u00CE" => "I" - -# Ï [LATIN CAPITAL LETTER I WITH DIAERESIS] -"\u00CF" => "I" - -# Ĩ [LATIN CAPITAL LETTER I WITH TILDE] -"\u0128" => "I" - -# Ī [LATIN CAPITAL LETTER I WITH MACRON] -"\u012A" => "I" - -# Ĭ [LATIN CAPITAL LETTER I WITH BREVE] -"\u012C" => "I" - -# Į [LATIN CAPITAL LETTER I WITH OGONEK] -"\u012E" => "I" - -# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE] -"\u0130" => "I" - -# Ɩ [LATIN CAPITAL LETTER IOTA] -"\u0196" => "I" - -# Ɨ [LATIN CAPITAL LETTER I WITH STROKE] -"\u0197" => "I" - -# Ǐ [LATIN CAPITAL LETTER I WITH CARON] -"\u01CF" => "I" - -# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE] -"\u0208" => "I" - -# Ȋ [LATIN CAPITAL LETTER I WITH INVERTED BREVE] -"\u020A" => "I" - -# ɪ [LATIN LETTER SMALL CAPITAL I] -"\u026A" => "I" - -# ᵻ [LATIN SMALL CAPITAL LETTER I WITH STROKE] -"\u1D7B" => "I" - -# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW] -"\u1E2C" => "I" - -# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE] -"\u1E2E" => "I" - -# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE] -"\u1EC8" => "I" - -# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW] -"\u1ECA" => "I" - -# Ⓘ [CIRCLED LATIN CAPITAL LETTER I] -"\u24BE" => "I" - -# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA] -"\uA7FE" => "I" - -# I [FULLWIDTH LATIN CAPITAL LETTER I] -"\uFF29" => "I" - -# ì [LATIN SMALL LETTER I WITH GRAVE] -"\u00EC" => "i" - -# í [LATIN SMALL LETTER I WITH ACUTE] -"\u00ED" => "i" - -# î [LATIN SMALL LETTER I WITH CIRCUMFLEX] -"\u00EE" => "i" - -# ï [LATIN SMALL LETTER I WITH DIAERESIS] -"\u00EF" => "i" - -# ĩ [LATIN SMALL LETTER I WITH TILDE] -"\u0129" => "i" - -# ī [LATIN SMALL LETTER I WITH MACRON] -"\u012B" => "i" - -# ĭ [LATIN SMALL LETTER I WITH BREVE] -"\u012D" => "i" - -# į [LATIN SMALL LETTER I WITH OGONEK] -"\u012F" => "i" - -# ı [LATIN SMALL LETTER DOTLESS I] -"\u0131" => "i" - -# ǐ [LATIN SMALL LETTER I WITH CARON] -"\u01D0" => "i" - -# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE] -"\u0209" => "i" - -# ȋ [LATIN SMALL LETTER I WITH INVERTED BREVE] -"\u020B" => "i" - -# ɨ [LATIN SMALL LETTER I WITH STROKE] -"\u0268" => "i" - -# ᴉ [LATIN SMALL LETTER TURNED I] -"\u1D09" => "i" - -# ᵢ [LATIN SUBSCRIPT SMALL LETTER I] -"\u1D62" => "i" - -# ᵼ [LATIN SMALL LETTER IOTA WITH STROKE] -"\u1D7C" => "i" - -# ᶖ [LATIN SMALL LETTER I WITH RETROFLEX HOOK] -"\u1D96" => "i" - -# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW] -"\u1E2D" => "i" - -# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE] -"\u1E2F" => "i" - -# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE] -"\u1EC9" => "i" - -# ị [LATIN SMALL LETTER I WITH DOT BELOW] -"\u1ECB" => "i" - -# ⁱ [SUPERSCRIPT LATIN SMALL LETTER I] -"\u2071" => "i" - -# ⓘ [CIRCLED LATIN SMALL LETTER I] -"\u24D8" => "i" - -# i [FULLWIDTH LATIN SMALL LETTER I] -"\uFF49" => "i" - -# IJ [LATIN CAPITAL LIGATURE IJ] -"\u0132" => "IJ" - -# ⒤ [PARENTHESIZED LATIN SMALL LETTER I] -"\u24A4" => "(i)" - -# ij [LATIN SMALL LIGATURE IJ] -"\u0133" => "ij" - -# Ĵ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX] -"\u0134" => "J" - -# Ɉ [LATIN CAPITAL LETTER J WITH STROKE] -"\u0248" => "J" - -# ᴊ [LATIN LETTER SMALL CAPITAL J] -"\u1D0A" => "J" - -# Ⓙ [CIRCLED LATIN CAPITAL LETTER J] -"\u24BF" => "J" - -# J [FULLWIDTH LATIN CAPITAL LETTER J] -"\uFF2A" => "J" - -# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX] -"\u0135" => "j" - -# ǰ [LATIN SMALL LETTER J WITH CARON] -"\u01F0" => "j" - -# ȷ [LATIN SMALL LETTER DOTLESS J] -"\u0237" => "j" - -# ɉ [LATIN SMALL LETTER J WITH STROKE] -"\u0249" => "j" - -# ɟ [LATIN SMALL LETTER DOTLESS J WITH STROKE] -"\u025F" => "j" - -# ʄ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK] -"\u0284" => "j" - -# ʝ [LATIN SMALL LETTER J WITH CROSSED-TAIL] -"\u029D" => "j" - -# ⓙ [CIRCLED LATIN SMALL LETTER J] -"\u24D9" => "j" - -# ⱼ [LATIN SUBSCRIPT SMALL LETTER J] -"\u2C7C" => "j" - -# j [FULLWIDTH LATIN SMALL LETTER J] -"\uFF4A" => "j" - -# ⒥ [PARENTHESIZED LATIN SMALL LETTER J] -"\u24A5" => "(j)" - -# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA] -"\u0136" => "K" - -# Ƙ [LATIN CAPITAL LETTER K WITH HOOK] -"\u0198" => "K" - -# Ǩ [LATIN CAPITAL LETTER K WITH CARON] -"\u01E8" => "K" - -# ᴋ [LATIN LETTER SMALL CAPITAL K] -"\u1D0B" => "K" - -# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE] -"\u1E30" => "K" - -# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW] -"\u1E32" => "K" - -# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW] -"\u1E34" => "K" - -# Ⓚ [CIRCLED LATIN CAPITAL LETTER K] -"\u24C0" => "K" - -# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER] -"\u2C69" => "K" - -# Ꝁ [LATIN CAPITAL LETTER K WITH STROKE] -"\uA740" => "K" - -# Ꝃ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE] -"\uA742" => "K" - -# Ꝅ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE] -"\uA744" => "K" - -# K [FULLWIDTH LATIN CAPITAL LETTER K] -"\uFF2B" => "K" - -# ķ [LATIN SMALL LETTER K WITH CEDILLA] -"\u0137" => "k" - -# ƙ [LATIN SMALL LETTER K WITH HOOK] -"\u0199" => "k" - -# ǩ [LATIN SMALL LETTER K WITH CARON] -"\u01E9" => "k" - -# ʞ [LATIN SMALL LETTER TURNED K] -"\u029E" => "k" - -# ᶄ [LATIN SMALL LETTER K WITH PALATAL HOOK] -"\u1D84" => "k" - -# ḱ [LATIN SMALL LETTER K WITH ACUTE] -"\u1E31" => "k" - -# ḳ [LATIN SMALL LETTER K WITH DOT BELOW] -"\u1E33" => "k" - -# ḵ [LATIN SMALL LETTER K WITH LINE BELOW] -"\u1E35" => "k" - -# ⓚ [CIRCLED LATIN SMALL LETTER K] -"\u24DA" => "k" - -# ⱪ [LATIN SMALL LETTER K WITH DESCENDER] -"\u2C6A" => "k" - -# ꝁ [LATIN SMALL LETTER K WITH STROKE] -"\uA741" => "k" - -# ꝃ [LATIN SMALL LETTER K WITH DIAGONAL STROKE] -"\uA743" => "k" - -# ꝅ [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE] -"\uA745" => "k" - -# k [FULLWIDTH LATIN SMALL LETTER K] -"\uFF4B" => "k" - -# ⒦ [PARENTHESIZED LATIN SMALL LETTER K] -"\u24A6" => "(k)" - -# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE] -"\u0139" => "L" - -# Ļ [LATIN CAPITAL LETTER L WITH CEDILLA] -"\u013B" => "L" - -# Ľ [LATIN CAPITAL LETTER L WITH CARON] -"\u013D" => "L" - -# Ŀ [LATIN CAPITAL LETTER L WITH MIDDLE DOT] -"\u013F" => "L" - -# Ł [LATIN CAPITAL LETTER L WITH STROKE] -"\u0141" => "L" - -# Ƚ [LATIN CAPITAL LETTER L WITH BAR] -"\u023D" => "L" - -# ʟ [LATIN LETTER SMALL CAPITAL L] -"\u029F" => "L" - -# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE] -"\u1D0C" => "L" - -# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW] -"\u1E36" => "L" - -# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON] -"\u1E38" => "L" - -# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW] -"\u1E3A" => "L" - -# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW] -"\u1E3C" => "L" - -# Ⓛ [CIRCLED LATIN CAPITAL LETTER L] -"\u24C1" => "L" - -# Ⱡ [LATIN CAPITAL LETTER L WITH DOUBLE BAR] -"\u2C60" => "L" - -# Ɫ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE] -"\u2C62" => "L" - -# Ꝇ [LATIN CAPITAL LETTER BROKEN L] -"\uA746" => "L" - -# Ꝉ [LATIN CAPITAL LETTER L WITH HIGH STROKE] -"\uA748" => "L" - -# Ꞁ [LATIN CAPITAL LETTER TURNED L] -"\uA780" => "L" - -# L [FULLWIDTH LATIN CAPITAL LETTER L] -"\uFF2C" => "L" - -# ĺ [LATIN SMALL LETTER L WITH ACUTE] -"\u013A" => "l" - -# ļ [LATIN SMALL LETTER L WITH CEDILLA] -"\u013C" => "l" - -# ľ [LATIN SMALL LETTER L WITH CARON] -"\u013E" => "l" - -# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT] -"\u0140" => "l" - -# ł [LATIN SMALL LETTER L WITH STROKE] -"\u0142" => "l" - -# ƚ [LATIN SMALL LETTER L WITH BAR] -"\u019A" => "l" - -# ȴ [LATIN SMALL LETTER L WITH CURL] -"\u0234" => "l" - -# ɫ [LATIN SMALL LETTER L WITH MIDDLE TILDE] -"\u026B" => "l" - -# ɬ [LATIN SMALL LETTER L WITH BELT] -"\u026C" => "l" - -# ɭ [LATIN SMALL LETTER L WITH RETROFLEX HOOK] -"\u026D" => "l" - -# ᶅ [LATIN SMALL LETTER L WITH PALATAL HOOK] -"\u1D85" => "l" - -# ḷ [LATIN SMALL LETTER L WITH DOT BELOW] -"\u1E37" => "l" - -# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON] -"\u1E39" => "l" - -# ḻ [LATIN SMALL LETTER L WITH LINE BELOW] -"\u1E3B" => "l" - -# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW] -"\u1E3D" => "l" - -# ⓛ [CIRCLED LATIN SMALL LETTER L] -"\u24DB" => "l" - -# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR] -"\u2C61" => "l" - -# ꝇ [LATIN SMALL LETTER BROKEN L] -"\uA747" => "l" - -# ꝉ [LATIN SMALL LETTER L WITH HIGH STROKE] -"\uA749" => "l" - -# ꞁ [LATIN SMALL LETTER TURNED L] -"\uA781" => "l" - -# l [FULLWIDTH LATIN SMALL LETTER L] -"\uFF4C" => "l" - -# LJ [LATIN CAPITAL LETTER LJ] -"\u01C7" => "LJ" - -# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL] -"\u1EFA" => "LL" - -# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J] -"\u01C8" => "Lj" - -# ⒧ [PARENTHESIZED LATIN SMALL LETTER L] -"\u24A7" => "(l)" - -# lj [LATIN SMALL LETTER LJ] -"\u01C9" => "lj" - -# ỻ [LATIN SMALL LETTER MIDDLE-WELSH LL] -"\u1EFB" => "ll" - -# ʪ [LATIN SMALL LETTER LS DIGRAPH] -"\u02AA" => "ls" - -# ʫ [LATIN SMALL LETTER LZ DIGRAPH] -"\u02AB" => "lz" - -# Ɯ [LATIN CAPITAL LETTER TURNED M] -"\u019C" => "M" - -# ᴍ [LATIN LETTER SMALL CAPITAL M] -"\u1D0D" => "M" - -# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE] -"\u1E3E" => "M" - -# Ṁ [LATIN CAPITAL LETTER M WITH DOT ABOVE] -"\u1E40" => "M" - -# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW] -"\u1E42" => "M" - -# Ⓜ [CIRCLED LATIN CAPITAL LETTER M] -"\u24C2" => "M" - -# Ɱ [LATIN CAPITAL LETTER M WITH HOOK] -"\u2C6E" => "M" - -# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M] -"\uA7FD" => "M" - -# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M] -"\uA7FF" => "M" - -# M [FULLWIDTH LATIN CAPITAL LETTER M] -"\uFF2D" => "M" - -# ɯ [LATIN SMALL LETTER TURNED M] -"\u026F" => "m" - -# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG] -"\u0270" => "m" - -# ɱ [LATIN SMALL LETTER M WITH HOOK] -"\u0271" => "m" - -# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE] -"\u1D6F" => "m" - -# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK] -"\u1D86" => "m" - -# ḿ [LATIN SMALL LETTER M WITH ACUTE] -"\u1E3F" => "m" - -# ṁ [LATIN SMALL LETTER M WITH DOT ABOVE] -"\u1E41" => "m" - -# ṃ [LATIN SMALL LETTER M WITH DOT BELOW] -"\u1E43" => "m" - -# ⓜ [CIRCLED LATIN SMALL LETTER M] -"\u24DC" => "m" - -# m [FULLWIDTH LATIN SMALL LETTER M] -"\uFF4D" => "m" - -# ⒨ [PARENTHESIZED LATIN SMALL LETTER M] -"\u24A8" => "(m)" - -# Ñ [LATIN CAPITAL LETTER N WITH TILDE] -"\u00D1" => "N" - -# Ń [LATIN CAPITAL LETTER N WITH ACUTE] -"\u0143" => "N" - -# Ņ [LATIN CAPITAL LETTER N WITH CEDILLA] -"\u0145" => "N" - -# Ň [LATIN CAPITAL LETTER N WITH CARON] -"\u0147" => "N" - -# Ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG] -"\u014A" => "N" - -# Ɲ [LATIN CAPITAL LETTER N WITH LEFT HOOK] -"\u019D" => "N" - -# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE] -"\u01F8" => "N" - -# Ƞ [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG] -"\u0220" => "N" - -# ɴ [LATIN LETTER SMALL CAPITAL N] -"\u0274" => "N" - -# ᴎ [LATIN LETTER SMALL CAPITAL REVERSED N] -"\u1D0E" => "N" - -# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE] -"\u1E44" => "N" - -# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW] -"\u1E46" => "N" - -# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW] -"\u1E48" => "N" - -# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW] -"\u1E4A" => "N" - -# Ⓝ [CIRCLED LATIN CAPITAL LETTER N] -"\u24C3" => "N" - -# N [FULLWIDTH LATIN CAPITAL LETTER N] -"\uFF2E" => "N" - -# ñ [LATIN SMALL LETTER N WITH TILDE] -"\u00F1" => "n" - -# ń [LATIN SMALL LETTER N WITH ACUTE] -"\u0144" => "n" - -# ņ [LATIN SMALL LETTER N WITH CEDILLA] -"\u0146" => "n" - -# ň [LATIN SMALL LETTER N WITH CARON] -"\u0148" => "n" - -# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE] -"\u0149" => "n" - -# ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG] -"\u014B" => "n" - -# ƞ [LATIN SMALL LETTER N WITH LONG RIGHT LEG] -"\u019E" => "n" - -# ǹ [LATIN SMALL LETTER N WITH GRAVE] -"\u01F9" => "n" - -# ȵ [LATIN SMALL LETTER N WITH CURL] -"\u0235" => "n" - -# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK] -"\u0272" => "n" - -# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK] -"\u0273" => "n" - -# ᵰ [LATIN SMALL LETTER N WITH MIDDLE TILDE] -"\u1D70" => "n" - -# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK] -"\u1D87" => "n" - -# ṅ [LATIN SMALL LETTER N WITH DOT ABOVE] -"\u1E45" => "n" - -# ṇ [LATIN SMALL LETTER N WITH DOT BELOW] -"\u1E47" => "n" - -# ṉ [LATIN SMALL LETTER N WITH LINE BELOW] -"\u1E49" => "n" - -# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW] -"\u1E4B" => "n" - -# ⁿ [SUPERSCRIPT LATIN SMALL LETTER N] -"\u207F" => "n" - -# ⓝ [CIRCLED LATIN SMALL LETTER N] -"\u24DD" => "n" - -# n [FULLWIDTH LATIN SMALL LETTER N] -"\uFF4E" => "n" - -# NJ [LATIN CAPITAL LETTER NJ] -"\u01CA" => "NJ" - -# Nj [LATIN CAPITAL LETTER N WITH SMALL LETTER J] -"\u01CB" => "Nj" - -# ⒩ [PARENTHESIZED LATIN SMALL LETTER N] -"\u24A9" => "(n)" - -# nj [LATIN SMALL LETTER NJ] -"\u01CC" => "nj" - -# Ò [LATIN CAPITAL LETTER O WITH GRAVE] -"\u00D2" => "O" - -# Ó [LATIN CAPITAL LETTER O WITH ACUTE] -"\u00D3" => "O" - -# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX] -"\u00D4" => "O" - -# Õ [LATIN CAPITAL LETTER O WITH TILDE] -"\u00D5" => "O" - -# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS] -"\u00D6" => "O" - -# Ø [LATIN CAPITAL LETTER O WITH STROKE] -"\u00D8" => "O" - -# Ō [LATIN CAPITAL LETTER O WITH MACRON] -"\u014C" => "O" - -# Ŏ [LATIN CAPITAL LETTER O WITH BREVE] -"\u014E" => "O" - -# Ő [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] -"\u0150" => "O" - -# Ɔ [LATIN CAPITAL LETTER OPEN O] -"\u0186" => "O" - -# Ɵ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE] -"\u019F" => "O" - -# Ơ [LATIN CAPITAL LETTER O WITH HORN] -"\u01A0" => "O" - -# Ǒ [LATIN CAPITAL LETTER O WITH CARON] -"\u01D1" => "O" - -# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK] -"\u01EA" => "O" - -# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON] -"\u01EC" => "O" - -# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE] -"\u01FE" => "O" - -# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE] -"\u020C" => "O" - -# Ȏ [LATIN CAPITAL LETTER O WITH INVERTED BREVE] -"\u020E" => "O" - -# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON] -"\u022A" => "O" - -# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON] -"\u022C" => "O" - -# Ȯ [LATIN CAPITAL LETTER O WITH DOT ABOVE] -"\u022E" => "O" - -# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON] -"\u0230" => "O" - -# ᴏ [LATIN LETTER SMALL CAPITAL O] -"\u1D0F" => "O" - -# ᴐ [LATIN LETTER SMALL CAPITAL OPEN O] -"\u1D10" => "O" - -# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE] -"\u1E4C" => "O" - -# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS] -"\u1E4E" => "O" - -# Ṑ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE] -"\u1E50" => "O" - -# Ṓ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE] -"\u1E52" => "O" - -# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW] -"\u1ECC" => "O" - -# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE] -"\u1ECE" => "O" - -# Ố [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE] -"\u1ED0" => "O" - -# Ồ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE] -"\u1ED2" => "O" - -# Ổ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1ED4" => "O" - -# Ỗ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE] -"\u1ED6" => "O" - -# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW] -"\u1ED8" => "O" - -# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE] -"\u1EDA" => "O" - -# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE] -"\u1EDC" => "O" - -# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE] -"\u1EDE" => "O" - -# Ỡ [LATIN CAPITAL LETTER O WITH HORN AND TILDE] -"\u1EE0" => "O" - -# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW] -"\u1EE2" => "O" - -# Ⓞ [CIRCLED LATIN CAPITAL LETTER O] -"\u24C4" => "O" - -# Ꝋ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY] -"\uA74A" => "O" - -# Ꝍ [LATIN CAPITAL LETTER O WITH LOOP] -"\uA74C" => "O" - -# O [FULLWIDTH LATIN CAPITAL LETTER O] -"\uFF2F" => "O" - -# ò [LATIN SMALL LETTER O WITH GRAVE] -"\u00F2" => "o" - -# ó [LATIN SMALL LETTER O WITH ACUTE] -"\u00F3" => "o" - -# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX] -"\u00F4" => "o" - -# õ [LATIN SMALL LETTER O WITH TILDE] -"\u00F5" => "o" - -# ö [LATIN SMALL LETTER O WITH DIAERESIS] -"\u00F6" => "o" - -# ø [LATIN SMALL LETTER O WITH STROKE] -"\u00F8" => "o" - -# ō [LATIN SMALL LETTER O WITH MACRON] -"\u014D" => "o" - -# ŏ [LATIN SMALL LETTER O WITH BREVE] -"\u014F" => "o" - -# ő [LATIN SMALL LETTER O WITH DOUBLE ACUTE] -"\u0151" => "o" - -# ơ [LATIN SMALL LETTER O WITH HORN] -"\u01A1" => "o" - -# ǒ [LATIN SMALL LETTER O WITH CARON] -"\u01D2" => "o" - -# ǫ [LATIN SMALL LETTER O WITH OGONEK] -"\u01EB" => "o" - -# ǭ [LATIN SMALL LETTER O WITH OGONEK AND MACRON] -"\u01ED" => "o" - -# ǿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE] -"\u01FF" => "o" - -# ȍ [LATIN SMALL LETTER O WITH DOUBLE GRAVE] -"\u020D" => "o" - -# ȏ [LATIN SMALL LETTER O WITH INVERTED BREVE] -"\u020F" => "o" - -# ȫ [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON] -"\u022B" => "o" - -# ȭ [LATIN SMALL LETTER O WITH TILDE AND MACRON] -"\u022D" => "o" - -# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE] -"\u022F" => "o" - -# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON] -"\u0231" => "o" - -# ɔ [LATIN SMALL LETTER OPEN O] -"\u0254" => "o" - -# ɵ [LATIN SMALL LETTER BARRED O] -"\u0275" => "o" - -# ᴖ [LATIN SMALL LETTER TOP HALF O] -"\u1D16" => "o" - -# ᴗ [LATIN SMALL LETTER BOTTOM HALF O] -"\u1D17" => "o" - -# ᶗ [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK] -"\u1D97" => "o" - -# ṍ [LATIN SMALL LETTER O WITH TILDE AND ACUTE] -"\u1E4D" => "o" - -# ṏ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS] -"\u1E4F" => "o" - -# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE] -"\u1E51" => "o" - -# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE] -"\u1E53" => "o" - -# ọ [LATIN SMALL LETTER O WITH DOT BELOW] -"\u1ECD" => "o" - -# ỏ [LATIN SMALL LETTER O WITH HOOK ABOVE] -"\u1ECF" => "o" - -# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE] -"\u1ED1" => "o" - -# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE] -"\u1ED3" => "o" - -# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] -"\u1ED5" => "o" - -# ỗ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE] -"\u1ED7" => "o" - -# ộ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW] -"\u1ED9" => "o" - -# ớ [LATIN SMALL LETTER O WITH HORN AND ACUTE] -"\u1EDB" => "o" - -# ờ [LATIN SMALL LETTER O WITH HORN AND GRAVE] -"\u1EDD" => "o" - -# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE] -"\u1EDF" => "o" - -# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE] -"\u1EE1" => "o" - -# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW] -"\u1EE3" => "o" - -# ₒ [LATIN SUBSCRIPT SMALL LETTER O] -"\u2092" => "o" - -# ⓞ [CIRCLED LATIN SMALL LETTER O] -"\u24DE" => "o" - -# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE] -"\u2C7A" => "o" - -# ꝋ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY] -"\uA74B" => "o" - -# ꝍ [LATIN SMALL LETTER O WITH LOOP] -"\uA74D" => "o" - -# o [FULLWIDTH LATIN SMALL LETTER O] -"\uFF4F" => "o" - -# Œ [LATIN CAPITAL LIGATURE OE] -"\u0152" => "OE" - -# ɶ [LATIN LETTER SMALL CAPITAL OE] -"\u0276" => "OE" - -# Ꝏ [LATIN CAPITAL LETTER OO] -"\uA74E" => "OO" - -# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU] -"\u0222" => "OU" - -# ᴕ [LATIN LETTER SMALL CAPITAL OU] -"\u1D15" => "OU" - -# ⒪ [PARENTHESIZED LATIN SMALL LETTER O] -"\u24AA" => "(o)" - -# œ [LATIN SMALL LIGATURE OE] -"\u0153" => "oe" - -# ᴔ [LATIN SMALL LETTER TURNED OE] -"\u1D14" => "oe" - -# ꝏ [LATIN SMALL LETTER OO] -"\uA74F" => "oo" - -# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU] -"\u0223" => "ou" - -# Ƥ [LATIN CAPITAL LETTER P WITH HOOK] -"\u01A4" => "P" - -# ᴘ [LATIN LETTER SMALL CAPITAL P] -"\u1D18" => "P" - -# Ṕ [LATIN CAPITAL LETTER P WITH ACUTE] -"\u1E54" => "P" - -# Ṗ [LATIN CAPITAL LETTER P WITH DOT ABOVE] -"\u1E56" => "P" - -# Ⓟ [CIRCLED LATIN CAPITAL LETTER P] -"\u24C5" => "P" - -# Ᵽ [LATIN CAPITAL LETTER P WITH STROKE] -"\u2C63" => "P" - -# Ꝑ [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER] -"\uA750" => "P" - -# Ꝓ [LATIN CAPITAL LETTER P WITH FLOURISH] -"\uA752" => "P" - -# Ꝕ [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL] -"\uA754" => "P" - -# P [FULLWIDTH LATIN CAPITAL LETTER P] -"\uFF30" => "P" - -# ƥ [LATIN SMALL LETTER P WITH HOOK] -"\u01A5" => "p" - -# ᵱ [LATIN SMALL LETTER P WITH MIDDLE TILDE] -"\u1D71" => "p" - -# ᵽ [LATIN SMALL LETTER P WITH STROKE] -"\u1D7D" => "p" - -# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK] -"\u1D88" => "p" - -# ṕ [LATIN SMALL LETTER P WITH ACUTE] -"\u1E55" => "p" - -# ṗ [LATIN SMALL LETTER P WITH DOT ABOVE] -"\u1E57" => "p" - -# ⓟ [CIRCLED LATIN SMALL LETTER P] -"\u24DF" => "p" - -# ꝑ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER] -"\uA751" => "p" - -# ꝓ [LATIN SMALL LETTER P WITH FLOURISH] -"\uA753" => "p" - -# ꝕ [LATIN SMALL LETTER P WITH SQUIRREL TAIL] -"\uA755" => "p" - -# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P] -"\uA7FC" => "p" - -# p [FULLWIDTH LATIN SMALL LETTER P] -"\uFF50" => "p" - -# ⒫ [PARENTHESIZED LATIN SMALL LETTER P] -"\u24AB" => "(p)" - -# Ɋ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL] -"\u024A" => "Q" - -# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q] -"\u24C6" => "Q" - -# Ꝗ [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER] -"\uA756" => "Q" - -# Ꝙ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE] -"\uA758" => "Q" - -# Q [FULLWIDTH LATIN CAPITAL LETTER Q] -"\uFF31" => "Q" - -# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA] -"\u0138" => "q" - -# ɋ [LATIN SMALL LETTER Q WITH HOOK TAIL] -"\u024B" => "q" - -# ʠ [LATIN SMALL LETTER Q WITH HOOK] -"\u02A0" => "q" - -# ⓠ [CIRCLED LATIN SMALL LETTER Q] -"\u24E0" => "q" - -# ꝗ [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER] -"\uA757" => "q" - -# ꝙ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE] -"\uA759" => "q" - -# q [FULLWIDTH LATIN SMALL LETTER Q] -"\uFF51" => "q" - -# ⒬ [PARENTHESIZED LATIN SMALL LETTER Q] -"\u24AC" => "(q)" - -# ȹ [LATIN SMALL LETTER QP DIGRAPH] -"\u0239" => "qp" - -# Ŕ [LATIN CAPITAL LETTER R WITH ACUTE] -"\u0154" => "R" - -# Ŗ [LATIN CAPITAL LETTER R WITH CEDILLA] -"\u0156" => "R" - -# Ř [LATIN CAPITAL LETTER R WITH CARON] -"\u0158" => "R" - -# Ȓ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE] -"\u0210" => "R" - -# Ȓ [LATIN CAPITAL LETTER R WITH INVERTED BREVE] -"\u0212" => "R" - -# Ɍ [LATIN CAPITAL LETTER R WITH STROKE] -"\u024C" => "R" - -# ʀ [LATIN LETTER SMALL CAPITAL R] -"\u0280" => "R" - -# ʁ [LATIN LETTER SMALL CAPITAL INVERTED R] -"\u0281" => "R" - -# ᴙ [LATIN LETTER SMALL CAPITAL REVERSED R] -"\u1D19" => "R" - -# ᴚ [LATIN LETTER SMALL CAPITAL TURNED R] -"\u1D1A" => "R" - -# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE] -"\u1E58" => "R" - -# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW] -"\u1E5A" => "R" - -# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON] -"\u1E5C" => "R" - -# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW] -"\u1E5E" => "R" - -# Ⓡ [CIRCLED LATIN CAPITAL LETTER R] -"\u24C7" => "R" - -# Ɽ [LATIN CAPITAL LETTER R WITH TAIL] -"\u2C64" => "R" - -# Ꝛ [LATIN CAPITAL LETTER R ROTUNDA] -"\uA75A" => "R" - -# Ꞃ [LATIN CAPITAL LETTER INSULAR R] -"\uA782" => "R" - -# R [FULLWIDTH LATIN CAPITAL LETTER R] -"\uFF32" => "R" - -# ŕ [LATIN SMALL LETTER R WITH ACUTE] -"\u0155" => "r" - -# ŗ [LATIN SMALL LETTER R WITH CEDILLA] -"\u0157" => "r" - -# ř [LATIN SMALL LETTER R WITH CARON] -"\u0159" => "r" - -# ȑ [LATIN SMALL LETTER R WITH DOUBLE GRAVE] -"\u0211" => "r" - -# ȓ [LATIN SMALL LETTER R WITH INVERTED BREVE] -"\u0213" => "r" - -# ɍ [LATIN SMALL LETTER R WITH STROKE] -"\u024D" => "r" - -# ɼ [LATIN SMALL LETTER R WITH LONG LEG] -"\u027C" => "r" - -# ɽ [LATIN SMALL LETTER R WITH TAIL] -"\u027D" => "r" - -# ɾ [LATIN SMALL LETTER R WITH FISHHOOK] -"\u027E" => "r" - -# ɿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK] -"\u027F" => "r" - -# ᵣ [LATIN SUBSCRIPT SMALL LETTER R] -"\u1D63" => "r" - -# ᵲ [LATIN SMALL LETTER R WITH MIDDLE TILDE] -"\u1D72" => "r" - -# ᵳ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE] -"\u1D73" => "r" - -# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK] -"\u1D89" => "r" - -# ṙ [LATIN SMALL LETTER R WITH DOT ABOVE] -"\u1E59" => "r" - -# ṛ [LATIN SMALL LETTER R WITH DOT BELOW] -"\u1E5B" => "r" - -# ṝ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON] -"\u1E5D" => "r" - -# ṟ [LATIN SMALL LETTER R WITH LINE BELOW] -"\u1E5F" => "r" - -# ⓡ [CIRCLED LATIN SMALL LETTER R] -"\u24E1" => "r" - -# ꝛ [LATIN SMALL LETTER R ROTUNDA] -"\uA75B" => "r" - -# ꞃ [LATIN SMALL LETTER INSULAR R] -"\uA783" => "r" - -# r [FULLWIDTH LATIN SMALL LETTER R] -"\uFF52" => "r" - -# ⒭ [PARENTHESIZED LATIN SMALL LETTER R] -"\u24AD" => "(r)" - -# Ś [LATIN CAPITAL LETTER S WITH ACUTE] -"\u015A" => "S" - -# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX] -"\u015C" => "S" - -# Ş [LATIN CAPITAL LETTER S WITH CEDILLA] -"\u015E" => "S" - -# Š [LATIN CAPITAL LETTER S WITH CARON] -"\u0160" => "S" - -# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW] -"\u0218" => "S" - -# Ṡ [LATIN CAPITAL LETTER S WITH DOT ABOVE] -"\u1E60" => "S" - -# Ṣ [LATIN CAPITAL LETTER S WITH DOT BELOW] -"\u1E62" => "S" - -# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE] -"\u1E64" => "S" - -# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE] -"\u1E66" => "S" - -# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE] -"\u1E68" => "S" - -# Ⓢ [CIRCLED LATIN CAPITAL LETTER S] -"\u24C8" => "S" - -# ꜱ [LATIN LETTER SMALL CAPITAL S] -"\uA731" => "S" - -# ꞅ [LATIN SMALL LETTER INSULAR S] -"\uA785" => "S" - -# S [FULLWIDTH LATIN CAPITAL LETTER S] -"\uFF33" => "S" - -# ś [LATIN SMALL LETTER S WITH ACUTE] -"\u015B" => "s" - -# ŝ [LATIN SMALL LETTER S WITH CIRCUMFLEX] -"\u015D" => "s" - -# ş [LATIN SMALL LETTER S WITH CEDILLA] -"\u015F" => "s" - -# š [LATIN SMALL LETTER S WITH CARON] -"\u0161" => "s" - -# ſ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S] -"\u017F" => "s" - -# ș [LATIN SMALL LETTER S WITH COMMA BELOW] -"\u0219" => "s" - -# ȿ [LATIN SMALL LETTER S WITH SWASH TAIL] -"\u023F" => "s" - -# ʂ [LATIN SMALL LETTER S WITH HOOK] -"\u0282" => "s" - -# ᵴ [LATIN SMALL LETTER S WITH MIDDLE TILDE] -"\u1D74" => "s" - -# ᶊ [LATIN SMALL LETTER S WITH PALATAL HOOK] -"\u1D8A" => "s" - -# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE] -"\u1E61" => "s" - -# ṣ [LATIN SMALL LETTER S WITH DOT BELOW] -"\u1E63" => "s" - -# ṥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE] -"\u1E65" => "s" - -# ṧ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE] -"\u1E67" => "s" - -# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE] -"\u1E69" => "s" - -# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE] -"\u1E9C" => "s" - -# ẝ [LATIN SMALL LETTER LONG S WITH HIGH STROKE] -"\u1E9D" => "s" - -# ⓢ [CIRCLED LATIN SMALL LETTER S] -"\u24E2" => "s" - -# Ꞅ [LATIN CAPITAL LETTER INSULAR S] -"\uA784" => "s" - -# s [FULLWIDTH LATIN SMALL LETTER S] -"\uFF53" => "s" - -# ẞ [LATIN CAPITAL LETTER SHARP S] -"\u1E9E" => "SS" - -# ⒮ [PARENTHESIZED LATIN SMALL LETTER S] -"\u24AE" => "(s)" - -# ß [LATIN SMALL LETTER SHARP S] -"\u00DF" => "ss" - -# st [LATIN SMALL LIGATURE ST] -"\uFB06" => "st" - -# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA] -"\u0162" => "T" - -# Ť [LATIN CAPITAL LETTER T WITH CARON] -"\u0164" => "T" - -# Ŧ [LATIN CAPITAL LETTER T WITH STROKE] -"\u0166" => "T" - -# Ƭ [LATIN CAPITAL LETTER T WITH HOOK] -"\u01AC" => "T" - -# Ʈ [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK] -"\u01AE" => "T" - -# Ț [LATIN CAPITAL LETTER T WITH COMMA BELOW] -"\u021A" => "T" - -# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE] -"\u023E" => "T" - -# ᴛ [LATIN LETTER SMALL CAPITAL T] -"\u1D1B" => "T" - -# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE] -"\u1E6A" => "T" - -# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW] -"\u1E6C" => "T" - -# Ṯ [LATIN CAPITAL LETTER T WITH LINE BELOW] -"\u1E6E" => "T" - -# Ṱ [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW] -"\u1E70" => "T" - -# Ⓣ [CIRCLED LATIN CAPITAL LETTER T] -"\u24C9" => "T" - -# Ꞇ [LATIN CAPITAL LETTER INSULAR T] -"\uA786" => "T" - -# T [FULLWIDTH LATIN CAPITAL LETTER T] -"\uFF34" => "T" - -# ţ [LATIN SMALL LETTER T WITH CEDILLA] -"\u0163" => "t" - -# ť [LATIN SMALL LETTER T WITH CARON] -"\u0165" => "t" - -# ŧ [LATIN SMALL LETTER T WITH STROKE] -"\u0167" => "t" - -# ƫ [LATIN SMALL LETTER T WITH PALATAL HOOK] -"\u01AB" => "t" - -# ƭ [LATIN SMALL LETTER T WITH HOOK] -"\u01AD" => "t" - -# ț [LATIN SMALL LETTER T WITH COMMA BELOW] -"\u021B" => "t" - -# ȶ [LATIN SMALL LETTER T WITH CURL] -"\u0236" => "t" - -# ʇ [LATIN SMALL LETTER TURNED T] -"\u0287" => "t" - -# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK] -"\u0288" => "t" - -# ᵵ [LATIN SMALL LETTER T WITH MIDDLE TILDE] -"\u1D75" => "t" - -# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE] -"\u1E6B" => "t" - -# ṭ [LATIN SMALL LETTER T WITH DOT BELOW] -"\u1E6D" => "t" - -# ṯ [LATIN SMALL LETTER T WITH LINE BELOW] -"\u1E6F" => "t" - -# ṱ [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW] -"\u1E71" => "t" - -# ẗ [LATIN SMALL LETTER T WITH DIAERESIS] -"\u1E97" => "t" - -# ⓣ [CIRCLED LATIN SMALL LETTER T] -"\u24E3" => "t" - -# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE] -"\u2C66" => "t" - -# t [FULLWIDTH LATIN SMALL LETTER T] -"\uFF54" => "t" - -# Þ [LATIN CAPITAL LETTER THORN] -"\u00DE" => "TH" - -# Ꝧ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER] -"\uA766" => "TH" - -# Ꜩ [LATIN CAPITAL LETTER TZ] -"\uA728" => "TZ" - -# ⒯ [PARENTHESIZED LATIN SMALL LETTER T] -"\u24AF" => "(t)" - -# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL] -"\u02A8" => "tc" - -# þ [LATIN SMALL LETTER THORN] -"\u00FE" => "th" - -# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH] -"\u1D7A" => "th" - -# ꝧ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER] -"\uA767" => "th" - -# ʦ [LATIN SMALL LETTER TS DIGRAPH] -"\u02A6" => "ts" - -# ꜩ [LATIN SMALL LETTER TZ] -"\uA729" => "tz" - -# Ù [LATIN CAPITAL LETTER U WITH GRAVE] -"\u00D9" => "U" - -# Ú [LATIN CAPITAL LETTER U WITH ACUTE] -"\u00DA" => "U" - -# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX] -"\u00DB" => "U" - -# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS] -"\u00DC" => "U" - -# Ũ [LATIN CAPITAL LETTER U WITH TILDE] -"\u0168" => "U" - -# Ū [LATIN CAPITAL LETTER U WITH MACRON] -"\u016A" => "U" - -# Ŭ [LATIN CAPITAL LETTER U WITH BREVE] -"\u016C" => "U" - -# Ů [LATIN CAPITAL LETTER U WITH RING ABOVE] -"\u016E" => "U" - -# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] -"\u0170" => "U" - -# Ų [LATIN CAPITAL LETTER U WITH OGONEK] -"\u0172" => "U" - -# Ư [LATIN CAPITAL LETTER U WITH HORN] -"\u01AF" => "U" - -# Ǔ [LATIN CAPITAL LETTER U WITH CARON] -"\u01D3" => "U" - -# Ǖ [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON] -"\u01D5" => "U" - -# Ǘ [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE] -"\u01D7" => "U" - -# Ǚ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON] -"\u01D9" => "U" - -# Ǜ [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE] -"\u01DB" => "U" - -# Ȕ [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE] -"\u0214" => "U" - -# Ȗ [LATIN CAPITAL LETTER U WITH INVERTED BREVE] -"\u0216" => "U" - -# Ʉ [LATIN CAPITAL LETTER U BAR] -"\u0244" => "U" - -# ᴜ [LATIN LETTER SMALL CAPITAL U] -"\u1D1C" => "U" - -# ᵾ [LATIN SMALL CAPITAL LETTER U WITH STROKE] -"\u1D7E" => "U" - -# Ṳ [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW] -"\u1E72" => "U" - -# Ṵ [LATIN CAPITAL LETTER U WITH TILDE BELOW] -"\u1E74" => "U" - -# Ṷ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW] -"\u1E76" => "U" - -# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE] -"\u1E78" => "U" - -# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS] -"\u1E7A" => "U" - -# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW] -"\u1EE4" => "U" - -# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE] -"\u1EE6" => "U" - -# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE] -"\u1EE8" => "U" - -# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE] -"\u1EEA" => "U" - -# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE] -"\u1EEC" => "U" - -# Ữ [LATIN CAPITAL LETTER U WITH HORN AND TILDE] -"\u1EEE" => "U" - -# Ự [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW] -"\u1EF0" => "U" - -# Ⓤ [CIRCLED LATIN CAPITAL LETTER U] -"\u24CA" => "U" - -# U [FULLWIDTH LATIN CAPITAL LETTER U] -"\uFF35" => "U" - -# ù [LATIN SMALL LETTER U WITH GRAVE] -"\u00F9" => "u" - -# ú [LATIN SMALL LETTER U WITH ACUTE] -"\u00FA" => "u" - -# û [LATIN SMALL LETTER U WITH CIRCUMFLEX] -"\u00FB" => "u" - -# ü [LATIN SMALL LETTER U WITH DIAERESIS] -"\u00FC" => "u" - -# ũ [LATIN SMALL LETTER U WITH TILDE] -"\u0169" => "u" - -# ū [LATIN SMALL LETTER U WITH MACRON] -"\u016B" => "u" - -# ŭ [LATIN SMALL LETTER U WITH BREVE] -"\u016D" => "u" - -# ů [LATIN SMALL LETTER U WITH RING ABOVE] -"\u016F" => "u" - -# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE] -"\u0171" => "u" - -# ų [LATIN SMALL LETTER U WITH OGONEK] -"\u0173" => "u" - -# ư [LATIN SMALL LETTER U WITH HORN] -"\u01B0" => "u" - -# ǔ [LATIN SMALL LETTER U WITH CARON] -"\u01D4" => "u" - -# ǖ [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON] -"\u01D6" => "u" - -# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE] -"\u01D8" => "u" - -# ǚ [LATIN SMALL LETTER U WITH DIAERESIS AND CARON] -"\u01DA" => "u" - -# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE] -"\u01DC" => "u" - -# ȕ [LATIN SMALL LETTER U WITH DOUBLE GRAVE] -"\u0215" => "u" - -# ȗ [LATIN SMALL LETTER U WITH INVERTED BREVE] -"\u0217" => "u" - -# ʉ [LATIN SMALL LETTER U BAR] -"\u0289" => "u" - -# ᵤ [LATIN SUBSCRIPT SMALL LETTER U] -"\u1D64" => "u" - -# ᶙ [LATIN SMALL LETTER U WITH RETROFLEX HOOK] -"\u1D99" => "u" - -# ṳ [LATIN SMALL LETTER U WITH DIAERESIS BELOW] -"\u1E73" => "u" - -# ṵ [LATIN SMALL LETTER U WITH TILDE BELOW] -"\u1E75" => "u" - -# ṷ [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW] -"\u1E77" => "u" - -# ṹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE] -"\u1E79" => "u" - -# ṻ [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS] -"\u1E7B" => "u" - -# ụ [LATIN SMALL LETTER U WITH DOT BELOW] -"\u1EE5" => "u" - -# ủ [LATIN SMALL LETTER U WITH HOOK ABOVE] -"\u1EE7" => "u" - -# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE] -"\u1EE9" => "u" - -# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE] -"\u1EEB" => "u" - -# ử [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE] -"\u1EED" => "u" - -# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE] -"\u1EEF" => "u" - -# ự [LATIN SMALL LETTER U WITH HORN AND DOT BELOW] -"\u1EF1" => "u" - -# ⓤ [CIRCLED LATIN SMALL LETTER U] -"\u24E4" => "u" - -# u [FULLWIDTH LATIN SMALL LETTER U] -"\uFF55" => "u" - -# ⒰ [PARENTHESIZED LATIN SMALL LETTER U] -"\u24B0" => "(u)" - -# ᵫ [LATIN SMALL LETTER UE] -"\u1D6B" => "ue" - -# Ʋ [LATIN CAPITAL LETTER V WITH HOOK] -"\u01B2" => "V" - -# Ʌ [LATIN CAPITAL LETTER TURNED V] -"\u0245" => "V" - -# ᴠ [LATIN LETTER SMALL CAPITAL V] -"\u1D20" => "V" - -# Ṽ [LATIN CAPITAL LETTER V WITH TILDE] -"\u1E7C" => "V" - -# Ṿ [LATIN CAPITAL LETTER V WITH DOT BELOW] -"\u1E7E" => "V" - -# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V] -"\u1EFC" => "V" - -# Ⓥ [CIRCLED LATIN CAPITAL LETTER V] -"\u24CB" => "V" - -# Ꝟ [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE] -"\uA75E" => "V" - -# Ꝩ [LATIN CAPITAL LETTER VEND] -"\uA768" => "V" - -# V [FULLWIDTH LATIN CAPITAL LETTER V] -"\uFF36" => "V" - -# ʋ [LATIN SMALL LETTER V WITH HOOK] -"\u028B" => "v" - -# ʌ [LATIN SMALL LETTER TURNED V] -"\u028C" => "v" - -# ᵥ [LATIN SUBSCRIPT SMALL LETTER V] -"\u1D65" => "v" - -# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK] -"\u1D8C" => "v" - -# ṽ [LATIN SMALL LETTER V WITH TILDE] -"\u1E7D" => "v" - -# ṿ [LATIN SMALL LETTER V WITH DOT BELOW] -"\u1E7F" => "v" - -# ⓥ [CIRCLED LATIN SMALL LETTER V] -"\u24E5" => "v" - -# ⱱ [LATIN SMALL LETTER V WITH RIGHT HOOK] -"\u2C71" => "v" - -# ⱴ [LATIN SMALL LETTER V WITH CURL] -"\u2C74" => "v" - -# ꝟ [LATIN SMALL LETTER V WITH DIAGONAL STROKE] -"\uA75F" => "v" - -# v [FULLWIDTH LATIN SMALL LETTER V] -"\uFF56" => "v" - -# Ꝡ [LATIN CAPITAL LETTER VY] -"\uA760" => "VY" - -# ⒱ [PARENTHESIZED LATIN SMALL LETTER V] -"\u24B1" => "(v)" - -# ꝡ [LATIN SMALL LETTER VY] -"\uA761" => "vy" - -# Ŵ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX] -"\u0174" => "W" - -# Ƿ http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN] -"\u01F7" => "W" - -# ᴡ [LATIN LETTER SMALL CAPITAL W] -"\u1D21" => "W" - -# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE] -"\u1E80" => "W" - -# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE] -"\u1E82" => "W" - -# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS] -"\u1E84" => "W" - -# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE] -"\u1E86" => "W" - -# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW] -"\u1E88" => "W" - -# Ⓦ [CIRCLED LATIN CAPITAL LETTER W] -"\u24CC" => "W" - -# Ⱳ [LATIN CAPITAL LETTER W WITH HOOK] -"\u2C72" => "W" - -# W [FULLWIDTH LATIN CAPITAL LETTER W] -"\uFF37" => "W" - -# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX] -"\u0175" => "w" - -# ƿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN] -"\u01BF" => "w" - -# ʍ [LATIN SMALL LETTER TURNED W] -"\u028D" => "w" - -# ẁ [LATIN SMALL LETTER W WITH GRAVE] -"\u1E81" => "w" - -# ẃ [LATIN SMALL LETTER W WITH ACUTE] -"\u1E83" => "w" - -# ẅ [LATIN SMALL LETTER W WITH DIAERESIS] -"\u1E85" => "w" - -# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE] -"\u1E87" => "w" - -# ẉ [LATIN SMALL LETTER W WITH DOT BELOW] -"\u1E89" => "w" - -# ẘ [LATIN SMALL LETTER W WITH RING ABOVE] -"\u1E98" => "w" - -# ⓦ [CIRCLED LATIN SMALL LETTER W] -"\u24E6" => "w" - -# ⱳ [LATIN SMALL LETTER W WITH HOOK] -"\u2C73" => "w" - -# w [FULLWIDTH LATIN SMALL LETTER W] -"\uFF57" => "w" - -# ⒲ [PARENTHESIZED LATIN SMALL LETTER W] -"\u24B2" => "(w)" - -# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE] -"\u1E8A" => "X" - -# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS] -"\u1E8C" => "X" - -# Ⓧ [CIRCLED LATIN CAPITAL LETTER X] -"\u24CD" => "X" - -# X [FULLWIDTH LATIN CAPITAL LETTER X] -"\uFF38" => "X" - -# ᶍ [LATIN SMALL LETTER X WITH PALATAL HOOK] -"\u1D8D" => "x" - -# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE] -"\u1E8B" => "x" - -# ẍ [LATIN SMALL LETTER X WITH DIAERESIS] -"\u1E8D" => "x" - -# ₓ [LATIN SUBSCRIPT SMALL LETTER X] -"\u2093" => "x" - -# ⓧ [CIRCLED LATIN SMALL LETTER X] -"\u24E7" => "x" - -# x [FULLWIDTH LATIN SMALL LETTER X] -"\uFF58" => "x" - -# ⒳ [PARENTHESIZED LATIN SMALL LETTER X] -"\u24B3" => "(x)" - -# Ý [LATIN CAPITAL LETTER Y WITH ACUTE] -"\u00DD" => "Y" - -# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX] -"\u0176" => "Y" - -# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS] -"\u0178" => "Y" - -# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK] -"\u01B3" => "Y" - -# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON] -"\u0232" => "Y" - -# Ɏ [LATIN CAPITAL LETTER Y WITH STROKE] -"\u024E" => "Y" - -# ʏ [LATIN LETTER SMALL CAPITAL Y] -"\u028F" => "Y" - -# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE] -"\u1E8E" => "Y" - -# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE] -"\u1EF2" => "Y" - -# Ỵ [LATIN CAPITAL LETTER Y WITH DOT BELOW] -"\u1EF4" => "Y" - -# Ỷ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE] -"\u1EF6" => "Y" - -# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE] -"\u1EF8" => "Y" - -# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP] -"\u1EFE" => "Y" - -# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y] -"\u24CE" => "Y" - -# Y [FULLWIDTH LATIN CAPITAL LETTER Y] -"\uFF39" => "Y" - -# ý [LATIN SMALL LETTER Y WITH ACUTE] -"\u00FD" => "y" - -# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS] -"\u00FF" => "y" - -# ŷ [LATIN SMALL LETTER Y WITH CIRCUMFLEX] -"\u0177" => "y" - -# ƴ [LATIN SMALL LETTER Y WITH HOOK] -"\u01B4" => "y" - -# ȳ [LATIN SMALL LETTER Y WITH MACRON] -"\u0233" => "y" - -# ɏ [LATIN SMALL LETTER Y WITH STROKE] -"\u024F" => "y" - -# ʎ [LATIN SMALL LETTER TURNED Y] -"\u028E" => "y" - -# ẏ [LATIN SMALL LETTER Y WITH DOT ABOVE] -"\u1E8F" => "y" - -# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE] -"\u1E99" => "y" - -# ỳ [LATIN SMALL LETTER Y WITH GRAVE] -"\u1EF3" => "y" - -# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW] -"\u1EF5" => "y" - -# ỷ [LATIN SMALL LETTER Y WITH HOOK ABOVE] -"\u1EF7" => "y" - -# ỹ [LATIN SMALL LETTER Y WITH TILDE] -"\u1EF9" => "y" - -# ỿ [LATIN SMALL LETTER Y WITH LOOP] -"\u1EFF" => "y" - -# ⓨ [CIRCLED LATIN SMALL LETTER Y] -"\u24E8" => "y" - -# y [FULLWIDTH LATIN SMALL LETTER Y] -"\uFF59" => "y" - -# ⒴ [PARENTHESIZED LATIN SMALL LETTER Y] -"\u24B4" => "(y)" - -# Ź [LATIN CAPITAL LETTER Z WITH ACUTE] -"\u0179" => "Z" - -# Ż [LATIN CAPITAL LETTER Z WITH DOT ABOVE] -"\u017B" => "Z" - -# Ž [LATIN CAPITAL LETTER Z WITH CARON] -"\u017D" => "Z" - -# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE] -"\u01B5" => "Z" - -# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH] -"\u021C" => "Z" - -# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK] -"\u0224" => "Z" - -# ᴢ [LATIN LETTER SMALL CAPITAL Z] -"\u1D22" => "Z" - -# Ẑ [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX] -"\u1E90" => "Z" - -# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW] -"\u1E92" => "Z" - -# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW] -"\u1E94" => "Z" - -# Ⓩ [CIRCLED LATIN CAPITAL LETTER Z] -"\u24CF" => "Z" - -# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER] -"\u2C6B" => "Z" - -# Ꝣ [LATIN CAPITAL LETTER VISIGOTHIC Z] -"\uA762" => "Z" - -# Z [FULLWIDTH LATIN CAPITAL LETTER Z] -"\uFF3A" => "Z" - -# ź [LATIN SMALL LETTER Z WITH ACUTE] -"\u017A" => "z" - -# ż [LATIN SMALL LETTER Z WITH DOT ABOVE] -"\u017C" => "z" - -# ž [LATIN SMALL LETTER Z WITH CARON] -"\u017E" => "z" - -# ƶ [LATIN SMALL LETTER Z WITH STROKE] -"\u01B6" => "z" - -# ȝ http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH] -"\u021D" => "z" - -# ȥ [LATIN SMALL LETTER Z WITH HOOK] -"\u0225" => "z" - -# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL] -"\u0240" => "z" - -# ʐ [LATIN SMALL LETTER Z WITH RETROFLEX HOOK] -"\u0290" => "z" - -# ʑ [LATIN SMALL LETTER Z WITH CURL] -"\u0291" => "z" - -# ᵶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE] -"\u1D76" => "z" - -# ᶎ [LATIN SMALL LETTER Z WITH PALATAL HOOK] -"\u1D8E" => "z" - -# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX] -"\u1E91" => "z" - -# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW] -"\u1E93" => "z" - -# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW] -"\u1E95" => "z" - -# ⓩ [CIRCLED LATIN SMALL LETTER Z] -"\u24E9" => "z" - -# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER] -"\u2C6C" => "z" - -# ꝣ [LATIN SMALL LETTER VISIGOTHIC Z] -"\uA763" => "z" - -# z [FULLWIDTH LATIN SMALL LETTER Z] -"\uFF5A" => "z" - -# ⒵ [PARENTHESIZED LATIN SMALL LETTER Z] -"\u24B5" => "(z)" - -# ⁰ [SUPERSCRIPT ZERO] -"\u2070" => "0" - -# ₀ [SUBSCRIPT ZERO] -"\u2080" => "0" - -# ⓪ [CIRCLED DIGIT ZERO] -"\u24EA" => "0" - -# ⓿ [NEGATIVE CIRCLED DIGIT ZERO] -"\u24FF" => "0" - -# 0 [FULLWIDTH DIGIT ZERO] -"\uFF10" => "0" - -# ¹ [SUPERSCRIPT ONE] -"\u00B9" => "1" - -# ₁ [SUBSCRIPT ONE] -"\u2081" => "1" - -# ① [CIRCLED DIGIT ONE] -"\u2460" => "1" - -# ⓵ [DOUBLE CIRCLED DIGIT ONE] -"\u24F5" => "1" - -# ❶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE] -"\u2776" => "1" - -# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE] -"\u2780" => "1" - -# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE] -"\u278A" => "1" - -# 1 [FULLWIDTH DIGIT ONE] -"\uFF11" => "1" - -# ⒈ [DIGIT ONE FULL STOP] -"\u2488" => "1." - -# ⑴ [PARENTHESIZED DIGIT ONE] -"\u2474" => "(1)" - -# ² [SUPERSCRIPT TWO] -"\u00B2" => "2" - -# ₂ [SUBSCRIPT TWO] -"\u2082" => "2" - -# ② [CIRCLED DIGIT TWO] -"\u2461" => "2" - -# ⓶ [DOUBLE CIRCLED DIGIT TWO] -"\u24F6" => "2" - -# ❷ [DINGBAT NEGATIVE CIRCLED DIGIT TWO] -"\u2777" => "2" - -# ➁ [DINGBAT CIRCLED SANS-SERIF DIGIT TWO] -"\u2781" => "2" - -# ➋ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO] -"\u278B" => "2" - -# 2 [FULLWIDTH DIGIT TWO] -"\uFF12" => "2" - -# ⒉ [DIGIT TWO FULL STOP] -"\u2489" => "2." - -# ⑵ [PARENTHESIZED DIGIT TWO] -"\u2475" => "(2)" - -# ³ [SUPERSCRIPT THREE] -"\u00B3" => "3" - -# ₃ [SUBSCRIPT THREE] -"\u2083" => "3" - -# ③ [CIRCLED DIGIT THREE] -"\u2462" => "3" - -# ⓷ [DOUBLE CIRCLED DIGIT THREE] -"\u24F7" => "3" - -# ❸ [DINGBAT NEGATIVE CIRCLED DIGIT THREE] -"\u2778" => "3" - -# ➂ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE] -"\u2782" => "3" - -# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE] -"\u278C" => "3" - -# 3 [FULLWIDTH DIGIT THREE] -"\uFF13" => "3" - -# ⒊ [DIGIT THREE FULL STOP] -"\u248A" => "3." - -# ⑶ [PARENTHESIZED DIGIT THREE] -"\u2476" => "(3)" - -# ⁴ [SUPERSCRIPT FOUR] -"\u2074" => "4" - -# ₄ [SUBSCRIPT FOUR] -"\u2084" => "4" - -# ④ [CIRCLED DIGIT FOUR] -"\u2463" => "4" - -# ⓸ [DOUBLE CIRCLED DIGIT FOUR] -"\u24F8" => "4" - -# ❹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR] -"\u2779" => "4" - -# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR] -"\u2783" => "4" - -# ➍ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR] -"\u278D" => "4" - -# 4 [FULLWIDTH DIGIT FOUR] -"\uFF14" => "4" - -# ⒋ [DIGIT FOUR FULL STOP] -"\u248B" => "4." - -# ⑷ [PARENTHESIZED DIGIT FOUR] -"\u2477" => "(4)" - -# ⁵ [SUPERSCRIPT FIVE] -"\u2075" => "5" - -# ₅ [SUBSCRIPT FIVE] -"\u2085" => "5" - -# ⑤ [CIRCLED DIGIT FIVE] -"\u2464" => "5" - -# ⓹ [DOUBLE CIRCLED DIGIT FIVE] -"\u24F9" => "5" - -# ❺ [DINGBAT NEGATIVE CIRCLED DIGIT FIVE] -"\u277A" => "5" - -# ➄ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE] -"\u2784" => "5" - -# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE] -"\u278E" => "5" - -# 5 [FULLWIDTH DIGIT FIVE] -"\uFF15" => "5" - -# ⒌ [DIGIT FIVE FULL STOP] -"\u248C" => "5." - -# ⑸ [PARENTHESIZED DIGIT FIVE] -"\u2478" => "(5)" - -# ⁶ [SUPERSCRIPT SIX] -"\u2076" => "6" - -# ₆ [SUBSCRIPT SIX] -"\u2086" => "6" - -# ⑥ [CIRCLED DIGIT SIX] -"\u2465" => "6" - -# ⓺ [DOUBLE CIRCLED DIGIT SIX] -"\u24FA" => "6" - -# ❻ [DINGBAT NEGATIVE CIRCLED DIGIT SIX] -"\u277B" => "6" - -# ➅ [DINGBAT CIRCLED SANS-SERIF DIGIT SIX] -"\u2785" => "6" - -# ➏ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX] -"\u278F" => "6" - -# 6 [FULLWIDTH DIGIT SIX] -"\uFF16" => "6" - -# ⒍ [DIGIT SIX FULL STOP] -"\u248D" => "6." - -# ⑹ [PARENTHESIZED DIGIT SIX] -"\u2479" => "(6)" - -# ⁷ [SUPERSCRIPT SEVEN] -"\u2077" => "7" - -# ₇ [SUBSCRIPT SEVEN] -"\u2087" => "7" - -# ⑦ [CIRCLED DIGIT SEVEN] -"\u2466" => "7" - -# ⓻ [DOUBLE CIRCLED DIGIT SEVEN] -"\u24FB" => "7" - -# ❼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN] -"\u277C" => "7" - -# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN] -"\u2786" => "7" - -# ➐ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN] -"\u2790" => "7" - -# 7 [FULLWIDTH DIGIT SEVEN] -"\uFF17" => "7" - -# ⒎ [DIGIT SEVEN FULL STOP] -"\u248E" => "7." - -# ⑺ [PARENTHESIZED DIGIT SEVEN] -"\u247A" => "(7)" - -# ⁸ [SUPERSCRIPT EIGHT] -"\u2078" => "8" - -# ₈ [SUBSCRIPT EIGHT] -"\u2088" => "8" - -# ⑧ [CIRCLED DIGIT EIGHT] -"\u2467" => "8" - -# ⓼ [DOUBLE CIRCLED DIGIT EIGHT] -"\u24FC" => "8" - -# ❽ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT] -"\u277D" => "8" - -# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT] -"\u2787" => "8" - -# ➑ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT] -"\u2791" => "8" - -# 8 [FULLWIDTH DIGIT EIGHT] -"\uFF18" => "8" - -# ⒏ [DIGIT EIGHT FULL STOP] -"\u248F" => "8." - -# ⑻ [PARENTHESIZED DIGIT EIGHT] -"\u247B" => "(8)" - -# ⁹ [SUPERSCRIPT NINE] -"\u2079" => "9" - -# ₉ [SUBSCRIPT NINE] -"\u2089" => "9" - -# ⑨ [CIRCLED DIGIT NINE] -"\u2468" => "9" - -# ⓽ [DOUBLE CIRCLED DIGIT NINE] -"\u24FD" => "9" - -# ❾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE] -"\u277E" => "9" - -# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE] -"\u2788" => "9" - -# ➒ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE] -"\u2792" => "9" - -# 9 [FULLWIDTH DIGIT NINE] -"\uFF19" => "9" - -# ⒐ [DIGIT NINE FULL STOP] -"\u2490" => "9." - -# ⑼ [PARENTHESIZED DIGIT NINE] -"\u247C" => "(9)" - -# ⑩ [CIRCLED NUMBER TEN] -"\u2469" => "10" - -# ⓾ [DOUBLE CIRCLED NUMBER TEN] -"\u24FE" => "10" - -# ❿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN] -"\u277F" => "10" - -# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN] -"\u2789" => "10" - -# ➓ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN] -"\u2793" => "10" - -# ⒑ [NUMBER TEN FULL STOP] -"\u2491" => "10." - -# ⑽ [PARENTHESIZED NUMBER TEN] -"\u247D" => "(10)" - -# ⑪ [CIRCLED NUMBER ELEVEN] -"\u246A" => "11" - -# ⓫ [NEGATIVE CIRCLED NUMBER ELEVEN] -"\u24EB" => "11" - -# ⒒ [NUMBER ELEVEN FULL STOP] -"\u2492" => "11." - -# ⑾ [PARENTHESIZED NUMBER ELEVEN] -"\u247E" => "(11)" - -# ⑫ [CIRCLED NUMBER TWELVE] -"\u246B" => "12" - -# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE] -"\u24EC" => "12" - -# ⒓ [NUMBER TWELVE FULL STOP] -"\u2493" => "12." - -# ⑿ [PARENTHESIZED NUMBER TWELVE] -"\u247F" => "(12)" - -# ⑬ [CIRCLED NUMBER THIRTEEN] -"\u246C" => "13" - -# ⓭ [NEGATIVE CIRCLED NUMBER THIRTEEN] -"\u24ED" => "13" - -# ⒔ [NUMBER THIRTEEN FULL STOP] -"\u2494" => "13." - -# ⒀ [PARENTHESIZED NUMBER THIRTEEN] -"\u2480" => "(13)" - -# ⑭ [CIRCLED NUMBER FOURTEEN] -"\u246D" => "14" - -# ⓮ [NEGATIVE CIRCLED NUMBER FOURTEEN] -"\u24EE" => "14" - -# ⒕ [NUMBER FOURTEEN FULL STOP] -"\u2495" => "14." - -# ⒁ [PARENTHESIZED NUMBER FOURTEEN] -"\u2481" => "(14)" - -# ⑮ [CIRCLED NUMBER FIFTEEN] -"\u246E" => "15" - -# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN] -"\u24EF" => "15" - -# ⒖ [NUMBER FIFTEEN FULL STOP] -"\u2496" => "15." - -# ⒂ [PARENTHESIZED NUMBER FIFTEEN] -"\u2482" => "(15)" - -# ⑯ [CIRCLED NUMBER SIXTEEN] -"\u246F" => "16" - -# ⓰ [NEGATIVE CIRCLED NUMBER SIXTEEN] -"\u24F0" => "16" - -# ⒗ [NUMBER SIXTEEN FULL STOP] -"\u2497" => "16." - -# ⒃ [PARENTHESIZED NUMBER SIXTEEN] -"\u2483" => "(16)" - -# ⑰ [CIRCLED NUMBER SEVENTEEN] -"\u2470" => "17" - -# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN] -"\u24F1" => "17" - -# ⒘ [NUMBER SEVENTEEN FULL STOP] -"\u2498" => "17." - -# ⒄ [PARENTHESIZED NUMBER SEVENTEEN] -"\u2484" => "(17)" - -# ⑱ [CIRCLED NUMBER EIGHTEEN] -"\u2471" => "18" - -# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN] -"\u24F2" => "18" - -# ⒙ [NUMBER EIGHTEEN FULL STOP] -"\u2499" => "18." - -# ⒅ [PARENTHESIZED NUMBER EIGHTEEN] -"\u2485" => "(18)" - -# ⑲ [CIRCLED NUMBER NINETEEN] -"\u2472" => "19" - -# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN] -"\u24F3" => "19" - -# ⒚ [NUMBER NINETEEN FULL STOP] -"\u249A" => "19." - -# ⒆ [PARENTHESIZED NUMBER NINETEEN] -"\u2486" => "(19)" - -# ⑳ [CIRCLED NUMBER TWENTY] -"\u2473" => "20" - -# ⓴ [NEGATIVE CIRCLED NUMBER TWENTY] -"\u24F4" => "20" - -# ⒛ [NUMBER TWENTY FULL STOP] -"\u249B" => "20." - -# ⒇ [PARENTHESIZED NUMBER TWENTY] -"\u2487" => "(20)" - -# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] -"\u00AB" => "\"" - -# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] -"\u00BB" => "\"" - -# “ [LEFT DOUBLE QUOTATION MARK] -"\u201C" => "\"" - -# ” [RIGHT DOUBLE QUOTATION MARK] -"\u201D" => "\"" - -# „ [DOUBLE LOW-9 QUOTATION MARK] -"\u201E" => "\"" - -# ″ [DOUBLE PRIME] -"\u2033" => "\"" - -# ‶ [REVERSED DOUBLE PRIME] -"\u2036" => "\"" - -# ❝ [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT] -"\u275D" => "\"" - -# ❞ [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT] -"\u275E" => "\"" - -# ❮ [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT] -"\u276E" => "\"" - -# ❯ [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT] -"\u276F" => "\"" - -# " [FULLWIDTH QUOTATION MARK] -"\uFF02" => "\"" - -# ‘ [LEFT SINGLE QUOTATION MARK] -"\u2018" => "\'" - -# ’ [RIGHT SINGLE QUOTATION MARK] -"\u2019" => "\'" - -# ‚ [SINGLE LOW-9 QUOTATION MARK] -"\u201A" => "\'" - -# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK] -"\u201B" => "\'" - -# ′ [PRIME] -"\u2032" => "\'" - -# ‵ [REVERSED PRIME] -"\u2035" => "\'" - -# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK] -"\u2039" => "\'" - -# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK] -"\u203A" => "\'" - -# ❛ [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT] -"\u275B" => "\'" - -# ❜ [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT] -"\u275C" => "\'" - -# ' [FULLWIDTH APOSTROPHE] -"\uFF07" => "\'" - -# ‐ [HYPHEN] -"\u2010" => "-" - -# ‑ [NON-BREAKING HYPHEN] -"\u2011" => "-" - -# ‒ [FIGURE DASH] -"\u2012" => "-" - -# – [EN DASH] -"\u2013" => "-" - -# — [EM DASH] -"\u2014" => "-" - -# ⁻ [SUPERSCRIPT MINUS] -"\u207B" => "-" - -# ₋ [SUBSCRIPT MINUS] -"\u208B" => "-" - -# - [FULLWIDTH HYPHEN-MINUS] -"\uFF0D" => "-" - -# ⁅ [LEFT SQUARE BRACKET WITH QUILL] -"\u2045" => "[" - -# ❲ [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT] -"\u2772" => "[" - -# [ [FULLWIDTH LEFT SQUARE BRACKET] -"\uFF3B" => "[" - -# ⁆ [RIGHT SQUARE BRACKET WITH QUILL] -"\u2046" => "]" - -# ❳ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT] -"\u2773" => "]" - -# ] [FULLWIDTH RIGHT SQUARE BRACKET] -"\uFF3D" => "]" - -# ⁽ [SUPERSCRIPT LEFT PARENTHESIS] -"\u207D" => "(" - -# ₍ [SUBSCRIPT LEFT PARENTHESIS] -"\u208D" => "(" - -# ❨ [MEDIUM LEFT PARENTHESIS ORNAMENT] -"\u2768" => "(" - -# ❪ [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT] -"\u276A" => "(" - -# ( [FULLWIDTH LEFT PARENTHESIS] -"\uFF08" => "(" - -# ⸨ [LEFT DOUBLE PARENTHESIS] -"\u2E28" => "((" - -# ⁾ [SUPERSCRIPT RIGHT PARENTHESIS] -"\u207E" => ")" - -# ₎ [SUBSCRIPT RIGHT PARENTHESIS] -"\u208E" => ")" - -# ❩ [MEDIUM RIGHT PARENTHESIS ORNAMENT] -"\u2769" => ")" - -# ❫ [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT] -"\u276B" => ")" - -# ) [FULLWIDTH RIGHT PARENTHESIS] -"\uFF09" => ")" - -# ⸩ [RIGHT DOUBLE PARENTHESIS] -"\u2E29" => "))" - -# ❬ [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT] -"\u276C" => "<" - -# ❰ [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT] -"\u2770" => "<" - -# < [FULLWIDTH LESS-THAN SIGN] -"\uFF1C" => "<" - -# ❭ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT] -"\u276D" => ">" - -# ❱ [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT] -"\u2771" => ">" - -# > [FULLWIDTH GREATER-THAN SIGN] -"\uFF1E" => ">" - -# ❴ [MEDIUM LEFT CURLY BRACKET ORNAMENT] -"\u2774" => "{" - -# { [FULLWIDTH LEFT CURLY BRACKET] -"\uFF5B" => "{" - -# ❵ [MEDIUM RIGHT CURLY BRACKET ORNAMENT] -"\u2775" => "}" - -# } [FULLWIDTH RIGHT CURLY BRACKET] -"\uFF5D" => "}" - -# ⁺ [SUPERSCRIPT PLUS SIGN] -"\u207A" => "+" - -# ₊ [SUBSCRIPT PLUS SIGN] -"\u208A" => "+" - -# + [FULLWIDTH PLUS SIGN] -"\uFF0B" => "+" - -# ⁼ [SUPERSCRIPT EQUALS SIGN] -"\u207C" => "=" - -# ₌ [SUBSCRIPT EQUALS SIGN] -"\u208C" => "=" - -# = [FULLWIDTH EQUALS SIGN] -"\uFF1D" => "=" - -# ! [FULLWIDTH EXCLAMATION MARK] -"\uFF01" => "!" - -# ‼ [DOUBLE EXCLAMATION MARK] -"\u203C" => "!!" - -# ⁉ [EXCLAMATION QUESTION MARK] -"\u2049" => "!?" - -# # [FULLWIDTH NUMBER SIGN] -"\uFF03" => "#" - -# $ [FULLWIDTH DOLLAR SIGN] -"\uFF04" => "$" - -# ⁒ [COMMERCIAL MINUS SIGN] -"\u2052" => "%" - -# % [FULLWIDTH PERCENT SIGN] -"\uFF05" => "%" - -# & [FULLWIDTH AMPERSAND] -"\uFF06" => "&" - -# ⁎ [LOW ASTERISK] -"\u204E" => "*" - -# * [FULLWIDTH ASTERISK] -"\uFF0A" => "*" - -# , [FULLWIDTH COMMA] -"\uFF0C" => "," - -# . [FULLWIDTH FULL STOP] -"\uFF0E" => "." - -# ⁄ [FRACTION SLASH] -"\u2044" => "/" - -# / [FULLWIDTH SOLIDUS] -"\uFF0F" => "/" - -# : [FULLWIDTH COLON] -"\uFF1A" => ":" - -# ⁏ [REVERSED SEMICOLON] -"\u204F" => ";" - -# ; [FULLWIDTH SEMICOLON] -"\uFF1B" => ";" - -# ? [FULLWIDTH QUESTION MARK] -"\uFF1F" => "?" - -# ⁇ [DOUBLE QUESTION MARK] -"\u2047" => "??" - -# ⁈ [QUESTION EXCLAMATION MARK] -"\u2048" => "?!" - -# @ [FULLWIDTH COMMERCIAL AT] -"\uFF20" => "@" - -# \ [FULLWIDTH REVERSE SOLIDUS] -"\uFF3C" => "\\" - -# ‸ [CARET] -"\u2038" => "^" - -# ^ [FULLWIDTH CIRCUMFLEX ACCENT] -"\uFF3E" => "^" - -# _ [FULLWIDTH LOW LINE] -"\uFF3F" => "_" - -# ⁓ [SWUNG DASH] -"\u2053" => "~" - -# ~ [FULLWIDTH TILDE] -"\uFF5E" => "~" - -################################################################ -# Below is the Perl script used to generate the above mappings # -# from ASCIIFoldingFilter.java: # -################################################################ -# -# #!/usr/bin/perl -# -# use warnings; -# use strict; -# -# my @source_chars = (); -# my @source_char_descriptions = (); -# my $target = ''; -# -# while (<>) { -# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) { -# push @source_chars, $1; -# push @source_char_descriptions, $2; -# next; -# } -# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) { -# $target .= $1; -# next; -# } -# if (/break;/) { -# $target = "\\\"" if ($target eq '"'); -# for my $source_char_num (0..$#source_chars) { -# print "# $source_char_descriptions[$source_char_num]\n"; -# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n"; -# } -# @source_chars = (); -# @source_char_descriptions = (); -# $target = ''; -# } -# } diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-ISOLatin1Accent.txt b/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-ISOLatin1Accent.txt deleted file mode 100644 index ede77425..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/mapping-ISOLatin1Accent.txt +++ /dev/null @@ -1,246 +0,0 @@ -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Syntax: -# "source" => "target" -# "source".length() > 0 (source cannot be empty.) -# "target".length() >= 0 (target can be empty.) - -# example: -# "À" => "A" -# "\u00C0" => "A" -# "\u00C0" => "\u0041" -# "ß" => "ss" -# "\t" => " " -# "\n" => "" - -# À => A -"\u00C0" => "A" - -# Á => A -"\u00C1" => "A" - -#  => A -"\u00C2" => "A" - -# à => A -"\u00C3" => "A" - -# Ä => A -"\u00C4" => "A" - -# Å => A -"\u00C5" => "A" - -# Æ => AE -"\u00C6" => "AE" - -# Ç => C -"\u00C7" => "C" - -# È => E -"\u00C8" => "E" - -# É => E -"\u00C9" => "E" - -# Ê => E -"\u00CA" => "E" - -# Ë => E -"\u00CB" => "E" - -# Ì => I -"\u00CC" => "I" - -# Í => I -"\u00CD" => "I" - -# Î => I -"\u00CE" => "I" - -# Ï => I -"\u00CF" => "I" - -# IJ => IJ -"\u0132" => "IJ" - -# Ð => D -"\u00D0" => "D" - -# Ñ => N -"\u00D1" => "N" - -# Ò => O -"\u00D2" => "O" - -# Ó => O -"\u00D3" => "O" - -# Ô => O -"\u00D4" => "O" - -# Õ => O -"\u00D5" => "O" - -# Ö => O -"\u00D6" => "O" - -# Ø => O -"\u00D8" => "O" - -# Œ => OE -"\u0152" => "OE" - -# Þ -"\u00DE" => "TH" - -# Ù => U -"\u00D9" => "U" - -# Ú => U -"\u00DA" => "U" - -# Û => U -"\u00DB" => "U" - -# Ü => U -"\u00DC" => "U" - -# Ý => Y -"\u00DD" => "Y" - -# Ÿ => Y -"\u0178" => "Y" - -# à => a -"\u00E0" => "a" - -# á => a -"\u00E1" => "a" - -# â => a -"\u00E2" => "a" - -# ã => a -"\u00E3" => "a" - -# ä => a -"\u00E4" => "a" - -# å => a -"\u00E5" => "a" - -# æ => ae -"\u00E6" => "ae" - -# ç => c -"\u00E7" => "c" - -# è => e -"\u00E8" => "e" - -# é => e -"\u00E9" => "e" - -# ê => e -"\u00EA" => "e" - -# ë => e -"\u00EB" => "e" - -# ì => i -"\u00EC" => "i" - -# í => i -"\u00ED" => "i" - -# î => i -"\u00EE" => "i" - -# ï => i -"\u00EF" => "i" - -# ij => ij -"\u0133" => "ij" - -# ð => d -"\u00F0" => "d" - -# ñ => n -"\u00F1" => "n" - -# ò => o -"\u00F2" => "o" - -# ó => o -"\u00F3" => "o" - -# ô => o -"\u00F4" => "o" - -# õ => o -"\u00F5" => "o" - -# ö => o -"\u00F6" => "o" - -# ø => o -"\u00F8" => "o" - -# œ => oe -"\u0153" => "oe" - -# ß => ss -"\u00DF" => "ss" - -# þ => th -"\u00FE" => "th" - -# ù => u -"\u00F9" => "u" - -# ú => u -"\u00FA" => "u" - -# û => u -"\u00FB" => "u" - -# ü => u -"\u00FC" => "u" - -# ý => y -"\u00FD" => "y" - -# ÿ => y -"\u00FF" => "y" - -# ff => ff -"\uFB00" => "ff" - -# fi => fi -"\uFB01" => "fi" - -# fl => fl -"\uFB02" => "fl" - -# ffi => ffi -"\uFB03" => "ffi" - -# ffl => ffl -"\uFB04" => "ffl" - -# ſt => ft -"\uFB05" => "ft" - -# st => st -"\uFB06" => "st" diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/schema.xml b/src/test/resources/org/dataone/cn/index/resources/solr/conf/schema.xml deleted file mode 100644 index 31351f90..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/schema.xml +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id - - - text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/scripts.conf b/src/test/resources/org/dataone/cn/index/resources/solr/conf/scripts.conf deleted file mode 100644 index f58b262a..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/scripts.conf +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -user= -solr_hostname=localhost -solr_port=8983 -rsyncd_port=18983 -data_dir= -webapp_name=solr -master_host= -master_data_dir= -master_status_dir= diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/solrconfig.xml b/src/test/resources/org/dataone/cn/index/resources/solr/conf/solrconfig.xml deleted file mode 100644 index a68c166b..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/solrconfig.xml +++ /dev/null @@ -1,1576 +0,0 @@ - - - - - - - - - ${solr.abortOnConfigurationError:true} - - - LUCENE_34 - - - - - - - - - - - - - - - - - ${solr.data.dir:} - - - - - - - - - - false - - 10 - - 32 - - - - 10000 - 1000 - 10000 - - - - - - - - - native - - - - - - - - - false - 32 - 10 - - - false - - - true - - - - - 1 - - 0 - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1024 - - - - - - - - - - - - - - - - - - - - - - true - - - - - - 20 - - - 200 - - - - - - - - - - - - static firstSearcher warming in solrconfig.xml - - - - - - false - - - 2 - - - - - - - - - - - - - - - - - - - - - - - explicit - 10 - *:* - abstract,author,authoritativeMN,authorLastName,beginDate, - blockedReplicationMN,changePermission,checksum,checksumAlgorithm,class, - contactOrganization,datasource,dataUrl,dateModified,datePublished,dateUploaded, - decade,documents,eastBoundCoord,edition,endDate,family,fileID,formatId, - formatType,gcmdKeyword,genus,geoform,id,identifier,investigator, - isDocumentedBy,isPublic,isSpatial,keyConcept,keywords,kingdom,LTERSite, - namedLocation,noBoundingBox,northBoundCoord,numberReplicas,obsoletedBy, - obsoletes,ogcUrl,order,origin,originator,parameter,phylum,placeKey, - preferredReplicationMN,presentationCat,project,pubDate,purpose,readPermission, - relatedOrganizations,replicaMN,replicationAllowed,replicaVerifiedDate, - resourceMap,rightsHolder,scientificName,sensor,site,size,sku,source, - southBoundCoord,species,submitter,term,title,topic,updateDate,webUrl, - westBoundCoord,writePermission,attributeName, - attributeLabel,attributeDescription,attributeUnit,attribute, - authorSurName,authorSurNameSort,authorGivenName,prov_wasDerivedFrom,prov_wasGeneratedBy, - prov_wasInformedBy,prov_used,prov_generatedByProgram, - prov_generatedByExecution,prov_generatedByUser,prov_usedByProgram, - prov_usedByExecution,prov_usedByUser,prov_wasExecutedByExecution, - prov_wasExecutedByUser,prov_hasSources,prov_hasDerivations, - prov_instanceOfClass, - geohash_1, - geohash_2, - geohash_3, - geohash_4, - geohash_5, - geohash_6, - geohash_7, - geohash_8, - geohash_9 - - - - - - - - - - - - - - explicit - - - velocity - - browse - layout - Solritas - - edismax - *:* - 10 - *,score - - text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 - - text,features,name,sku,id,manu,cat - 3 - - - text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 - - - on - cat - manu_exact - ipod - GB - 1 - cat,inStock - after - price - 0 - 600 - 50 - popularity - 0 - 10 - 3 - manufacturedate_dt - NOW/YEAR-10YEARS - NOW - +1YEAR - before - after - - - - on - text features name - 0 - name - - - spellcheck - - - - - - - - - - - - - - - - - - - - - - - text - true - ignored_ - - - true - links - ignored_ - - - - - - - - - - - - - - - - - - - - - - - - search - solrpingquery - - - all - - - - - - - explicit - true - - - - - - - - - - - - textSpell - - - - - - default - name - spellchecker - - - - - - - - - - - - - - - - - false - false - 1 - - - spellcheck - - - - - - - - - - true - - - tvComponent - - - - - - - - - default - - - org.carrot2.clustering.lingo.LingoClusteringAlgorithm - - - 20 - - - clustering/carrot2 - - - ENGLISH - - - stc - org.carrot2.clustering.stc.STCClusteringAlgorithm - - - - - - - true - default - true - - name - id - - features - - true - - - - false - - edismax - - text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 - - *:* - 10 - *,score - - - clustering - - - - - - - - - - true - - - terms - - - - - - - - string - elevate.xml - - - - - - explicit - - - elevator - - - - - - - - - - - 100 - - - - - - - - 70 - - 0.5 - - [-\w ,/\n\"']{20,200} - - - - - - - ]]> - ]]> - - - - - - - - - - - - - - - - - - - - - ,, - ,, - ,, - ,, - ,]]> - ]]> - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - *:* - - - - - - diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/spellings.txt b/src/test/resources/org/dataone/cn/index/resources/solr/conf/spellings.txt deleted file mode 100644 index d7ede6f5..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/spellings.txt +++ /dev/null @@ -1,2 +0,0 @@ -pizza -history \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/VM_global_library.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/VM_global_library.vm deleted file mode 100644 index 3dd880c4..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/VM_global_library.vm +++ /dev/null @@ -1,161 +0,0 @@ - -#macro(param $key)$request.params.get($key)#end - -#macro(url_for_solr)/solr#if($request.core.name != "")/$request.core.name#end#end -#macro(url_for_home)#url_for_solr/browse#end - -#macro(q)&q=$!{esc.url($params.get('q'))}#end - -#macro(fqs $p)#foreach($fq in $p)#if($velocityCount>1)&#{end}fq=$esc.url($fq)#end#end - -#macro(debug)#if($request.params.get('debugQuery'))&debugQuery=true#end#end - -#macro(boostPrice)#if($request.params.get('bf') == 'price')&bf=price#end#end - -#macro(annotate)#if($request.params.get('annotateBrowse'))&annotateBrowse=true#end#end - -#macro(annTitle $msg)#if($annotate == true)title="$msg"#end#end - -#macro(spatial)#if($request.params.get('sfield'))&sfield=store#end#if($request.params.get('pt'))&pt=$request.params.get('pt')#end#if($request.params.get('d'))&d=$request.params.get('d')#end#end - -#macro(qOpts)#set($queryOpts = $request.params.get("queryOpts"))#if($queryOpts && $queryOpts != "")&queryOpts=$queryOpts#end#end - -#macro(group)#if($request.params.getBool("group") == true)&group=true#end#if($request.params.get("group.field"))#foreach($grp in $request.params.getParams('group.field'))&group.field=$grp#end#end#end - -#macro(lensNoQ)?#if($request.params.getParams('fq') and $list.size($request.params.getParams('fq')) > 0)&#fqs($request.params.getParams('fq'))#end#debug#boostPrice#annotate#spatial#qOpts#group#end -#macro(lens)#lensNoQ#q#end - - -#macro(url_for_lens)#{url_for_home}#lens#end - -#macro(url_for_start $start)#url_for_home#lens&start=$start#end - -#macro(url_for_filters $p)#url_for_home?#q#boostPrice#spatial#qOpts#if($list.size($p) > 0)&#fqs($p)#end#debug#end - - -#macro(url_for_nested_facet_query $field)#url_for_home#lens&fq=$esc.url($field)#end - -## TODO: convert to use {!raw f=$field}$value (with escaping of course) -#macro(url_for_facet_filter $field $value)#url_for_home#lens&fq=$esc.url($field):%22$esc.url($value)%22#end - -#macro(url_for_facet_date_filter $field $value)#url_for_home#lens&fq=$esc.url($field):$esc.url($value)#end - -#macro(url_for_facet_range_filter $field $value)#url_for_home#lens&fq=$esc.url($field):$esc.url($value)#end - - -#macro(link_to_previous_page $text) - #if($page.current_page_number > 1) - #set($prev_start = $page.start - $page.results_per_page) - $text - #end -#end - -#macro(link_to_next_page $text) - #if($page.current_page_number < $page.page_count) - #set($next_start = $page.start + $page.results_per_page) - $text - #end -#end - -#macro(link_to_page $page_number $text) - #if($page_number == $page.current_page_number) - $text - #else - #if($page_number <= $page.page_count) - #set($page_start = $page_number * $page.results_per_page - $page.results_per_page) - $text - #end - #end -#end - -#macro(display_facet_query $field, $display, $fieldName) - #if($field.size() > 0) - $display -
    - #foreach ($facet in $field) - #if ($facet.value > 0) - #set($facetURL = "#url_for_nested_facet_query($facet.key)") - #if ($facetURL != '') -
  • $facet.key ($facet.value)
  • - #end - #end - #end -
- #end -#end - - -#macro(display_facet_range $field, $display, $fieldName, $start, $end, $gap, $before, $after) - $display -
    - #if($before && $before != "") - #set($value = "[* TO " + "#format_value($start)" + "]") - #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)") -
  • Less than #format_value($start) ($before)
  • - #end - #foreach ($facet in $field) - #set($rangeEnd = "#range_get_to_value($facet.key, $gap)") - #set($value = "[" + $facet.key + " TO " + $rangeEnd + "]") - #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)") - #if ($facetURL != '') -
  • $facet.key - #format_value($rangeEnd) ($facet.value)
  • - #end - #end - #if($end && $end != "" && $after > 0) - #set($value = "[" + "#format_value($end)" + " TO *]") - #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)") -
  • More than #format_value($end) ($after)
  • - #end -
-#end - -## $pivots is a list of facet_pivot -#macro(display_facet_pivot $pivots, $display) - #if($pivots.size() > 0) - $display - - #end -#end - -#macro(field $f) - #if($response.response.highlighting.get($docId).get($f).get(0)) - $!response.response.highlighting.get($docId).get($f).get(0) - #else - #foreach($v in $doc.getFieldValues($f)) - $v - #end - #end -#end - -#macro(utc_date $theDate) -$date.format("yyyy-MM-dd'T'HH:mm:ss'Z'",$theDate,$date.getLocale(),$date.getTimeZone().getTimeZone("UTC"))## -#end - -#macro(format_value $val) -#if(${val.class.name} == "java.util.Date") -#utc_date($val)## -#else -$val## -#end -#end - -#macro(range_get_to_value $inval, $gapval) -#if(${gapval.class.name} == "java.lang.String") -$inval$gapval## -#elseif(${gapval.class.name} == "java.lang.Float" || ${inval.class.name} == "java.lang.Float") -$math.toDouble($math.add($inval,$gapval))## -#else -$math.add($inval,$gapval)## -#end -#end \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/browse.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/browse.vm deleted file mode 100644 index d7c3c435..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/browse.vm +++ /dev/null @@ -1,45 +0,0 @@ -#set($searcher=$request.searcher) -#set($params=$request.params) -#set($clusters = $response.response.clusters) -#set($mltResults = $response.response.get("moreLikeThis")) -#set($annotate = $params.get("annotateBrowse")) -#parse('query.vm') -#if($response.response.spellcheck.suggestions and $response.response.spellcheck.suggestions.size() > 0) - Did you mean $response.response.spellcheck.suggestions.collation? -#end - - - - - -
- #if($response.response.get('grouped')) - #foreach($grouping in $response.response.get('grouped')) - #parse("hitGrouped.vm") - #end - #else - #foreach($doc in $response.results) - #parse("hit.vm") - #end - #end -
- - diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/cluster.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/cluster.vm deleted file mode 100644 index bbe75cf5..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/cluster.vm +++ /dev/null @@ -1,26 +0,0 @@ - - -

Clusters

-
- Run Solr with java -Dsolr.clustering.enabled=true -jar start.jar to see results -
- diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/clusterResults.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/clusterResults.vm deleted file mode 100644 index 618ebf81..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/clusterResults.vm +++ /dev/null @@ -1,29 +0,0 @@ -#foreach ($clusters in $response.response.clusters) - #set($labels = $clusters.get('labels')) - #set($docs = $clusters.get('docs')) - - -

#foreach ($label in $labels)$label#if( $foreach.hasNext ),#end#end

-
    - #foreach ($cluDoc in $docs) -
  1. $cluDoc
  2. - #end -
- - -#end \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/doc.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/doc.vm deleted file mode 100644 index 91246389..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/doc.vm +++ /dev/null @@ -1,42 +0,0 @@ -
#field('name')#if($params.getBool('mlt', false) == false)More Like This#end
-##do we have a physical store for this product -#set($store = $doc.getFieldValue('store')) -#if($store)#end -
Price: $!number.currency($doc.getFieldValue('price'))
-
Features: #field('features')
-
In Stock: #field('inStock')
-
- #set($mlt = $mltResults.get($docId)) - #set($mltOn = $params.getBool('mlt')) - #if($mltOn == true)
Similar Items
#end - #if ($mltOn && $mlt && $mlt.size() > 0) -
    - #foreach($mltHit in $mlt) - #set($mltId = $mltHit.getFieldValue('id')) -
  • Name: $mltHit.getFieldValue('name')
    -
    Price: $!number.currency($mltHit.getFieldValue('price')) In Stock: $mltHit.getFieldValue('inStock')
    - -
  • - #end -
- #elseif($mltOn && $mlt.size() == 0) -
No Similar Items Found
- #end -
-#if($params.getBool("debugQuery",false)) - toggle explain -
$response.getExplainMap().get($doc.getFirstValue('id'))
- toggle all fields - - #foreach($fieldname in $doc.fieldNames) -
- $fieldname : - - #foreach($value in $doc.getFieldValues($fieldname)) - $value - #end - - #end -
-
-#end \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_fields.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_fields.vm deleted file mode 100644 index 91c50be1..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_fields.vm +++ /dev/null @@ -1,12 +0,0 @@ -#if($response.facetFields) -

Field Facets

- #foreach($field in $response.facetFields) - $field.name - -
    - #foreach($facet in $field.values) -
  • $facet.name ($facet.count)
  • - #end -
- #end - #end \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_queries.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_queries.vm deleted file mode 100644 index 2ac65d64..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_queries.vm +++ /dev/null @@ -1,3 +0,0 @@ -#set($field = $response.response.facet_counts.facet_queries) -

Query Facets

-#display_facet_query($field, "", "") \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_ranges.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_ranges.vm deleted file mode 100644 index 8d262946..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facet_ranges.vm +++ /dev/null @@ -1,12 +0,0 @@ -

Range Facets

-#foreach ($field in $response.response.facet_counts.facet_ranges) - #set($name = $field.key) - #set($display = "$name") - #set($f = $field.value.counts) - #set($start = $field.value.start) - #set($end = $field.value.end) - #set($gap = $field.value.gap) - #set($before = $field.value.before) - #set($after = $field.value.after) - #display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after) -#end \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facets.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facets.vm deleted file mode 100644 index 5f538f29..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/facets.vm +++ /dev/null @@ -1,7 +0,0 @@ -#parse('facet_fields.vm') -#parse('facet_queries.vm') -#parse('facet_ranges.vm') -#parse('cluster.vm') - - - diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/footer.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/footer.vm deleted file mode 100644 index b55e8a5a..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/footer.vm +++ /dev/null @@ -1,17 +0,0 @@ -
-
- Options: - #if($request.params.get('debugQuery')) - disable debug - #else - enable debug - #end - #if($annotate) - disable annotation - #else - enable annotation - #end - XML
- -
Documentation: Solr Home Page, Solr Wiki
-
Disclaimer: The locations displayed in this demonstration are purely fictional. It is more than likely that no store with the items listed actually exists at that location!
\ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/head.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/head.vm deleted file mode 100644 index 30c961c3..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/head.vm +++ /dev/null @@ -1,45 +0,0 @@ - - ## An example of using an arbitrary request parameter - - -#param('title') - - - - - - - - - \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/header.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/header.vm deleted file mode 100644 index 15c3870a..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/header.vm +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/hit.vm b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/hit.vm deleted file mode 100644 index 5cd4fe8d..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/hit.vm +++ /dev/null @@ -1,5 +0,0 @@ -#set($docId = $doc.getFieldValue('id')) - -
- #parse("doc.vm") -
diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.css b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.css deleted file mode 100644 index 91b62283..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.css +++ /dev/null @@ -1,48 +0,0 @@ -.ac_results { - padding: 0px; - border: 1px solid black; - background-color: white; - overflow: hidden; - z-index: 99999; -} - -.ac_results ul { - width: 100%; - list-style-position: outside; - list-style: none; - padding: 0; - margin: 0; -} - -.ac_results li { - margin: 0px; - padding: 2px 5px; - cursor: default; - display: block; - /* - if width will be 100% horizontal scrollbar will apear - when scroll mode will be used - */ - /*width: 100%;*/ - font: menu; - font-size: 12px; - /* - it is very important, if line-height not setted or setted - in relative units scroll will be broken in firefox - */ - line-height: 16px; - overflow: hidden; -} - -.ac_loading { - background: white url('indicator.gif') right center no-repeat; -} - -.ac_odd { - background-color: #eee; -} - -.ac_over { - background-color: #0A246A; - color: white; -} diff --git a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.js b/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.js deleted file mode 100644 index f1b2642e..00000000 --- a/src/test/resources/org/dataone/cn/index/resources/solr/conf/velocity/jquery.autocomplete.js +++ /dev/null @@ -1,762 +0,0 @@ -/* - * Autocomplete - jQuery plugin 1.1pre - * - * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.autocomplete.js 5785 2008-07-12 10:37:33Z joern.zaefferer $ - * - */ - -;(function($) { - -$.fn.extend({ - autocomplete: function(urlOrData, options) { - var isUrl = typeof urlOrData == "string"; - options = $.extend({}, $.Autocompleter.defaults, { - url: isUrl ? urlOrData : null, - data: isUrl ? null : urlOrData, - delay: isUrl ? $.Autocompleter.defaults.delay : 10, - max: options && !options.scroll ? 10 : 150 - }, options); - - // if highlight is set to false, replace it with a do-nothing function - options.highlight = options.highlight || function(value) { return value; }; - - // if the formatMatch option is not specified, then use formatItem for backwards compatibility - options.formatMatch = options.formatMatch || options.formatItem; - - return this.each(function() { - new $.Autocompleter(this, options); - }); - }, - result: function(handler) { - return this.bind("result", handler); - }, - search: function(handler) { - return this.trigger("search", [handler]); - }, - flushCache: function() { - return this.trigger("flushCache"); - }, - setOptions: function(options){ - return this.trigger("setOptions", [options]); - }, - unautocomplete: function() { - return this.trigger("unautocomplete"); - } -}); - -$.Autocompleter = function(input, options) { - - var KEY = { - UP: 38, - DOWN: 40, - DEL: 46, - TAB: 9, - RETURN: 13, - ESC: 27, - COMMA: 188, - PAGEUP: 33, - PAGEDOWN: 34, - BACKSPACE: 8 - }; - - // Create $ object for input element - var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); - - var timeout; - var previousValue = ""; - var cache = $.Autocompleter.Cache(options); - var hasFocus = 0; - var lastKeyPressCode; - var config = { - mouseDownOnSelect: false - }; - var select = $.Autocompleter.Select(options, input, selectCurrent, config); - - var blockSubmit; - - // prevent form submit in opera when selecting with return key - $.browser.opera && $(input.form).bind("submit.autocomplete", function() { - if (blockSubmit) { - blockSubmit = false; - return false; - } - }); - - // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { - // track last key pressed - lastKeyPressCode = event.keyCode; - switch(event.keyCode) { - - case KEY.UP: - event.preventDefault(); - if ( select.visible() ) { - select.prev(); - } else { - onChange(0, true); - } - break; - - case KEY.DOWN: - event.preventDefault(); - if ( select.visible() ) { - select.next(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEUP: - event.preventDefault(); - if ( select.visible() ) { - select.pageUp(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEDOWN: - event.preventDefault(); - if ( select.visible() ) { - select.pageDown(); - } else { - onChange(0, true); - } - break; - - // matches also semicolon - case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: - case KEY.TAB: - case KEY.RETURN: - if( selectCurrent() ) { - // stop default to prevent a form submit, Opera needs special handling - event.preventDefault(); - blockSubmit = true; - return false; - } - break; - - case KEY.ESC: - select.hide(); - break; - - default: - clearTimeout(timeout); - timeout = setTimeout(onChange, options.delay); - break; - } - }).focus(function(){ - // track whether the field has focus, we shouldn't process any - // results if the field no longer has focus - hasFocus++; - }).blur(function() { - hasFocus = 0; - if (!config.mouseDownOnSelect) { - hideResults(); - } - }).click(function() { - // show select when clicking in a focused field - if ( hasFocus++ > 1 && !select.visible() ) { - onChange(0, true); - } - }).bind("search", function() { - // TODO why not just specifying both arguments? - var fn = (arguments.length > 1) ? arguments[1] : null; - function findValueCallback(q, data) { - var result; - if( data && data.length ) { - for (var i=0; i < data.length; i++) { - if( data[i].result.toLowerCase() == q.toLowerCase() ) { - result = data[i]; - break; - } - } - } - if( typeof fn == "function" ) fn(result); - else $input.trigger("result", result && [result.data, result.value]); - } - $.each(trimWords($input.val()), function(i, value) { - request(value, findValueCallback, findValueCallback); - }); - }).bind("flushCache", function() { - cache.flush(); - }).bind("setOptions", function() { - $.extend(options, arguments[1]); - // if we've updated the data, repopulate - if ( "data" in arguments[1] ) - cache.populate(); - }).bind("unautocomplete", function() { - select.unbind(); - $input.unbind(); - $(input.form).unbind(".autocomplete"); - }); - - - function selectCurrent() { - var selected = select.selected(); - if( !selected ) - return false; - - var v = selected.result; - previousValue = v; - - if ( options.multiple ) { - var words = trimWords($input.val()); - if ( words.length > 1 ) { - v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v; - } - v += options.multipleSeparator; - } - - $input.val(v); - hideResultsNow(); - $input.trigger("result", [selected.data, selected.value]); - return true; - } - - function onChange(crap, skipPrevCheck) { - if( lastKeyPressCode == KEY.DEL ) { - select.hide(); - return; - } - - var currentValue = $input.val(); - - if ( !skipPrevCheck && currentValue == previousValue ) - return; - - previousValue = currentValue; - - currentValue = lastWord(currentValue); - if ( currentValue.length >= options.minChars) { - $input.addClass(options.loadingClass); - if (!options.matchCase) - currentValue = currentValue.toLowerCase(); - request(currentValue, receiveData, hideResultsNow); - } else { - stopLoading(); - select.hide(); - } - }; - - function trimWords(value) { - if ( !value ) { - return [""]; - } - var words = value.split( options.multipleSeparator ); - var result = []; - $.each(words, function(i, value) { - if ( $.trim(value) ) - result[i] = $.trim(value); - }); - return result; - } - - function lastWord(value) { - if ( !options.multiple ) - return value; - var words = trimWords(value); - return words[words.length - 1]; - } - - // fills in the input box w/the first match (assumed to be the best match) - // q: the term entered - // sValue: the first matching result - function autoFill(q, sValue){ - // autofill in the complete box w/the first match as long as the user hasn't entered in more data - // if the last user key pressed was backspace, don't autofill - if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { - // fill in the value (keep the case the user has typed) - $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); - // select the portion of the value not typed by the user (so the next character will erase) - $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length); - } - }; - - function hideResults() { - clearTimeout(timeout); - timeout = setTimeout(hideResultsNow, 200); - }; - - function hideResultsNow() { - var wasVisible = select.visible(); - select.hide(); - clearTimeout(timeout); - stopLoading(); - if (options.mustMatch) { - // call search and run callback - $input.search( - function (result){ - // if no value found, clear the input box - if( !result ) { - if (options.multiple) { - var words = trimWords($input.val()).slice(0, -1); - $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); - } - else - $input.val( "" ); - } - } - ); - } - if (wasVisible) - // position cursor at end of input field - $.Autocompleter.Selection(input, input.value.length, input.value.length); - }; - - function receiveData(q, data) { - if ( data && data.length && hasFocus ) { - stopLoading(); - select.display(data, q); - autoFill(q, data[0].value); - select.show(); - } else { - hideResultsNow(); - } - }; - - function request(term, success, failure) { - if (!options.matchCase) - term = term.toLowerCase(); - var data = cache.load(term); - // recieve the cached data - if (data && data.length) { - success(term, data); - // if an AJAX url has been supplied, try loading the data now - } else if( (typeof options.url == "string") && (options.url.length > 0) ){ - - var extraParams = { - timestamp: +new Date() - }; - $.each(options.extraParams, function(key, param) { - extraParams[key] = typeof param == "function" ? param() : param; - }); - - $.ajax({ - // try to leverage ajaxQueue plugin to abort previous requests - mode: "abort", - // limit abortion to this input - port: "autocomplete" + input.name, - dataType: options.dataType, - url: options.url, - data: $.extend({ - q: lastWord(term), - limit: options.max - }, extraParams), - success: function(data) { - var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); - success(term, parsed); - } - }); - } else { - // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match - select.emptyList(); - failure(term); - } - }; - - function parse(data) { - var parsed = []; - var rows = data.split("\n"); - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: options.formatResult && options.formatResult(row, row[0]) || row[0] - }; - } - } - return parsed; - }; - - function stopLoading() { - $input.removeClass(options.loadingClass); - }; - -}; - -$.Autocompleter.defaults = { - inputClass: "ac_input", - resultsClass: "ac_results", - loadingClass: "ac_loading", - minChars: 1, - delay: 400, - matchCase: false, - matchSubset: true, - matchContains: false, - cacheLength: 10, - max: 100, - mustMatch: false, - extraParams: {}, - selectFirst: true, - formatItem: function(row) { return row[0]; }, - formatMatch: null, - autoFill: false, - width: 0, - multiple: false, - multipleSeparator: ", ", - highlight: function(value, term) { - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); - }, - scroll: true, - scrollHeight: 180 -}; - -$.Autocompleter.Cache = function(options) { - - var data = {}; - var length = 0; - - function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - i = s.toLowerCase().search("\\b" + sub.toLowerCase()); - } - if (i == -1) return false; - return i == 0 || options.matchContains; - }; - - function add(q, value) { - if (length > options.cacheLength){ - flush(); - } - if (!data[q]){ - length++; - } - data[q] = value; - } - - function populate(){ - if( !options.data ) return false; - // track the matches - var stMatchSets = {}, - nullData = 0; - - // no url was specified, we need to adjust the cache length to make sure it fits the local data store - if( !options.url ) options.cacheLength = 1; - - // track all options for minChars = 0 - stMatchSets[""] = []; - - // loop through the array and create a lookup structure - for ( var i = 0, ol = options.data.length; i < ol; i++ ) { - var rawValue = options.data[i]; - // if rawValue is a string, make an array otherwise just reference the array - rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; - - var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) - continue; - - var firstChar = value.charAt(0).toLowerCase(); - // if no lookup array for this character exists, look it up now - if( !stMatchSets[firstChar] ) - stMatchSets[firstChar] = []; - - // if the match is a string - var row = { - value: value, - data: rawValue, - result: options.formatResult && options.formatResult(rawValue) || value - }; - - // push the current match into the set list - stMatchSets[firstChar].push(row); - - // keep track of minChars zero items - if ( nullData++ < options.max ) { - stMatchSets[""].push(row); - } - }; - - // add the data items to the cache - $.each(stMatchSets, function(i, value) { - // increase the cache size - options.cacheLength++; - // add to the cache - add(i, value); - }); - } - - // populate any existing data - setTimeout(populate, 25); - - function flush(){ - data = {}; - length = 0; - } - - return { - flush: flush, - add: add, - populate: populate, - load: function(q) { - if (!options.cacheLength || !length) - return null; - /* - * if dealing w/local data and matchContains than we must make sure - * to loop through all the data collections looking for matches - */ - if( !options.url && options.matchContains ){ - // track all matches - var csub = []; - // loop through all the data grids for matches - for( var k in data ){ - // don't search through the stMatchSets[""] (minChars: 0) cache - // this prevents duplicates - if( k.length > 0 ){ - var c = data[k]; - $.each(c, function(i, x) { - // if we've got a match, add it to the array - if (matchSubset(x.value, q)) { - csub.push(x); - } - }); - } - } - return csub; - } else - // if the exact item exists, use it - if (data[q]){ - return data[q]; - } else - if (options.matchSubset) { - for (var i = q.length - 1; i >= options.minChars; i--) { - var c = data[q.substr(0, i)]; - if (c) { - var csub = []; - $.each(c, function(i, x) { - if (matchSubset(x.value, q)) { - csub[csub.length] = x; - } - }); - return csub; - } - } - } - return null; - } - }; -}; - -$.Autocompleter.Select = function (options, input, select, config) { - var CLASSES = { - ACTIVE: "ac_over" - }; - - var listItems, - active = -1, - data, - term = "", - needsInit = true, - element, - list; - - // Create results - function init() { - if (!needsInit) - return; - element = $("
") - .hide() - .addClass(options.resultsClass) - .css("position", "absolute") - .appendTo(document.body); - - list = $("