diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 83fdd5cc43c538479f9601fcfb24a5a1e45ce49f..067764b1cfa677d272d921913e560e84b2a0f269 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,4 +19,5 @@ include:
   - local: '/src/tester_integration/.gitlab-ci.yml'
   - local: '/src/tester_functional/.gitlab-ci.yml'
   - local: '/src/automation/.gitlab-ci.yml'
+  - local: '/src/policy/.gitlab-ci.yml'
   
diff --git a/deploy_in_kubernetes.sh b/deploy_in_kubernetes.sh
index 44cdb0243779f2eff6863c95679b120cf14b1bf9..b5959c5d80b59f3220d86706e637d496231b45a2 100755
--- a/deploy_in_kubernetes.sh
+++ b/deploy_in_kubernetes.sh
@@ -10,7 +10,7 @@ REGISTRY_IMAGE=""
 #REGISTRY_IMAGE="http://my-container-registry.local/"
 
 # Set the list of components you want to build images for, and deploy.
-COMPONENTS="context device automation service compute monitoring centralizedattackdetector"
+COMPONENTS="context device automation policy service compute monitoring centralizedattackdetector"
 
 # Set the tag you want to use for your images.
 IMAGE_TAG="tf-dev"
@@ -46,7 +46,7 @@ for COMPONENT in $COMPONENTS; do
     echo "  Building Docker image..."
     BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log"
 
-    if [ "$COMPONENT" == "automation" ]; then
+    if [ "$COMPONENT" == "automation" ] || [ "$COMPONENT" == "policy" ]; then
         docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/"$COMPONENT"/ > "$BUILD_LOG"
     else 
         docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/ > "$BUILD_LOG"
diff --git a/manifests/policyservice.yaml b/manifests/policyservice.yaml
new file mode 120000
index 0000000000000000000000000000000000000000..bb28f6e2cff4c6b50e44f049dec6a53d31922e86
--- /dev/null
+++ b/manifests/policyservice.yaml
@@ -0,0 +1 @@
+../src/policy/target/kubernetes/kubernetes.yml
\ No newline at end of file
diff --git a/src/policy/.dockerignore b/src/policy/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..c588372a180853e01b27a8a92abaa452c829485a
--- /dev/null
+++ b/src/policy/.dockerignore
@@ -0,0 +1,10 @@
+# Ignore everything except from pom.xml, src directory & target directory.
+*
+!pom.xml
+!src/*
+!target/*-runner
+!target/*-runner.jar
+!target/lib/*
+!target/quarkus-app/*
+# Directory needed for gRPC services
+!target/generated-sources/*
\ No newline at end of file
diff --git a/src/policy/.env.example b/src/policy/.env.example
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/policy/.gitignore b/src/policy/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e2dfe65c93b7abbb99ed966d3624d3e532032914
--- /dev/null
+++ b/src/policy/.gitignore
@@ -0,0 +1,39 @@
+**/target/*
+!**/target/generated-sources/
+!**/target/kubernetes/
+**/target/kubernetes/kubernetes.json
+!**/target/kubernetes/kubernetes.yml
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Misc ###
+.env
\ No newline at end of file
diff --git a/src/policy/.gitlab-ci.yml b/src/policy/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..18ab5531ebf756cf01d9eab39d06374510c361df
--- /dev/null
+++ b/src/policy/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+# Package application needed to run tests & build the image on next stage
+build policy:
+  variables:
+    IMAGE_NAME: 'policy' # name of the microservice
+    IMAGE_NAME_TEST: 'policy-test' # name of the microservice
+    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+  stage: build
+  script:
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target builder
+  rules:
+    - changes:
+        - src/$IMAGE_NAME/**
+        - .gitlab-ci.yml
+
+# Run tests, build & push the image
+unit_test policy:
+  variables:
+    IMAGE_NAME: 'policy' # name of the microservice
+    IMAGE_NAME_TEST: 'policy-test' # name of the microservice
+    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+  stage: unit_test
+  needs:
+    - build policy
+  before_script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  script:
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target unit-test
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target release
+    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+  rules:
+    - changes:
+        - src/$IMAGE_NAME/**
+        - .gitlab-ci.yml
+
+# Deployment of automation service in Kubernetes Cluster
+deploy policy:
+  stage: deploy
+  needs:
+    - build policy
+    - unit_test policy
+  script:
+    - kubectl version
+    - kubectl get all
+    - kubectl apply -f "manifests/policyservice.yaml"
+    - kubectl delete pods --selector app=policyservice
+    - kubectl get all
\ No newline at end of file
diff --git a/src/policy/.java-version b/src/policy/.java-version
new file mode 100644
index 0000000000000000000000000000000000000000..b4de3947675361a7770d29b8982c407b0ec6b2a0
--- /dev/null
+++ b/src/policy/.java-version
@@ -0,0 +1 @@
+11
diff --git a/src/policy/.mvn/wrapper/MavenWrapperDownloader.java b/src/policy/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644
index 0000000000000000000000000000000000000000..a45eb6ba269cd38f8965cef786729790945d9537
--- /dev/null
+++ b/src/policy/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}
diff --git a/src/policy/.mvn/wrapper/maven-wrapper.jar b/src/policy/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054
Binary files /dev/null and b/src/policy/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/src/policy/.mvn/wrapper/maven-wrapper.properties b/src/policy/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..ffdc10e59f87823d5abb635aa2e37bf281698e83
--- /dev/null
+++ b/src/policy/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
diff --git a/src/policy/Dockerfile b/src/policy/Dockerfile
new file mode 120000
index 0000000000000000000000000000000000000000..eec732273e12372d1a11fef9d958b124e9d8df1f
--- /dev/null
+++ b/src/policy/Dockerfile
@@ -0,0 +1 @@
+src/main/docker/Dockerfile.multistage.jvm
\ No newline at end of file
diff --git a/src/policy/README.md b/src/policy/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a32311b6845bed01b74207fbe9c0866c098831ab
--- /dev/null
+++ b/src/policy/README.md
@@ -0,0 +1,18 @@
+# How to run locally the policy service (tested in Ubuntu 20.04)
+
+
+## Compile code
+
+`
+./mvnw compile
+`
+## Execute unit tests
+
+`
+./mvnw test
+`
+## Run service
+
+`
+./mvnw quarkus:dev
+`
diff --git a/src/policy/mvnw b/src/policy/mvnw
new file mode 100755
index 0000000000000000000000000000000000000000..a16b5431b4c3cab50323a3f558003fd0abd87dad
--- /dev/null
+++ b/src/policy/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/src/policy/mvnw.cmd b/src/policy/mvnw.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..c8d43372c986d97911cdc21bd87e0cbe3d83bdda
--- /dev/null
+++ b/src/policy/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/src/policy/pom.xml b/src/policy/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..399c3a18c8f4fb62c42290191f59b179b1f0f2c3
--- /dev/null
+++ b/src/policy/pom.xml
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>eu.teraflow</groupId>
+    <artifactId>policy</artifactId>
+    <version>0.0.1</version>
+    <name>TeraFlow Policy Component</name>
+    <description>TeraFlow Policy Component</description>
+
+    <properties>
+        <java.version>11</java.version>
+        <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#parameters -->
+        <maven.compiler.parameters>true</maven.compiler.parameters>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <maven.version>3.8.1</maven.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+        <assertj.version>3.20.2</assertj.version>
+        <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+        <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
+        <jacoco.report.unit-test>jacoco-unit-tests.exec</jacoco.report.unit-test>
+        <jacoco.report.integration-test>jacoco-integration-tests.exec</jacoco.report.integration-test>
+        <jacoco.version>0.8.6</jacoco.version>
+        <!-- Maven plugins -->
+        <docker-maven-plugin.version>0.34.1</docker-maven-plugin.version>
+        <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
+        <maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
+        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+        <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
+        <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
+        <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version>
+        <maven-install-plugin.version>3.0.0-M1</maven-install-plugin.version>
+        <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
+        <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
+        <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
+        <sonarsource-scanner-plugin.version>3.8.0.2131</sonarsource-scanner-plugin.version>
+        <spotless-plugin.version>2.10.3</spotless-plugin.version>
+        <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
+        <quarkus-maven-plugin.version>${quarkus.platform.version}</quarkus-maven-plugin.version>
+        <!-- Third-party Dependencies -->
+        <quarkus.platform.version>2.2.2.Final</quarkus.platform.version>
+    </properties>
+
+    <distributionManagement>
+        <repository>
+            <id>gitlab-maven</id>
+            <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
+        </repository>
+
+        <snapshotRepository>
+            <id>gitlab-maven</id>
+            <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
+        </snapshotRepository>
+    </distributionManagement>
+
+    <!-- Property resolution occurs only after parent POM has been resolved. Source: https://stackoverflow.com/a/59813598 -->
+    <repositories>
+        <!-- Explicitly define Maven central (first), so that CI job tries to fetch from it first. -->
+        <repository>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+        </repository>
+    </repositories>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>io.quarkus</groupId>
+                <artifactId>quarkus-universe-bom</artifactId>
+                <version>${quarkus.platform.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-grpc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-kubernetes</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-container-image-jib</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-kubernetes-service-binding</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-smallrye-health</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-resteasy-reactive</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-arc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-config-yaml</artifactId>
+        </dependency>
+
+        <!-- Testing -->
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>${assertj.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jacoco</groupId>
+            <artifactId>org.jacoco.agent</artifactId>
+            <classifier>runtime</classifier>
+            <scope>test</scope>
+            <version>${jacoco.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5-mockito</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>${maven-assembly-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-clean-plugin</artifactId>
+                <version>${maven-clean-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <compilerArgs>
+                        <arg>-Xlint:deprecation</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>${maven-deploy-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <version>${maven-surefire-plugin.version}</version>
+                <configuration>
+                    <systemPropertyVariables>
+                        <jacoco-agent.destfile>${project.build.directory}/${jacoco.report.integration-test}</jacoco-agent.destfile>
+                    </systemPropertyVariables>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-install-plugin</artifactId>
+                <version>${maven-install-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>${maven-jar-plugin.version}</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>${maven-resources-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${maven-surefire-plugin.version}</version>
+                <configuration>
+                    <skipTests>${skipUTs}</skipTests>
+                    <systemPropertyVariables>
+                        <jacoco-agent.destfile>${project.build.directory}/${jacoco.report.unit-test}</jacoco-agent.destfile>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.sonarsource.scanner.maven</groupId>
+                <artifactId>sonar-maven-plugin</artifactId>
+                <version>${sonarsource-scanner-plugin.version}</version>
+            </plugin>
+
+            <!-- https://quarkus.io/guides/maven-tooling#logging-quarkus-application-build-classpath-tree -->
+            <plugin>
+                <groupId>io.quarkus</groupId>
+                <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
+                <version>${quarkus-maven-plugin.version}</version>
+            </plugin>
+
+            <plugin>
+                <groupId>io.quarkus</groupId>
+                <artifactId>quarkus-maven-plugin</artifactId>
+                <version>${quarkus-maven-plugin.version}</version>
+                <extensions>true</extensions>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>build</goal>
+                            <goal>generate-code</goal>
+                            <goal>generate-code-tests</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>${jacoco.version}</version>
+                <executions>
+                    <execution>
+                        <id>instrument-unit-tests</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>instrument</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>restore-unit-tests</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>restore-instrumented-classes</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>report-unit-tests</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                        <configuration>
+                            <dataFile>${project.build.directory}/${jacoco.report.unit-test}</dataFile>
+                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-unit-tests</outputDirectory>
+                        </configuration>
+                    </execution>
+
+                    <execution>
+                        <id>instrument-integration-tests</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>instrument</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>restore-integration-tests</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>restore-instrumented-classes</goal>
+                        </goals>
+                    </execution>
+
+                    <execution>
+                        <id>report-integration-tests</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                        <configuration>
+                            <dataFile>${project.build.directory}/${jacoco.report.integration-test}</dataFile>
+                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-integration-tests</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>${maven-dependency-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>analyze-dependencies</id>
+                        <goals>
+                            <goal>analyze-only</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>${maven-enforcer-plugin.version}</version>
+                <configuration>
+                    <rules>
+                        <requireJavaVersion>
+                            <version>${java.version}</version>
+                        </requireJavaVersion>
+                        <requireMavenVersion>
+                            <version>${maven.version}</version>
+                        </requireMavenVersion>
+                    </rules>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>com.diffplug.spotless</groupId>
+                <artifactId>spotless-maven-plugin</artifactId>
+                <version>${spotless-plugin.version}</version>
+                <configuration>
+                    <java>
+                        <!--
+                            Allow toggling spotless, as per:
+                            https://github.com/diffplug/spotless/tree/main/plugin-maven#spotlessoff-and-spotlesson
+                        -->
+                        <toggleOffOn>
+                            <off>fmt:off</off>
+                            <on>fmt:on</on>
+                        </toggleOffOn>
+
+                        <googleJavaFormat>
+                            <version>1.10.0</version>
+                            <style>GOOGLE</style>
+                        </googleJavaFormat>
+
+                        <!-- Custom configuration -->
+                        <indent>
+                            <tabs>true</tabs>
+                            <spacesPerTab>2</spacesPerTab>
+                        </indent>
+                        <indent>
+                            <spaces>true</spaces>
+                            <spacesPerTab>4</spacesPerTab>
+                        </indent>
+                    </java>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>generate-consolidated-coverage</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.jacoco</groupId>
+                        <artifactId>jacoco-maven-plugin</artifactId>
+                        <executions>
+
+                            <!--
+                              Build consolidated coverage report as per
+                              https://quarkus.io/version/1.11/guides/tests-with-coverage#instrumenting-the-classes-instead
+                            -->
+                            <execution>
+                                <id>merge-results</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>merge</goal>
+                                </goals>
+                                <configuration>
+                                    <fileSets>
+                                        <fileSet>
+                                            <directory>${project.build.directory}</directory>
+                                            <includes>
+                                                <include>*.exec</include>
+                                            </includes>
+                                        </fileSet>
+                                    </fileSets>
+                                    <destFile>${project.build.directory}/jacoco.exec</destFile>
+                                </configuration>
+                            </execution>
+
+                            <execution>
+                                <id>post-merge-report</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>report</goal>
+                                </goals>
+                                <configuration>
+                                    <dataFile>${project.build.directory}/jacoco.exec</dataFile>
+                                    <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
+                                </configuration>
+
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>
\ No newline at end of file
diff --git a/src/policy/src/main/docker/Dockerfile.multistage.jvm b/src/policy/src/main/docker/Dockerfile.multistage.jvm
new file mode 100644
index 0000000000000000000000000000000000000000..1e21abcb49499f7f407602494db9ac91bb9eb187
--- /dev/null
+++ b/src/policy/src/main/docker/Dockerfile.multistage.jvm
@@ -0,0 +1,52 @@
+# Multi-stage Docker image build
+
+# Stage 1
+FROM maven:3-jdk-11 AS builder
+
+# Define working directory
+WORKDIR /app
+
+# Copy every file in working directory, as defined in .dockerignore file
+COPY ./pom.xml pom.xml
+COPY ./src src/
+COPY ./target/generated-sources/ target/generated-sources/
+RUN mvn --errors --batch-mode package -Dmaven.test.skip=true
+
+# Stage 2
+FROM builder AS unit-test
+
+RUN mvn --errors --batch-mode test
+
+# Stage 3
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 AS release
+
+ARG JAVA_PACKAGE=java-11-openjdk-headless
+ARG RUN_JAVA_VERSION=1.3.8
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
+# Install java and the run-java script
+# Also set up permissions for user `1001`
+RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
+    && microdnf update \
+    && microdnf clean all \
+    && mkdir /deployments \
+    && chown 1001 /deployments \
+    && chmod "g+rwX" /deployments \
+    && chown 1001:root /deployments \
+    && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
+    && chown 1001 /deployments/run-java.sh \
+    && chmod 540 /deployments/run-java.sh \
+    && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/conf/security/java.security
+
+# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
+ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+# We make four distinct layers so if there are application changes the library layers can be re-used
+COPY --from=builder --chown=1001 /app/target/quarkus-app/lib/ /deployments/lib/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/*.jar /deployments/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/app/ /deployments/app/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/quarkus/ /deployments/quarkus/
+
+EXPOSE 8080
+EXPOSE 9999
+USER 1001
+
+ENTRYPOINT [ "/deployments/run-java.sh" ]
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGateway.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ac456cbdbce39376f34c78b739f953d9f61c45f
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGateway.java
@@ -0,0 +1,5 @@
+package eu.teraflow.policy;
+
+import policy.PolicyService;
+
+public interface PolicyGateway extends PolicyService {}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b371ceda7f712f0199930653015ed33e3f66b51
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
@@ -0,0 +1,66 @@
+package eu.teraflow.policy;
+
+import context.ContextOuterClass;
+import io.quarkus.grpc.GrpcService;
+import io.smallrye.mutiny.Uni;
+import javax.inject.Inject;
+import policy.Policy;
+
+@GrpcService
+public class PolicyGatewayImpl implements PolicyGateway {
+
+    private final PolicyService policyService;
+
+    @Inject
+    public PolicyGatewayImpl(PolicyService policyService) {
+        this.policyService = policyService;
+    }
+
+    @Override
+    public Uni<Policy.PolicyRuleState> policyAdd(Policy.PolicyRule request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Policy.PolicyRuleState.newBuilder()
+                                        .setPolicyRuleId(request.getPolicyRuleId().getUuid())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Policy.PolicyRuleState> policyUpdate(Policy.PolicyRule request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Policy.PolicyRuleState.newBuilder()
+                                        .setPolicyRuleId(request.getPolicyRuleId().getUuid())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Policy.PolicyRuleState> policyDelete(Policy.PolicyRule request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Policy.PolicyRuleState.newBuilder()
+                                        .setPolicyRuleId(request.getPolicyRuleId().getUuid())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Policy.PolicyRule> getPolicy(Policy.PolicyRuleId request) {
+        return Uni.createFrom()
+                .item(() -> Policy.PolicyRule.newBuilder().setPolicyRuleId(request).build());
+    }
+
+    @Override
+    public Uni<Policy.PolicyRuleList> getPolicyByDeviceId(ContextOuterClass.DeviceId request) {
+
+        return Uni.createFrom().item(() -> Policy.PolicyRuleList.newBuilder().build());
+    }
+
+    @Override
+    public Uni<Policy.PolicyRuleList> getPolicyByServiceId(ContextOuterClass.ServiceId request) {
+
+        return Uni.createFrom().item(() -> Policy.PolicyRuleList.newBuilder().build());
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
new file mode 100644
index 0000000000000000000000000000000000000000..40bca174a1015f17a0b43a8cb40d084fac16692a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
@@ -0,0 +1,10 @@
+package eu.teraflow.policy;
+
+import eu.teraflow.policy.model.PolicyRule;
+import eu.teraflow.policy.model.PolicyRuleState;
+import io.smallrye.mutiny.Uni;
+
+public interface PolicyService {
+
+    Uni<PolicyRuleState> addPolicy(PolicyRule policyRule);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3453c33d97103c8b2042892ff32180b4a4b8235
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -0,0 +1,18 @@
+package eu.teraflow.policy;
+
+import eu.teraflow.policy.model.PolicyRule;
+import eu.teraflow.policy.model.PolicyRuleState;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import org.jboss.logging.Logger;
+
+@ApplicationScoped
+public class PolicyServiceImpl implements PolicyService {
+
+    private static final Logger LOGGER = Logger.getLogger(PolicyServiceImpl.class);
+
+    public Uni<PolicyRuleState> addPolicy(PolicyRule policyRule) {
+
+        return null;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/SimpleLivenessCheck.java b/src/policy/src/main/java/eu/teraflow/policy/SimpleLivenessCheck.java
new file mode 100644
index 0000000000000000000000000000000000000000..8619e304c77d1f557e62f4db69a8f7fb21b05c00
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/SimpleLivenessCheck.java
@@ -0,0 +1,16 @@
+package eu.teraflow.policy;
+
+import javax.enterprise.context.ApplicationScoped;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.Liveness;
+
+@Liveness
+@ApplicationScoped
+public class SimpleLivenessCheck implements HealthCheck {
+
+    @Override
+    public HealthCheckResponse call() {
+        return HealthCheckResponse.up("Policy Service");
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce3a46158115ffb1d06243c4f4fdd849aa72f81e
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
@@ -0,0 +1,3 @@
+package eu.teraflow.policy.context;
+
+public interface ContextService {}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ContextId.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ContextId.java
new file mode 100644
index 0000000000000000000000000000000000000000..c1390aaf7f45a8ca77ee2d5f9a86a8f84b629018
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ContextId.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.context.model;
+
+public class ContextId {
+
+    private final Uuid contextId;
+
+    public ContextId(Uuid contextId) {
+        this.contextId = contextId;
+    }
+
+    public Uuid getContextId() {
+        return contextId;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceId.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceId.java
new file mode 100644
index 0000000000000000000000000000000000000000..aed8752b67075387a4b04a7dd1d7c91895e5fc7f
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceId.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.context.model;
+
+public class DeviceId {
+
+    private final Uuid deviceId;
+
+    public DeviceId(Uuid deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    public Uuid getDeviceId() {
+        return deviceId;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Event.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Event.java
new file mode 100644
index 0000000000000000000000000000000000000000..a13f4baf5b303236a26d51828945e3bd702106e5
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Event.java
@@ -0,0 +1,20 @@
+package eu.teraflow.policy.context.model;
+
+public class Event {
+
+    private double timestamp;
+    private EventTypeEnum eventType;
+
+    public Event(double timestamp, EventTypeEnum eventType) {
+        this.timestamp = timestamp;
+        this.eventType = eventType;
+    }
+
+    public double getTimestamp() {
+        return timestamp;
+    }
+
+    public EventTypeEnum getEventTypeEnum() {
+        return eventType;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/EventTypeEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/EventTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..70a47815ddbb5f9e9c78c1dd67c1e681461caeb7
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/EventTypeEnum.java
@@ -0,0 +1,8 @@
+package eu.teraflow.policy.context.model;
+
+public enum EventTypeEnum {
+    UNDEFINED,
+    CREATE,
+    UPDATE,
+    REMOVE
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceId.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceId.java
new file mode 100644
index 0000000000000000000000000000000000000000..f76613ac4644a8e1867c2f8c0b15737e91695a12
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceId.java
@@ -0,0 +1,21 @@
+package eu.teraflow.policy.context.model;
+
+public class ServiceId {
+
+    private final ContextId contextId;
+    private final Uuid serviceUuid;
+
+    public ServiceId(ContextId contextId, Uuid serviceUuid) {
+
+        this.contextId = contextId;
+        this.serviceUuid = serviceUuid;
+    }
+
+    public ContextId getContextId() {
+        return contextId;
+    }
+
+    public Uuid getServiceUuid() {
+        return serviceUuid;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Uuid.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Uuid.java
new file mode 100644
index 0000000000000000000000000000000000000000..f805ce40a6c728dae39687f3b15d228a0c8abed3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Uuid.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.context.model;
+
+public class Uuid {
+
+    private String id;
+
+    public Uuid(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java
new file mode 100644
index 0000000000000000000000000000000000000000..17e403e6372891a6defc6b9fcc6cad03e546cb07
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java
@@ -0,0 +1,67 @@
+package eu.teraflow.policy.model;
+
+import eu.teraflow.policy.context.model.ContextId;
+import eu.teraflow.policy.context.model.ServiceId;
+
+public class PolicyRule {
+
+    private final PolicyRuleId policyRuleId;
+    private final PolicyRuleType policyRuleType;
+    private final PolicyRulePriority policyRulePriority;
+    private final PolicyRuleEvent policyRuleEvent;
+    private final PolicyRuleCondition policyRuleCondition;
+    private final PolicyRuleAction policyRuleAction;
+    private final ServiceId serviceId;
+    private final ContextId contextId;
+
+    public PolicyRule(
+            PolicyRuleId policyRuleId,
+            PolicyRuleType policyRuleType,
+            PolicyRulePriority policyRulePriority,
+            PolicyRuleEvent policyRuleEvent,
+            PolicyRuleCondition policyRuleCondition,
+            PolicyRuleAction policyRuleAction,
+            ServiceId serviceId,
+            ContextId contextId) {
+        this.policyRuleId = policyRuleId;
+        this.policyRuleType = policyRuleType;
+        this.policyRulePriority = policyRulePriority;
+        this.policyRuleEvent = policyRuleEvent;
+        this.policyRuleCondition = policyRuleCondition;
+        this.policyRuleAction = policyRuleAction;
+        this.serviceId = serviceId;
+        this.contextId = contextId;
+    }
+
+    public PolicyRuleId getPolicyRuleId() {
+        return policyRuleId;
+    }
+
+    public PolicyRuleType getPolicyRuleType() {
+        return policyRuleType;
+    }
+
+    public PolicyRulePriority getPolicyRulePriority() {
+        return policyRulePriority;
+    }
+
+    public PolicyRuleEvent getPolicyRuleEvent() {
+        return policyRuleEvent;
+    }
+
+    public PolicyRuleCondition getPolicyRuleCondition() {
+        return policyRuleCondition;
+    }
+
+    public PolicyRuleAction getPolicyRuleAction() {
+        return policyRuleAction;
+    }
+
+    public ServiceId getServiceId() {
+        return serviceId;
+    }
+
+    public ContextId getContextId() {
+        return contextId;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ad0a1cf78d704aca860f2c057a8135123e15a77
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java
@@ -0,0 +1,21 @@
+package eu.teraflow.policy.model;
+
+public class PolicyRuleAction {
+
+    private final PolicyRuleVariable policyRuleVariable;
+    private final PolicyRuleValue policyRuleValue;
+
+    public PolicyRuleAction(PolicyRuleVariable policyRuleVariable, PolicyRuleValue policyRuleValue) {
+
+        this.policyRuleVariable = policyRuleVariable;
+        this.policyRuleValue = policyRuleValue;
+    }
+
+    public PolicyRuleVariable getPolicyRuleVariable() {
+        return policyRuleVariable;
+    }
+
+    public PolicyRuleValue getPolicyRuleValue() {
+        return policyRuleValue;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9430ba33b00ccba8a47ee599487f6868127e731
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
@@ -0,0 +1,22 @@
+package eu.teraflow.policy.model;
+
+public class PolicyRuleCondition {
+
+    private final PolicyRuleVariable policyRuleVariable;
+    private final PolicyRuleValue policyRuleValue;
+
+    public PolicyRuleCondition(
+            PolicyRuleVariable policyRuleVariable, PolicyRuleValue policyRuleValue) {
+
+        this.policyRuleVariable = policyRuleVariable;
+        this.policyRuleValue = policyRuleValue;
+    }
+
+    public PolicyRuleVariable getPolicyRuleVariable() {
+        return policyRuleVariable;
+    }
+
+    public PolicyRuleValue getPolicyRuleValue() {
+        return policyRuleValue;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleEvent.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..09906960376e9b5e44b8b76f6b18a99b4f361120
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleEvent.java
@@ -0,0 +1,16 @@
+package eu.teraflow.policy.model;
+
+import eu.teraflow.policy.context.model.Event;
+
+public class PolicyRuleEvent {
+
+    private final Event event;
+
+    public PolicyRuleEvent(Event event) {
+        this.event = event;
+    }
+
+    public Event getEvent() {
+        return event;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleId.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleId.java
new file mode 100644
index 0000000000000000000000000000000000000000..27920ae4a8a7877212f229ec236010aacf67f47a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleId.java
@@ -0,0 +1,16 @@
+package eu.teraflow.policy.model;
+
+import eu.teraflow.policy.context.model.Uuid;
+
+public class PolicyRuleId {
+
+    private final Uuid policyRuleId;
+
+    public PolicyRuleId(Uuid policyRuleId) {
+        this.policyRuleId = policyRuleId;
+    }
+
+    public Uuid getPolicyRuleId() {
+        return policyRuleId;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRulePriority.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRulePriority.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9e42aef28f7ee43ee33e77d38a54dd92851ddbd
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRulePriority.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.model;
+
+public class PolicyRulePriority {
+
+    private final int policyRulePriority;
+
+    public PolicyRulePriority(int policyRulePriority) {
+        this.policyRulePriority = policyRulePriority;
+    }
+
+    public int getPolicyRulePriority() {
+        return policyRulePriority;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java
new file mode 100644
index 0000000000000000000000000000000000000000..97d3280e3ab2dcec8e5c732315bd4562616ea370
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java
@@ -0,0 +1,22 @@
+package eu.teraflow.policy.model;
+
+import eu.teraflow.policy.context.model.Uuid;
+
+public class PolicyRuleState {
+
+    private final Uuid policeRuleId;
+    private final RuleState ruleState;
+
+    public PolicyRuleState(Uuid policeRuleId, RuleState ruleState) {
+        this.policeRuleId = policeRuleId;
+        this.ruleState = ruleState;
+    }
+
+    public Uuid getPolicyRuleId() {
+        return policeRuleId;
+    }
+
+    public RuleState getRuleState() {
+        return ruleState;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..89dfd30013e2f9c2a86609c878f2ef59ce62e27a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java
@@ -0,0 +1,6 @@
+package eu.teraflow.policy.model;
+
+public enum PolicyRuleType {
+    DEVICE,
+    NETWORK
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleValue.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..60f7c00568905a0ee7cfa7eb1ababf85d310f79b
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleValue.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.model;
+
+public class PolicyRuleValue {
+
+    private final String policyRuleValue;
+
+    public PolicyRuleValue(String policyRuleValue) {
+        this.policyRuleValue = policyRuleValue;
+    }
+
+    public String getPolicyRuleValue() {
+        return policyRuleValue;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleVariable.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleVariable.java
new file mode 100644
index 0000000000000000000000000000000000000000..1998cb7c65289182d854ed3d14c76239e7d0ac5d
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleVariable.java
@@ -0,0 +1,14 @@
+package eu.teraflow.policy.model;
+
+public class PolicyRuleVariable {
+
+    private final String policyRuleVariable;
+
+    public PolicyRuleVariable(String policyRuleVariable) {
+        this.policyRuleVariable = policyRuleVariable;
+    }
+
+    public String getPolicyRuleVariable() {
+        return policyRuleVariable;
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec1ba135fee4a98d9b22f7ec2511c6769c8c693c
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java
@@ -0,0 +1,7 @@
+package eu.teraflow.policy.model;
+
+public enum RuleState {
+    POLICY_INACTIVE,
+    POLICY_PLANNED,
+    POLICY_ACTIVE
+}
diff --git a/src/policy/src/main/proto/context.proto b/src/policy/src/main/proto/context.proto
new file mode 120000
index 0000000000000000000000000000000000000000..7f33c4bc783bd20d031d94ab3b2e94f0d76ecd95
--- /dev/null
+++ b/src/policy/src/main/proto/context.proto
@@ -0,0 +1 @@
+../../../../../proto/context.proto
\ No newline at end of file
diff --git a/src/policy/src/main/proto/policy.proto b/src/policy/src/main/proto/policy.proto
new file mode 120000
index 0000000000000000000000000000000000000000..df455f9611632300f34c690b7b3ddcc1f97d10ec
--- /dev/null
+++ b/src/policy/src/main/proto/policy.proto
@@ -0,0 +1 @@
+../../../../../proto/policy.proto
\ No newline at end of file
diff --git a/src/policy/src/main/resources/application.yml b/src/policy/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..45c42a3c15c5c1b5521cdc4b55e2f472c7728640
--- /dev/null
+++ b/src/policy/src/main/resources/application.yml
@@ -0,0 +1,31 @@
+quarkus:
+  grpc:
+    server:
+      port: 9999
+      enable-reflection-service: true
+  http:
+    port: 8080
+  container-image:
+    group: teraflow-h2020
+    name: controller/policy
+    tag: 0.0.1
+    registry: registry.gitlab.com
+  kubernetes:
+    name: policyservice
+    image-pull-policy: Always
+    service-type: NodePort
+    labels:
+      app: policyservice
+    readiness-probe:
+      initial-delay: 5s
+      period: 45s
+    liveness-probe:
+      initial-delay: 5s
+      period: 45s
+    ports:
+      http:
+        host-port: 8080
+        container-port: 8080
+      grpc-server:
+        host-port: 9999
+        container-port: 9999
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9ba00bdf1ff4c7190df717c07802336073ec5aa
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -0,0 +1,160 @@
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import context.ContextOuterClass;
+import io.quarkus.grpc.GrpcClient;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.jboss.logging.Logger;
+import org.junit.jupiter.api.Test;
+import policy.Policy;
+import policy.PolicyService;
+
+@QuarkusTest
+class PolicyServiceTest {
+    private static final Logger LOGGER = Logger.getLogger(PolicyServiceTest.class);
+
+    @GrpcClient PolicyService client;
+
+    @Test
+    void shouldAddPolicy() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
+        final var policyRule = Policy.PolicyRule.newBuilder().setPolicyRuleId(policyRuleId).build();
+
+        client
+                .policyAdd(policyRule)
+                .subscribe()
+                .with(
+                        policyRuleState -> {
+                            LOGGER.infof("Adding policy: %s", policyRuleState.getPolicyRuleId().getUuid());
+                            message.complete(policyRuleState.getPolicyRuleId().getUuid());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid());
+    }
+
+    @Test
+    void shouldUpdatePolicy() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
+        final var policyRule = Policy.PolicyRule.newBuilder().setPolicyRuleId(policyRuleId).build();
+
+        client
+                .policyUpdate(policyRule)
+                .subscribe()
+                .with(
+                        policyRuleState -> {
+                            LOGGER.infof("Updating policy: %s", policyRuleState.getPolicyRuleId().getUuid());
+                            message.complete(policyRuleState.getPolicyRuleId().getUuid());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid());
+    }
+
+    @Test
+    void shouldDeletePolicy() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
+        final var policyRule = Policy.PolicyRule.newBuilder().setPolicyRuleId(policyRuleId).build();
+
+        client
+                .policyDelete(policyRule)
+                .subscribe()
+                .with(
+                        policyRuleState -> {
+                            LOGGER.infof("Deleting policy: %s", policyRuleState.getPolicyRuleId().getUuid());
+                            message.complete(policyRuleState.getPolicyRuleId().getUuid());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid());
+    }
+
+    @Test
+    void shouldGetPolicy() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
+
+        client
+                .getPolicy(policyRuleId)
+                .subscribe()
+                .with(
+                        policyRuleState -> {
+                            LOGGER.infof(
+                                    "Getting policy with ID: %s",
+                                    policyRuleState.getPolicyRuleId().getUuid().getUuid());
+                            message.complete(policyRuleState.getPolicyRuleId().getUuid().getUuid());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid());
+    }
+
+    @Test
+    void shouldGetPolicyByDeviceId()
+            throws ExecutionException, InterruptedException, TimeoutException {
+
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var deviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuid).build();
+
+        client
+                .getPolicyByDeviceId(deviceId)
+                .subscribe()
+                .with(
+                        policyRuleList -> {
+                            LOGGER.infof("Getting policyRuleList with ID: %s", policyRuleList);
+                            message.complete(policyRuleList.toString());
+                        });
+
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty();
+    }
+
+    @Test
+    void shouldGetPolicyByServiceId()
+            throws ExecutionException, InterruptedException, TimeoutException {
+
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var serviceId = ContextOuterClass.ServiceId.newBuilder().setServiceUuid(uuid).build();
+
+        client
+                .getPolicyByServiceId(serviceId)
+                .subscribe()
+                .with(
+                        policyRuleList -> {
+                            LOGGER.infof("Getting policyRuleList with ID: %s", policyRuleList);
+                            message.complete(policyRuleList.toString());
+                        });
+
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty();
+    }
+}
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..473bfa689e1a6df4d08ed8ddb76c746969f317dd
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -0,0 +1,36586 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: context.proto
+
+package context;
+
+public final class ContextOuterClass {
+  private ContextOuterClass() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code context.EventTypeEnum}
+   */
+  public enum EventTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>EVENTTYPE_UNDEFINED = 0;</code>
+     */
+    EVENTTYPE_UNDEFINED(0),
+    /**
+     * <code>EVENTTYPE_CREATE = 1;</code>
+     */
+    EVENTTYPE_CREATE(1),
+    /**
+     * <code>EVENTTYPE_UPDATE = 2;</code>
+     */
+    EVENTTYPE_UPDATE(2),
+    /**
+     * <code>EVENTTYPE_REMOVE = 3;</code>
+     */
+    EVENTTYPE_REMOVE(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>EVENTTYPE_UNDEFINED = 0;</code>
+     */
+    public static final int EVENTTYPE_UNDEFINED_VALUE = 0;
+    /**
+     * <code>EVENTTYPE_CREATE = 1;</code>
+     */
+    public static final int EVENTTYPE_CREATE_VALUE = 1;
+    /**
+     * <code>EVENTTYPE_UPDATE = 2;</code>
+     */
+    public static final int EVENTTYPE_UPDATE_VALUE = 2;
+    /**
+     * <code>EVENTTYPE_REMOVE = 3;</code>
+     */
+    public static final int EVENTTYPE_REMOVE_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static EventTypeEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static EventTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return EVENTTYPE_UNDEFINED;
+        case 1: return EVENTTYPE_CREATE;
+        case 2: return EVENTTYPE_UPDATE;
+        case 3: return EVENTTYPE_REMOVE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        EventTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>() {
+            public EventTypeEnum findValueByNumber(int number) {
+              return EventTypeEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final EventTypeEnum[] VALUES = values();
+
+    public static EventTypeEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private EventTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.EventTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.DeviceDriverEnum}
+   */
+  public enum DeviceDriverEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * also used for emulated
+     * </pre>
+     *
+     * <code>DEVICEDRIVER_UNDEFINED = 0;</code>
+     */
+    DEVICEDRIVER_UNDEFINED(0),
+    /**
+     * <code>DEVICEDRIVER_OPENCONFIG = 1;</code>
+     */
+    DEVICEDRIVER_OPENCONFIG(1),
+    /**
+     * <code>DEVICEDRIVER_TRANSPORT_API = 2;</code>
+     */
+    DEVICEDRIVER_TRANSPORT_API(2),
+    /**
+     * <code>DEVICEDRIVER_P4 = 3;</code>
+     */
+    DEVICEDRIVER_P4(3),
+    /**
+     * <code>DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;</code>
+     */
+    DEVICEDRIVER_IETF_NETWORK_TOPOLOGY(4),
+    /**
+     * <code>DEVICEDRIVER_ONF_TR_352 = 5;</code>
+     */
+    DEVICEDRIVER_ONF_TR_352(5),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * also used for emulated
+     * </pre>
+     *
+     * <code>DEVICEDRIVER_UNDEFINED = 0;</code>
+     */
+    public static final int DEVICEDRIVER_UNDEFINED_VALUE = 0;
+    /**
+     * <code>DEVICEDRIVER_OPENCONFIG = 1;</code>
+     */
+    public static final int DEVICEDRIVER_OPENCONFIG_VALUE = 1;
+    /**
+     * <code>DEVICEDRIVER_TRANSPORT_API = 2;</code>
+     */
+    public static final int DEVICEDRIVER_TRANSPORT_API_VALUE = 2;
+    /**
+     * <code>DEVICEDRIVER_P4 = 3;</code>
+     */
+    public static final int DEVICEDRIVER_P4_VALUE = 3;
+    /**
+     * <code>DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;</code>
+     */
+    public static final int DEVICEDRIVER_IETF_NETWORK_TOPOLOGY_VALUE = 4;
+    /**
+     * <code>DEVICEDRIVER_ONF_TR_352 = 5;</code>
+     */
+    public static final int DEVICEDRIVER_ONF_TR_352_VALUE = 5;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static DeviceDriverEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static DeviceDriverEnum forNumber(int value) {
+      switch (value) {
+        case 0: return DEVICEDRIVER_UNDEFINED;
+        case 1: return DEVICEDRIVER_OPENCONFIG;
+        case 2: return DEVICEDRIVER_TRANSPORT_API;
+        case 3: return DEVICEDRIVER_P4;
+        case 4: return DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+        case 5: return DEVICEDRIVER_ONF_TR_352;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<DeviceDriverEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        DeviceDriverEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<DeviceDriverEnum>() {
+            public DeviceDriverEnum findValueByNumber(int number) {
+              return DeviceDriverEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final DeviceDriverEnum[] VALUES = values();
+
+    public static DeviceDriverEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private DeviceDriverEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.DeviceDriverEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.DeviceOperationalStatusEnum}
+   */
+  public enum DeviceOperationalStatusEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_UNDEFINED = 0;</code>
+     */
+    DEVICEOPERATIONALSTATUS_UNDEFINED(0),
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_DISABLED = 1;</code>
+     */
+    DEVICEOPERATIONALSTATUS_DISABLED(1),
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_ENABLED = 2;</code>
+     */
+    DEVICEOPERATIONALSTATUS_ENABLED(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_UNDEFINED = 0;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_UNDEFINED_VALUE = 0;
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_DISABLED = 1;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_DISABLED_VALUE = 1;
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_ENABLED = 2;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_ENABLED_VALUE = 2;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static DeviceOperationalStatusEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static DeviceOperationalStatusEnum forNumber(int value) {
+      switch (value) {
+        case 0: return DEVICEOPERATIONALSTATUS_UNDEFINED;
+        case 1: return DEVICEOPERATIONALSTATUS_DISABLED;
+        case 2: return DEVICEOPERATIONALSTATUS_ENABLED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<DeviceOperationalStatusEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        DeviceOperationalStatusEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<DeviceOperationalStatusEnum>() {
+            public DeviceOperationalStatusEnum findValueByNumber(int number) {
+              return DeviceOperationalStatusEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(2);
+    }
+
+    private static final DeviceOperationalStatusEnum[] VALUES = values();
+
+    public static DeviceOperationalStatusEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private DeviceOperationalStatusEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.DeviceOperationalStatusEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.ServiceTypeEnum}
+   */
+  public enum ServiceTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>SERVICETYPE_UNKNOWN = 0;</code>
+     */
+    SERVICETYPE_UNKNOWN(0),
+    /**
+     * <code>SERVICETYPE_L3NM = 1;</code>
+     */
+    SERVICETYPE_L3NM(1),
+    /**
+     * <code>SERVICETYPE_L2NM = 2;</code>
+     */
+    SERVICETYPE_L2NM(2),
+    /**
+     * <code>SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3;</code>
+     */
+    SERVICETYPE_TAPI_CONNECTIVITY_SERVICE(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>SERVICETYPE_UNKNOWN = 0;</code>
+     */
+    public static final int SERVICETYPE_UNKNOWN_VALUE = 0;
+    /**
+     * <code>SERVICETYPE_L3NM = 1;</code>
+     */
+    public static final int SERVICETYPE_L3NM_VALUE = 1;
+    /**
+     * <code>SERVICETYPE_L2NM = 2;</code>
+     */
+    public static final int SERVICETYPE_L2NM_VALUE = 2;
+    /**
+     * <code>SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3;</code>
+     */
+    public static final int SERVICETYPE_TAPI_CONNECTIVITY_SERVICE_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static ServiceTypeEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static ServiceTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return SERVICETYPE_UNKNOWN;
+        case 1: return SERVICETYPE_L3NM;
+        case 2: return SERVICETYPE_L2NM;
+        case 3: return SERVICETYPE_TAPI_CONNECTIVITY_SERVICE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ServiceTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ServiceTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ServiceTypeEnum>() {
+            public ServiceTypeEnum findValueByNumber(int number) {
+              return ServiceTypeEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(3);
+    }
+
+    private static final ServiceTypeEnum[] VALUES = values();
+
+    public static ServiceTypeEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private ServiceTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ServiceTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.ServiceStatusEnum}
+   */
+  public enum ServiceStatusEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>SERVICESTATUS_UNDEFINED = 0;</code>
+     */
+    SERVICESTATUS_UNDEFINED(0),
+    /**
+     * <code>SERVICESTATUS_PLANNED = 1;</code>
+     */
+    SERVICESTATUS_PLANNED(1),
+    /**
+     * <code>SERVICESTATUS_ACTIVE = 2;</code>
+     */
+    SERVICESTATUS_ACTIVE(2),
+    /**
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     */
+    SERVICESTATUS_PENDING_REMOVAL(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>SERVICESTATUS_UNDEFINED = 0;</code>
+     */
+    public static final int SERVICESTATUS_UNDEFINED_VALUE = 0;
+    /**
+     * <code>SERVICESTATUS_PLANNED = 1;</code>
+     */
+    public static final int SERVICESTATUS_PLANNED_VALUE = 1;
+    /**
+     * <code>SERVICESTATUS_ACTIVE = 2;</code>
+     */
+    public static final int SERVICESTATUS_ACTIVE_VALUE = 2;
+    /**
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     */
+    public static final int SERVICESTATUS_PENDING_REMOVAL_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static ServiceStatusEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static ServiceStatusEnum forNumber(int value) {
+      switch (value) {
+        case 0: return SERVICESTATUS_UNDEFINED;
+        case 1: return SERVICESTATUS_PLANNED;
+        case 2: return SERVICESTATUS_ACTIVE;
+        case 3: return SERVICESTATUS_PENDING_REMOVAL;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ServiceStatusEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ServiceStatusEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ServiceStatusEnum>() {
+            public ServiceStatusEnum findValueByNumber(int number) {
+              return ServiceStatusEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(4);
+    }
+
+    private static final ServiceStatusEnum[] VALUES = values();
+
+    public static ServiceStatusEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private ServiceStatusEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ServiceStatusEnum)
+  }
+
+  /**
+   * <pre>
+   * ----- Configuration -------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf enum {@code context.ConfigActionEnum}
+   */
+  public enum ConfigActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>CONFIGACTION_UNDEFINED = 0;</code>
+     */
+    CONFIGACTION_UNDEFINED(0),
+    /**
+     * <code>CONFIGACTION_SET = 1;</code>
+     */
+    CONFIGACTION_SET(1),
+    /**
+     * <code>CONFIGACTION_DELETE = 2;</code>
+     */
+    CONFIGACTION_DELETE(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>CONFIGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int CONFIGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>CONFIGACTION_SET = 1;</code>
+     */
+    public static final int CONFIGACTION_SET_VALUE = 1;
+    /**
+     * <code>CONFIGACTION_DELETE = 2;</code>
+     */
+    public static final int CONFIGACTION_DELETE_VALUE = 2;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static ConfigActionEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static ConfigActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return CONFIGACTION_UNDEFINED;
+        case 1: return CONFIGACTION_SET;
+        case 2: return CONFIGACTION_DELETE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ConfigActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ConfigActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ConfigActionEnum>() {
+            public ConfigActionEnum findValueByNumber(int number) {
+              return ConfigActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(5);
+    }
+
+    private static final ConfigActionEnum[] VALUES = values();
+
+    public static ConfigActionEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private ConfigActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ConfigActionEnum)
+  }
+
+  public interface EmptyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Empty)
+      com.google.protobuf.MessageOrBuilder {
+  }
+  /**
+   * <pre>
+   * ----- Generic -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Empty}
+   */
+  public static final class Empty extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Empty)
+      EmptyOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Empty.newBuilder() to construct.
+    private Empty(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Empty() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Empty();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Empty(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Empty_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Empty_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Empty.class, context.ContextOuterClass.Empty.Builder.class);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Empty)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Empty other = (context.ContextOuterClass.Empty) obj;
+
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Empty parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Empty prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Generic -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Empty}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Empty)
+        context.ContextOuterClass.EmptyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Empty_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Empty_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Empty.class, context.ContextOuterClass.Empty.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Empty.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Empty_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty getDefaultInstanceForType() {
+        return context.ContextOuterClass.Empty.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty build() {
+        context.ContextOuterClass.Empty result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty buildPartial() {
+        context.ContextOuterClass.Empty result = new context.ContextOuterClass.Empty(this);
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Empty) {
+          return mergeFrom((context.ContextOuterClass.Empty)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Empty other) {
+        if (other == context.ContextOuterClass.Empty.getDefaultInstance()) return this;
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Empty parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Empty) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Empty)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Empty)
+    private static final context.ContextOuterClass.Empty DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Empty();
+    }
+
+    public static context.ContextOuterClass.Empty getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Empty>
+        PARSER = new com.google.protobuf.AbstractParser<Empty>() {
+      @java.lang.Override
+      public Empty parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Empty(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Empty> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Empty> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Empty getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UuidOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Uuid)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The uuid.
+     */
+    java.lang.String getUuid();
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The bytes for uuid.
+     */
+    com.google.protobuf.ByteString
+        getUuidBytes();
+  }
+  /**
+   * Protobuf type {@code context.Uuid}
+   */
+  public static final class Uuid extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Uuid)
+      UuidOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Uuid.newBuilder() to construct.
+    private Uuid(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Uuid() {
+      uuid_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Uuid();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Uuid(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              uuid_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Uuid_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Uuid.class, context.ContextOuterClass.Uuid.Builder.class);
+    }
+
+    public static final int UUID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object uuid_;
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The uuid.
+     */
+    @java.lang.Override
+    public java.lang.String getUuid() {
+      java.lang.Object ref = uuid_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        uuid_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The bytes for uuid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUuidBytes() {
+      java.lang.Object ref = uuid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        uuid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getUuidBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uuid_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getUuidBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uuid_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Uuid)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Uuid other = (context.ContextOuterClass.Uuid) obj;
+
+      if (!getUuid()
+          .equals(other.getUuid())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + UUID_FIELD_NUMBER;
+      hash = (53 * hash) + getUuid().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Uuid parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Uuid prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Uuid}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Uuid)
+        context.ContextOuterClass.UuidOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Uuid_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Uuid.class, context.ContextOuterClass.Uuid.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Uuid.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        uuid_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid getDefaultInstanceForType() {
+        return context.ContextOuterClass.Uuid.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid build() {
+        context.ContextOuterClass.Uuid result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid buildPartial() {
+        context.ContextOuterClass.Uuid result = new context.ContextOuterClass.Uuid(this);
+        result.uuid_ = uuid_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Uuid) {
+          return mergeFrom((context.ContextOuterClass.Uuid)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Uuid other) {
+        if (other == context.ContextOuterClass.Uuid.getDefaultInstance()) return this;
+        if (!other.getUuid().isEmpty()) {
+          uuid_ = other.uuid_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Uuid parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Uuid) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object uuid_ = "";
+      /**
+       * <code>string uuid = 1;</code>
+       * @return The uuid.
+       */
+      public java.lang.String getUuid() {
+        java.lang.Object ref = uuid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uuid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @return The bytes for uuid.
+       */
+      public com.google.protobuf.ByteString
+          getUuidBytes() {
+        java.lang.Object ref = uuid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uuid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @param value The uuid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUuid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uuid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUuid() {
+        
+        uuid_ = getDefaultInstance().getUuid();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @param value The bytes for uuid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUuidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uuid_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Uuid)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Uuid)
+    private static final context.ContextOuterClass.Uuid DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Uuid();
+    }
+
+    public static context.ContextOuterClass.Uuid getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Uuid>
+        PARSER = new com.google.protobuf.AbstractParser<Uuid>() {
+      @java.lang.Override
+      public Uuid parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Uuid(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Uuid> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Uuid> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Event)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>double timestamp = 1;</code>
+     * @return The timestamp.
+     */
+    double getTimestamp();
+
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    int getEventTypeValue();
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    context.ContextOuterClass.EventTypeEnum getEventType();
+  }
+  /**
+   * Protobuf type {@code context.Event}
+   */
+  public static final class Event extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Event)
+      EventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Event.newBuilder() to construct.
+    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Event() {
+      eventType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Event();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Event(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+
+              timestamp_ = input.readDouble();
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              eventType_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Event_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 1;
+    private double timestamp_;
+    /**
+     * <code>double timestamp = 1;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public double getTimestamp() {
+      return timestamp_;
+    }
+
+    public static final int EVENT_TYPE_FIELD_NUMBER = 2;
+    private int eventType_;
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    @java.lang.Override public int getEventTypeValue() {
+      return eventType_;
+    }
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    @java.lang.Override public context.ContextOuterClass.EventTypeEnum getEventType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+      return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (timestamp_ != 0D) {
+        output.writeDouble(1, timestamp_);
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, eventType_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (timestamp_ != 0D) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(1, timestamp_);
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, eventType_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Event)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) obj;
+
+      if (java.lang.Double.doubleToLongBits(getTimestamp())
+          != java.lang.Double.doubleToLongBits(
+              other.getTimestamp())) return false;
+      if (eventType_ != other.eventType_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getTimestamp()));
+      hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + eventType_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Event parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Event parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Event parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Event parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Event parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Event parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Event prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Event}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Event)
+        context.ContextOuterClass.EventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Event.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        timestamp_ = 0D;
+
+        eventType_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event getDefaultInstanceForType() {
+        return context.ContextOuterClass.Event.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event build() {
+        context.ContextOuterClass.Event result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event buildPartial() {
+        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+        result.timestamp_ = timestamp_;
+        result.eventType_ = eventType_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Event) {
+          return mergeFrom((context.ContextOuterClass.Event)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Event other) {
+        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+        if (other.getTimestamp() != 0D) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.eventType_ != 0) {
+          setEventTypeValue(other.getEventTypeValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Event parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private double timestamp_ ;
+      /**
+       * <code>double timestamp = 1;</code>
+       * @return The timestamp.
+       */
+      @java.lang.Override
+      public double getTimestamp() {
+        return timestamp_;
+      }
+      /**
+       * <code>double timestamp = 1;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(double value) {
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>double timestamp = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private int eventType_ = 0;
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The enum numeric value on the wire for eventType.
+       */
+      @java.lang.Override public int getEventTypeValue() {
+        return eventType_;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The enum numeric value on the wire for eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventTypeValue(int value) {
+        
+        eventType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The eventType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.EventTypeEnum getEventType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+        return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventType(context.ContextOuterClass.EventTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        eventType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEventType() {
+        
+        eventType_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Event)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Event)
+    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
+    }
+
+    public static context.ContextOuterClass.Event getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Event>
+        PARSER = new com.google.protobuf.AbstractParser<Event>() {
+      @java.lang.Override
+      public Event parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Event(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Event> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Event> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Event getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
+     */
+    boolean hasContextUuid();
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
+     */
+    context.ContextOuterClass.Uuid getContextUuid();
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Context -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ContextId}
+   */
+  public static final class ContextId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextId)
+      ContextIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextId.newBuilder() to construct.
+    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (contextUuid_ != null) {
+                subBuilder = contextUuid_.toBuilder();
+              }
+              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextUuid_);
+                contextUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+    }
+
+    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid contextUuid_;
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextUuid() {
+      return contextUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getContextUuid() {
+      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+    }
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+      return getContextUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextUuid_ != null) {
+        output.writeMessage(1, getContextUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
+
+      if (hasContextUuid() != other.hasContextUuid()) return false;
+      if (hasContextUuid()) {
+        if (!getContextUuid()
+            .equals(other.getContextUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextUuid()) {
+        hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Context -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ContextId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextId)
+        context.ContextOuterClass.ContextIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
+        } else {
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId build() {
+        context.ContextOuterClass.ContextId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId buildPartial() {
+        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
+        if (contextUuidBuilder_ == null) {
+          result.contextUuid_ = contextUuid_;
+        } else {
+          result.contextUuid_ = contextUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextId) {
+          return mergeFrom((context.ContextOuterClass.ContextId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextId other) {
+        if (other == context.ContextOuterClass.ContextId.getDefaultInstance()) return this;
+        if (other.hasContextUuid()) {
+          mergeContextUuid(other.getContextUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid contextUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return Whether the contextUuid field is set.
+       */
+      public boolean hasContextUuid() {
+        return contextUuidBuilder_ != null || contextUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return The contextUuid.
+       */
+      public context.ContextOuterClass.Uuid getContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+        } else {
+          return contextUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextUuid_ = value;
+          onChanged();
+        } else {
+          contextUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder setContextUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (contextUuid_ != null) {
+            contextUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
+          } else {
+            contextUuid_ = value;
+          }
+          onChanged();
+        } else {
+          contextUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder clearContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
+          onChanged();
+        } else {
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
+        
+        onChanged();
+        return getContextUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+        if (contextUuidBuilder_ != null) {
+          return contextUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return contextUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getContextUuidFieldBuilder() {
+        if (contextUuidBuilder_ == null) {
+          contextUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getContextUuid(),
+                  getParentForChildren(),
+                  isClean());
+          contextUuid_ = null;
+        }
+        return contextUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextId)
+    private static final context.ContextOuterClass.ContextId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextId();
+    }
+
+    public static context.ContextOuterClass.ContextId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextId>
+        PARSER = new com.google.protobuf.AbstractParser<ContextId>() {
+      @java.lang.Override
+      public ContextId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Context)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    boolean hasController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    context.ContextOuterClass.TeraFlowController getController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Context}
+   */
+  public static final class Context extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Context)
+      ContextOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Context.newBuilder() to construct.
+    private Context(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Context() {
+      topologyIds_ = java.util.Collections.emptyList();
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Context();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Context(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
+              if (controller_ != null) {
+                subBuilder = controller_.toBuilder();
+              }
+              controller_ = input.readMessage(context.ContextOuterClass.TeraFlowController.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(controller_);
+                controller_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Context_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.get(index);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
+    }
+
+    public static final int CONTROLLER_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.TeraFlowController controller_;
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    @java.lang.Override
+    public boolean hasController() {
+      return controller_ != null;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowController getController() {
+      return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+      return getController();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        output.writeMessage(4, getController());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getController());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Context)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Context other = (context.ContextOuterClass.Context) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
+      if (hasController() != other.hasController()) return false;
+      if (hasController()) {
+        if (!getController()
+            .equals(other.getController())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
+      }
+      if (hasController()) {
+        hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
+        hash = (53 * hash) + getController().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Context prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Context}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Context)
+        context.ContextOuterClass.ContextOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Context.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+          getServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context getDefaultInstanceForType() {
+        return context.ContextOuterClass.Context.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context build() {
+        context.ContextOuterClass.Context result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context buildPartial() {
+        context.ContextOuterClass.Context result = new context.ContextOuterClass.Context(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.build();
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        if (controllerBuilder_ == null) {
+          result.controller_ = controller_;
+        } else {
+          result.controller_ = controllerBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Context) {
+          return mergeFrom((context.ContextOuterClass.Context)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Context other) {
+        if (other == context.ContextOuterClass.Context.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        if (other.hasController()) {
+          mergeController(other.getController());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Context parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
+        } else {
+          return serviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.TeraFlowController controller_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return Whether the controller field is set.
+       */
+      public boolean hasController() {
+        return controllerBuilder_ != null || controller_ != null;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return The controller.
+       */
+      public context.ContextOuterClass.TeraFlowController getController() {
+        if (controllerBuilder_ == null) {
+          return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        } else {
+          return controllerBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          controller_ = value;
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(
+          context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
+        if (controllerBuilder_ == null) {
+          controller_ = builderForValue.build();
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (controller_ != null) {
+            controller_ =
+              context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
+          } else {
+            controller_ = value;
+          }
+          onChanged();
+        } else {
+          controllerBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder clearController() {
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+          onChanged();
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
+        
+        onChanged();
+        return getControllerFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+        if (controllerBuilder_ != null) {
+          return controllerBuilder_.getMessageOrBuilder();
+        } else {
+          return controller_ == null ?
+              context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
+          getControllerFieldBuilder() {
+        if (controllerBuilder_ == null) {
+          controllerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder>(
+                  getController(),
+                  getParentForChildren(),
+                  isClean());
+          controller_ = null;
+        }
+        return controllerBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Context)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Context)
+    private static final context.ContextOuterClass.Context DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Context();
+    }
+
+    public static context.ContextOuterClass.Context getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Context>
+        PARSER = new com.google.protobuf.AbstractParser<Context>() {
+      @java.lang.Override
+      public Context parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Context(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Context> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Context> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Context getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ContextId> 
+        getContextIdsList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextId getContextIds(int index);
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    int getContextIdsCount();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextIdList}
+   */
+  public static final class ContextIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextIdList)
+      ContextIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextIdList.newBuilder() to construct.
+    private ContextIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextIdList() {
+      contextIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contextIds_.add(
+                  input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+    }
+
+    public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextIdsCount() {
+      return contextIds_.size();
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextIds(int index) {
+      return contextIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index) {
+      return contextIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < contextIds_.size(); i++) {
+        output.writeMessage(1, contextIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < contextIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contextIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
+
+      if (!getContextIdsList()
+          .equals(other.getContextIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getContextIdsCount() > 0) {
+        hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextIdList)
+        context.ContextOuterClass.ContextIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList build() {
+        context.ContextOuterClass.ContextIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList buildPartial() {
+        context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contextIds_ = contextIds_;
+        } else {
+          result.contextIds_ = contextIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextIdList) {
+          return mergeFrom((context.ContextOuterClass.ContextIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextIdList other) {
+        if (other == context.ContextOuterClass.ContextIdList.getDefaultInstance()) return this;
+        if (contextIdsBuilder_ == null) {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIds_.isEmpty()) {
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextIdsIsMutable();
+              contextIds_.addAll(other.contextIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIdsBuilder_.isEmpty()) {
+              contextIdsBuilder_.dispose();
+              contextIdsBuilder_ = null;
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextIdsFieldBuilder() : null;
+            } else {
+              contextIdsBuilder_.addAllMessages(other.contextIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ContextId> contextIds_ =
+        java.util.Collections.emptyList();
+      private void ensureContextIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>(contextIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+        if (contextIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        } else {
+          return contextIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public int getContextIdsCount() {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.size();
+        } else {
+          return contextIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId getContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);
+        } else {
+          return contextIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addAllContextIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ContextId> values) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contextIds_);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder clearContextIds() {
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder removeContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.remove(index);
+          onChanged();
+        } else {
+          contextIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+          int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);  } else {
+          return contextIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+           getContextIdsOrBuilderList() {
+        if (contextIdsBuilder_ != null) {
+          return contextIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder() {
+        return getContextIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId.Builder> 
+           getContextIdsBuilderList() {
+        return getContextIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdsFieldBuilder() {
+        if (contextIdsBuilder_ == null) {
+          contextIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  contextIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contextIds_ = null;
+        }
+        return contextIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextIdList)
+    private static final context.ContextOuterClass.ContextIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextIdList();
+    }
+
+    public static context.ContextOuterClass.ContextIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextIdList>() {
+      @java.lang.Override
+      public ContextIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Context> 
+        getContextsList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.Context getContexts(int index);
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    int getContextsCount();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextList}
+   */
+  public static final class ContextList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextList)
+      ContextListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextList.newBuilder() to construct.
+    private ContextList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextList() {
+      contexts_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contexts_.add(
+                  input.readMessage(context.ContextOuterClass.Context.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          contexts_ = java.util.Collections.unmodifiableList(contexts_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+    }
+
+    public static final int CONTEXTS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Context> contexts_;
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextsCount() {
+      return contexts_.size();
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Context getContexts(int index) {
+      return contexts_.get(index);
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index) {
+      return contexts_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < contexts_.size(); i++) {
+        output.writeMessage(1, contexts_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < contexts_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contexts_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
+
+      if (!getContextsList()
+          .equals(other.getContextsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getContextsCount() > 0) {
+        hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextList)
+        context.ContextOuterClass.ContextListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList build() {
+        context.ContextOuterClass.ContextList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList buildPartial() {
+        context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contexts_ = java.util.Collections.unmodifiableList(contexts_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contexts_ = contexts_;
+        } else {
+          result.contexts_ = contextsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextList) {
+          return mergeFrom((context.ContextOuterClass.ContextList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextList other) {
+        if (other == context.ContextOuterClass.ContextList.getDefaultInstance()) return this;
+        if (contextsBuilder_ == null) {
+          if (!other.contexts_.isEmpty()) {
+            if (contexts_.isEmpty()) {
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextsIsMutable();
+              contexts_.addAll(other.contexts_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contexts_.isEmpty()) {
+            if (contextsBuilder_.isEmpty()) {
+              contextsBuilder_.dispose();
+              contextsBuilder_ = null;
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextsFieldBuilder() : null;
+            } else {
+              contextsBuilder_.addAllMessages(other.contexts_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Context> contexts_ =
+        java.util.Collections.emptyList();
+      private void ensureContextsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>(contexts_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> contextsBuilder_;
+
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+        if (contextsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contexts_);
+        } else {
+          return contextsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public int getContextsCount() {
+        if (contextsBuilder_ == null) {
+          return contexts_.size();
+        } else {
+          return contextsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context getContexts(int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);
+        } else {
+          return contextsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.set(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addAllContexts(
+          java.lang.Iterable<? extends context.ContextOuterClass.Context> values) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contexts_);
+          onChanged();
+        } else {
+          contextsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder clearContexts() {
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder removeContexts(int index) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.remove(index);
+          onChanged();
+        } else {
+          contextsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder getContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+          int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);  } else {
+          return contextsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+           getContextsOrBuilderList() {
+        if (contextsBuilder_ != null) {
+          return contextsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contexts_);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder() {
+        return getContextsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context.Builder> 
+           getContextsBuilderList() {
+        return getContextsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> 
+          getContextsFieldBuilder() {
+        if (contextsBuilder_ == null) {
+          contextsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder>(
+                  contexts_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contexts_ = null;
+        }
+        return contextsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextList)
+    private static final context.ContextOuterClass.ContextList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextList();
+    }
+
+    public static context.ContextOuterClass.ContextList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextList>() {
+      @java.lang.Override
+      public ContextList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ContextEvent}
+   */
+  public static final class ContextEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextEvent)
+      ContextEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextEvent.newBuilder() to construct.
+    private ContextEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (contextId_ != null) {
+        output.writeMessage(2, getContextId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getContextId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextEvent other = (context.ContextOuterClass.ContextEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextEvent)
+        context.ContextOuterClass.ContextEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent build() {
+        context.ContextOuterClass.ContextEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent buildPartial() {
+        context.ContextOuterClass.ContextEvent result = new context.ContextOuterClass.ContextEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextEvent) {
+          return mergeFrom((context.ContextOuterClass.ContextEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextEvent other) {
+        if (other == context.ContextOuterClass.ContextEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextEvent)
+    private static final context.ContextOuterClass.ContextEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextEvent();
+    }
+
+    public static context.ContextOuterClass.ContextEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ContextEvent>() {
+      @java.lang.Override
+      public ContextEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    boolean hasTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    context.ContextOuterClass.Uuid getTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Topology ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.TopologyId}
+   */
+  public static final class TopologyId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyId)
+      TopologyIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyId.newBuilder() to construct.
+    private TopologyId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (topologyUuid_ != null) {
+                subBuilder = topologyUuid_.toBuilder();
+              }
+              topologyUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyUuid_);
+                topologyUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid topologyUuid_;
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyUuid() {
+      return topologyUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getTopologyUuid() {
+      return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+      return getTopologyUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        output.writeMessage(2, getTopologyUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyId other = (context.ContextOuterClass.TopologyId) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasTopologyUuid() != other.hasTopologyUuid()) return false;
+      if (hasTopologyUuid()) {
+        if (!getTopologyUuid()
+            .equals(other.getTopologyUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasTopologyUuid()) {
+        hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Topology ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.TopologyId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyId)
+        context.ContextOuterClass.TopologyIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId build() {
+        context.ContextOuterClass.TopologyId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId buildPartial() {
+        context.ContextOuterClass.TopologyId result = new context.ContextOuterClass.TopologyId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyUuidBuilder_ == null) {
+          result.topologyUuid_ = topologyUuid_;
+        } else {
+          result.topologyUuid_ = topologyUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyId) {
+          return mergeFrom((context.ContextOuterClass.TopologyId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyId other) {
+        if (other == context.ContextOuterClass.TopologyId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasTopologyUuid()) {
+          mergeTopologyUuid(other.getTopologyUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid topologyUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> topologyUuidBuilder_;
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return Whether the topologyUuid field is set.
+       */
+      public boolean hasTopologyUuid() {
+        return topologyUuidBuilder_ != null || topologyUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return The topologyUuid.
+       */
+      public context.ContextOuterClass.Uuid getTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        } else {
+          return topologyUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyUuid_ = value;
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (topologyUuid_ != null) {
+            topologyUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+          } else {
+            topologyUuid_ = value;
+          }
+          onChanged();
+        } else {
+          topologyUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder clearTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+          onChanged();
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+        
+        onChanged();
+        return getTopologyUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+        if (topologyUuidBuilder_ != null) {
+          return topologyUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getTopologyUuidFieldBuilder() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getTopologyUuid(),
+                  getParentForChildren(),
+                  isClean());
+          topologyUuid_ = null;
+        }
+        return topologyUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyId)
+    private static final context.ContextOuterClass.TopologyId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyId();
+    }
+
+    public static context.ContextOuterClass.TopologyId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyId>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyId>() {
+      @java.lang.Override
+      public TopologyId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Topology)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Topology}
+   */
+  public static final class Topology extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Topology)
+      TopologyOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Topology.newBuilder() to construct.
+    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Topology() {
+      deviceIds_ = java.util.Collections.emptyList();
+      linkIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Topology();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Topology(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index) {
+      return linkIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(3, linkIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, linkIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Topology)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Topology other = (context.ContextOuterClass.Topology) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Topology prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Topology}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Topology)
+        context.ContextOuterClass.TopologyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Topology.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+        return context.ContextOuterClass.Topology.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology build() {
+        context.ContextOuterClass.Topology result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology buildPartial() {
+        context.ContextOuterClass.Topology result = new context.ContextOuterClass.Topology(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        if (linkIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.linkIds_ = linkIds_;
+        } else {
+          result.linkIds_ = linkIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Topology) {
+          return mergeFrom((context.ContextOuterClass.Topology)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Topology other) {
+        if (other == context.ContextOuterClass.Topology.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              linkIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkIdsFieldBuilder() : null;
+            } else {
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Topology parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
+        } else {
+          return linkIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkIds_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
+          onChanged();
+        } else {
+          linkIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+          int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkIds_ = null;
+        }
+        return linkIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Topology)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Topology)
+    private static final context.ContextOuterClass.Topology DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Topology();
+    }
+
+    public static context.ContextOuterClass.Topology getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Topology>
+        PARSER = new com.google.protobuf.AbstractParser<Topology>() {
+      @java.lang.Override
+      public Topology parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Topology(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Topology> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Topology> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyIdList}
+   */
+  public static final class TopologyIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
+      TopologyIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyIdList.newBuilder() to construct.
+    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyIdList() {
+      topologyIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(1, topologyIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologyIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
+        context.ContextOuterClass.TopologyIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList build() {
+        context.ContextOuterClass.TopologyIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList buildPartial() {
+        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyIdList) {
+          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
+        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
+    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
+    }
+
+    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyIdList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
+      @java.lang.Override
+      public TopologyIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Topology> 
+        getTopologiesList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.Topology getTopologies(int index);
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    int getTopologiesCount();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyList}
+   */
+  public static final class TopologyList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyList)
+      TopologyListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyList.newBuilder() to construct.
+    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyList() {
+      topologies_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologies_.add(
+                  input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+    }
+
+    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Topology> topologies_;
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologiesCount() {
+      return topologies_.size();
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getTopologies(int index) {
+      return topologies_.get(index);
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index) {
+      return topologies_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < topologies_.size(); i++) {
+        output.writeMessage(1, topologies_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < topologies_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologies_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
+
+      if (!getTopologiesList()
+          .equals(other.getTopologiesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getTopologiesCount() > 0) {
+        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologiesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyList)
+        context.ContextOuterClass.TopologyListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologiesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList build() {
+        context.ContextOuterClass.TopologyList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList buildPartial() {
+        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologiesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologies_ = topologies_;
+        } else {
+          result.topologies_ = topologiesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyList) {
+          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
+        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
+        if (topologiesBuilder_ == null) {
+          if (!other.topologies_.isEmpty()) {
+            if (topologies_.isEmpty()) {
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologiesIsMutable();
+              topologies_.addAll(other.topologies_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologies_.isEmpty()) {
+            if (topologiesBuilder_.isEmpty()) {
+              topologiesBuilder_.dispose();
+              topologiesBuilder_ = null;
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologiesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologiesFieldBuilder() : null;
+            } else {
+              topologiesBuilder_.addAllMessages(other.topologies_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologiesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
+
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+        if (topologiesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologies_);
+        } else {
+          return topologiesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public int getTopologiesCount() {
+        if (topologiesBuilder_ == null) {
+          return topologies_.size();
+        } else {
+          return topologiesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology getTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);
+        } else {
+          return topologiesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.set(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addAllTopologies(
+          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologies_);
+          onChanged();
+        } else {
+          topologiesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder clearTopologies() {
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder removeTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.remove(index);
+          onChanged();
+        } else {
+          topologiesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+          int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);  } else {
+          return topologiesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+           getTopologiesOrBuilderList() {
+        if (topologiesBuilder_ != null) {
+          return topologiesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologies_);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
+        return getTopologiesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology.Builder> 
+           getTopologiesBuilderList() {
+        return getTopologiesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
+          getTopologiesFieldBuilder() {
+        if (topologiesBuilder_ == null) {
+          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
+                  topologies_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologies_ = null;
+        }
+        return topologiesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyList)
+    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+    }
+
+    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+      @java.lang.Override
+      public TopologyList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.TopologyEvent}
+   */
+  public static final class TopologyEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
+      TopologyEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyEvent.newBuilder() to construct.
+    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        output.writeMessage(2, getTopologyId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
+        context.ContextOuterClass.TopologyEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent build() {
+        context.ContextOuterClass.TopologyEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent buildPartial() {
+        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyEvent) {
+          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
+        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
+    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+    }
+
+    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyEvent>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+      @java.lang.Override
+      public TopologyEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    boolean hasDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    context.ContextOuterClass.Uuid getDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Device --------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.DeviceId}
+   */
+  public static final class DeviceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceId)
+      DeviceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceId.newBuilder() to construct.
+    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (deviceUuid_ != null) {
+                subBuilder = deviceUuid_.toBuilder();
+              }
+              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceUuid_);
+                deviceUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+    }
+
+    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid deviceUuid_;
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceUuid() {
+      return deviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDeviceUuid() {
+      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+      return getDeviceUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (deviceUuid_ != null) {
+        output.writeMessage(1, getDeviceUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+
+      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
+      if (hasDeviceUuid()) {
+        if (!getDeviceUuid()
+            .equals(other.getDeviceUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasDeviceUuid()) {
+        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Device --------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.DeviceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceId)
+        context.ContextOuterClass.DeviceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId build() {
+        context.ContextOuterClass.DeviceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId buildPartial() {
+        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
+        if (deviceUuidBuilder_ == null) {
+          result.deviceUuid_ = deviceUuid_;
+        } else {
+          result.deviceUuid_ = deviceUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceId) {
+          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
+        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
+        if (other.hasDeviceUuid()) {
+          mergeDeviceUuid(other.getDeviceUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid deviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return Whether the deviceUuid field is set.
+       */
+      public boolean hasDeviceUuid() {
+        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return The deviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        } else {
+          return deviceUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceUuid_ = value;
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (deviceUuid_ != null) {
+            deviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            deviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          deviceUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder clearDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+          onChanged();
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
+        
+        onChanged();
+        return getDeviceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+        if (deviceUuidBuilder_ != null) {
+          return deviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getDeviceUuidFieldBuilder() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getDeviceUuid(),
+                  getParentForChildren(),
+                  isClean());
+          deviceUuid_ = null;
+        }
+        return deviceUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceId)
+    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+    }
+
+    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceId>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+      @java.lang.Override
+      public DeviceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Device)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    java.lang.String getDeviceType();
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    com.google.protobuf.ByteString
+        getDeviceTypeBytes();
+
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    boolean hasDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
+
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    int getDeviceOperationalStatusValue();
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
+
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    int getDeviceDriversCount();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    java.util.List<java.lang.Integer>
+    getDeviceDriversValueList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    int getDeviceDriversValue(int index);
+
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPoint> 
+        getDeviceEndpointsList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    int getDeviceEndpointsCount();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Device}
+   */
+  public static final class Device extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Device)
+      DeviceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Device.newBuilder() to construct.
+    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Device() {
+      deviceType_ = "";
+      deviceOperationalStatus_ = 0;
+      deviceDrivers_ = java.util.Collections.emptyList();
+      deviceEndpoints_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Device();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Device(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              deviceType_ = s;
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (deviceConfig_ != null) {
+                subBuilder = deviceConfig_.toBuilder();
+              }
+              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceConfig_);
+                deviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+
+              deviceOperationalStatus_ = rawValue;
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceDrivers_.add(rawValue);
+              break;
+            }
+            case 42: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                deviceDrivers_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              deviceEndpoints_.add(
+                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object deviceType_;
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    @java.lang.Override
+    public java.lang.String getDeviceType() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        deviceType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDeviceTypeBytes() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        deviceType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.DeviceConfig deviceConfig_;
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceConfig() {
+      return deviceConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+      return getDeviceConfig();
+    }
+
+    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
+    private int deviceOperationalStatus_;
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    @java.lang.Override public int getDeviceOperationalStatusValue() {
+      return deviceOperationalStatus_;
+    }
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
+    private java.util.List<java.lang.Integer> deviceDrivers_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
+              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    @java.lang.Override
+    public int getDeviceDriversCount() {
+      return deviceDrivers_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getDeviceDriversValueList() {
+      return deviceDrivers_;
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public int getDeviceDriversValue(int index) {
+      return deviceDrivers_.get(index);
+    }
+    private int deviceDriversMemoizedSerializedSize;
+
+    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
+    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public int getDeviceEndpointsCount() {
+      return deviceEndpoints_.size();
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+      return deviceEndpoints_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index) {
+      return deviceEndpoints_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (deviceId_ != null) {
+        output.writeMessage(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        output.writeMessage(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(4, deviceOperationalStatus_);
+      }
+      if (getDeviceDriversList().size() > 0) {
+        output.writeUInt32NoTag(42);
+        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
+      }
+      for (int i = 0; i < deviceDrivers_.size(); i++) {
+        output.writeEnumNoTag(deviceDrivers_.get(i));
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        output.writeMessage(6, deviceEndpoints_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, deviceOperationalStatus_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < deviceDrivers_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(deviceDrivers_.get(i));
+        }
+        size += dataSize;
+        if (!getDeviceDriversList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }deviceDriversMemoizedSerializedSize = dataSize;
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, deviceEndpoints_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Device)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!getDeviceType()
+          .equals(other.getDeviceType())) return false;
+      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
+      if (hasDeviceConfig()) {
+        if (!getDeviceConfig()
+            .equals(other.getDeviceConfig())) return false;
+      }
+      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
+      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
+      if (!getDeviceEndpointsList()
+          .equals(other.getDeviceEndpointsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceType().hashCode();
+      if (hasDeviceConfig()) {
+        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceConfig().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + deviceOperationalStatus_;
+      if (getDeviceDriversCount() > 0) {
+        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
+        hash = (53 * hash) + deviceDrivers_.hashCode();
+      }
+      if (getDeviceEndpointsCount() > 0) {
+        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Device}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Device)
+        context.ContextOuterClass.DeviceOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Device.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceEndpointsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        deviceType_ = "";
+
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+        deviceOperationalStatus_ = 0;
+
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device getDefaultInstanceForType() {
+        return context.ContextOuterClass.Device.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device build() {
+        context.ContextOuterClass.Device result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device buildPartial() {
+        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        result.deviceType_ = deviceType_;
+        if (deviceConfigBuilder_ == null) {
+          result.deviceConfig_ = deviceConfig_;
+        } else {
+          result.deviceConfig_ = deviceConfigBuilder_.build();
+        }
+        result.deviceOperationalStatus_ = deviceOperationalStatus_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.deviceDrivers_ = deviceDrivers_;
+        if (deviceEndpointsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.deviceEndpoints_ = deviceEndpoints_;
+        } else {
+          result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Device) {
+          return mergeFrom((context.ContextOuterClass.Device)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Device other) {
+        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (!other.getDeviceType().isEmpty()) {
+          deviceType_ = other.deviceType_;
+          onChanged();
+        }
+        if (other.hasDeviceConfig()) {
+          mergeDeviceConfig(other.getDeviceConfig());
+        }
+        if (other.deviceOperationalStatus_ != 0) {
+          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
+        }
+        if (!other.deviceDrivers_.isEmpty()) {
+          if (deviceDrivers_.isEmpty()) {
+            deviceDrivers_ = other.deviceDrivers_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureDeviceDriversIsMutable();
+            deviceDrivers_.addAll(other.deviceDrivers_);
+          }
+          onChanged();
+        }
+        if (deviceEndpointsBuilder_ == null) {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpoints_.isEmpty()) {
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureDeviceEndpointsIsMutable();
+              deviceEndpoints_.addAll(other.deviceEndpoints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpointsBuilder_.isEmpty()) {
+              deviceEndpointsBuilder_.dispose();
+              deviceEndpointsBuilder_ = null;
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              deviceEndpointsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceEndpointsFieldBuilder() : null;
+            } else {
+              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Device parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private java.lang.Object deviceType_ = "";
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The deviceType.
+       */
+      public java.lang.String getDeviceType() {
+        java.lang.Object ref = deviceType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          deviceType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The bytes for deviceType.
+       */
+      public com.google.protobuf.ByteString
+          getDeviceTypeBytes() {
+        java.lang.Object ref = deviceType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          deviceType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceType() {
+        
+        deviceType_ = getDefaultInstance().getDeviceType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The bytes for deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceConfig deviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return Whether the deviceConfig field is set.
+       */
+      public boolean hasDeviceConfig() {
+        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return The deviceConfig.
+       */
+      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        } else {
+          return deviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceConfig_ = value;
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (deviceConfig_ != null) {
+            deviceConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            deviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          deviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder clearDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+          onChanged();
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+        
+        onChanged();
+        return getDeviceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+        if (deviceConfigBuilder_ != null) {
+          return deviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDeviceConfigFieldBuilder() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDeviceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          deviceConfig_ = null;
+        }
+        return deviceConfigBuilder_;
+      }
+
+      private int deviceOperationalStatus_ = 0;
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The enum numeric value on the wire for deviceOperationalStatus.
+       */
+      @java.lang.Override public int getDeviceOperationalStatusValue() {
+        return deviceOperationalStatus_;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatusValue(int value) {
+        
+        deviceOperationalStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The deviceOperationalStatus.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        deviceOperationalStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceOperationalStatus() {
+        
+        deviceOperationalStatus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> deviceDrivers_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceDriversIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
+          bitField0_ |= 0x00000001;
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the deviceDrivers.
+       */
+      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return The count of deviceDrivers.
+       */
+      public int getDeviceDriversCount() {
+        return deviceDrivers_.size();
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the element to return.
+       * @return The deviceDrivers at the given index.
+       */
+      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index to set the value at.
+       * @param value The deviceDrivers to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDrivers(
+          int index, context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDrivers(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
+        ensureDeviceDriversIsMutable();
+        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
+          deviceDrivers_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceDrivers() {
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the enum numeric values on the wire for deviceDrivers.
+       */
+      public java.util.List<java.lang.Integer>
+      getDeviceDriversValueList() {
+        return java.util.Collections.unmodifiableList(deviceDrivers_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       */
+      public int getDeviceDriversValue(int index) {
+        return deviceDrivers_.get(index);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDriversValue(
+          int index, int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The enum numeric value on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDriversValue(int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The enum numeric values on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDriversValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureDeviceDriversIsMutable();
+        for (int value : values) {
+          deviceDrivers_.add(value);
+        }
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceEndpointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+        if (deviceEndpointsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        } else {
+          return deviceEndpointsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public int getDeviceEndpointsCount() {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.size();
+        } else {
+          return deviceEndpointsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);
+        } else {
+          return deviceEndpointsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addAllDeviceEndpoints(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceEndpoints_);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder clearDeviceEndpoints() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder removeDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.remove(index);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+          int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);  } else {
+          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+           getDeviceEndpointsOrBuilderList() {
+        if (deviceEndpointsBuilder_ != null) {
+          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
+           getDeviceEndpointsBuilderList() {
+        return getDeviceEndpointsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
+          getDeviceEndpointsFieldBuilder() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
+                  deviceEndpoints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceEndpoints_ = null;
+        }
+        return deviceEndpointsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Device)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Device)
+    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
+    }
+
+    public static context.ContextOuterClass.Device getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Device>
+        PARSER = new com.google.protobuf.AbstractParser<Device>() {
+      @java.lang.Override
+      public Device parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Device(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Device> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Device> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceConfig}
+   */
+  public static final class DeviceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
+      DeviceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceConfig.newBuilder() to construct.
+    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
+        context.ContextOuterClass.DeviceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig build() {
+        context.ContextOuterClass.DeviceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig buildPartial() {
+        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
+        } else {
+          result.configRules_ = configRulesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceConfig) {
+          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
+        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
+        } else {
+          return configRulesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
+          onChanged();
+        } else {
+          configRulesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(configRules_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          configRules_ = null;
+        }
+        return configRulesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
+    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
+    }
+
+    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
+      @java.lang.Override
+      public DeviceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceIdList}
+   */
+  public static final class DeviceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
+      DeviceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceIdList.newBuilder() to construct.
+    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceIdList() {
+      deviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(1, deviceIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, deviceIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
+
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
+        context.ContextOuterClass.DeviceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList build() {
+        context.ContextOuterClass.DeviceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList buildPartial() {
+        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceIdList) {
+          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
+        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
+    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
+    }
+
+    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
+      @java.lang.Override
+      public DeviceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Device> 
+        getDevicesList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.Device getDevices(int index);
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    int getDevicesCount();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceList}
+   */
+  public static final class DeviceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceList)
+      DeviceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceList.newBuilder() to construct.
+    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceList() {
+      devices_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              devices_.add(
+                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          devices_ = java.util.Collections.unmodifiableList(devices_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+    }
+
+    public static final int DEVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Device> devices_;
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public int getDevicesCount() {
+      return devices_.size();
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDevices(int index) {
+      return devices_.get(index);
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index) {
+      return devices_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < devices_.size(); i++) {
+        output.writeMessage(1, devices_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < devices_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, devices_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
+
+      if (!getDevicesList()
+          .equals(other.getDevicesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getDevicesCount() > 0) {
+        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getDevicesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceList)
+        context.ContextOuterClass.DeviceListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDevicesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList build() {
+        context.ContextOuterClass.DeviceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList buildPartial() {
+        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
+        int from_bitField0_ = bitField0_;
+        if (devicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            devices_ = java.util.Collections.unmodifiableList(devices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.devices_ = devices_;
+        } else {
+          result.devices_ = devicesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceList) {
+          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
+        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
+        if (devicesBuilder_ == null) {
+          if (!other.devices_.isEmpty()) {
+            if (devices_.isEmpty()) {
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDevicesIsMutable();
+              devices_.addAll(other.devices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.devices_.isEmpty()) {
+            if (devicesBuilder_.isEmpty()) {
+              devicesBuilder_.dispose();
+              devicesBuilder_ = null;
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              devicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDevicesFieldBuilder() : null;
+            } else {
+              devicesBuilder_.addAllMessages(other.devices_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Device> devices_ =
+        java.util.Collections.emptyList();
+      private void ensureDevicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
+
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+        if (devicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devices_);
+        } else {
+          return devicesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public int getDevicesCount() {
+        if (devicesBuilder_ == null) {
+          return devices_.size();
+        } else {
+          return devicesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device getDevices(int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);
+        } else {
+          return devicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.set(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addAllDevices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, devices_);
+          onChanged();
+        } else {
+          devicesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder clearDevices() {
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder removeDevices(int index) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.remove(index);
+          onChanged();
+        } else {
+          devicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+          int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);  } else {
+          return devicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+           getDevicesOrBuilderList() {
+        if (devicesBuilder_ != null) {
+          return devicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(devices_);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
+        return getDevicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Device.Builder> 
+           getDevicesBuilderList() {
+        return getDevicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
+          getDevicesFieldBuilder() {
+        if (devicesBuilder_ == null) {
+          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
+                  devices_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          devices_ = null;
+        }
+        return devicesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceList)
+    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+    }
+
+    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+      @java.lang.Override
+      public DeviceList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.DeviceEvent}
+   */
+  public static final class DeviceEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
+      DeviceEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceEvent.newBuilder() to construct.
+    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
+        context.ContextOuterClass.DeviceEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent build() {
+        context.ContextOuterClass.DeviceEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent buildPartial() {
+        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceEvent) {
+          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
+        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
+    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
+    }
+
+    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
+      @java.lang.Override
+      public DeviceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    boolean hasLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    context.ContextOuterClass.Uuid getLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Link ----------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.LinkId}
+   */
+  public static final class LinkId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkId)
+      LinkIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkId.newBuilder() to construct.
+    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (linkUuid_ != null) {
+                subBuilder = linkUuid_.toBuilder();
+              }
+              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkUuid_);
+                linkUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+    }
+
+    public static final int LINK_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid linkUuid_;
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkUuid() {
+      return linkUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getLinkUuid() {
+      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+      return getLinkUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (linkUuid_ != null) {
+        output.writeMessage(1, getLinkUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (linkUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getLinkUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
+
+      if (hasLinkUuid() != other.hasLinkUuid()) return false;
+      if (hasLinkUuid()) {
+        if (!getLinkUuid()
+            .equals(other.getLinkUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasLinkUuid()) {
+        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Link ----------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.LinkId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkId)
+        context.ContextOuterClass.LinkIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId build() {
+        context.ContextOuterClass.LinkId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId buildPartial() {
+        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
+        if (linkUuidBuilder_ == null) {
+          result.linkUuid_ = linkUuid_;
+        } else {
+          result.linkUuid_ = linkUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkId) {
+          return mergeFrom((context.ContextOuterClass.LinkId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
+        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
+        if (other.hasLinkUuid()) {
+          mergeLinkUuid(other.getLinkUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid linkUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return Whether the linkUuid field is set.
+       */
+      public boolean hasLinkUuid() {
+        return linkUuidBuilder_ != null || linkUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return The linkUuid.
+       */
+      public context.ContextOuterClass.Uuid getLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+        } else {
+          return linkUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkUuid_ = value;
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (linkUuid_ != null) {
+            linkUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
+          } else {
+            linkUuid_ = value;
+          }
+          onChanged();
+        } else {
+          linkUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder clearLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+          onChanged();
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
+        
+        onChanged();
+        return getLinkUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+        if (linkUuidBuilder_ != null) {
+          return linkUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return linkUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getLinkUuidFieldBuilder() {
+        if (linkUuidBuilder_ == null) {
+          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getLinkUuid(),
+                  getParentForChildren(),
+                  isClean());
+          linkUuid_ = null;
+        }
+        return linkUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkId)
+    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
+    }
+
+    public static context.ContextOuterClass.LinkId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkId>
+        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
+      @java.lang.Override
+      public LinkId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Link)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
+     */
+    boolean hasLinkId();
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
+     */
+    context.ContextOuterClass.LinkId getLinkId();
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getLinkEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    int getLinkEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Link}
+   */
+  public static final class Link extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Link)
+      LinkOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Link.newBuilder() to construct.
+    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Link() {
+      linkEndpointIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Link();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Link(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              linkEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Link_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+    }
+
+    public static final int LINK_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.LinkId linkId_;
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkId() {
+      return linkId_ != null;
+    }
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    }
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getLinkEndpointIdsCount() {
+      return linkEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+      return linkEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index) {
+      return linkEndpointIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (linkId_ != null) {
+        output.writeMessage(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        output.writeMessage(2, linkEndpointIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (linkId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, linkEndpointIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Link)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
+
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
+      }
+      if (!getLinkEndpointIdsList()
+          .equals(other.getLinkEndpointIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
+      }
+      if (getLinkEndpointIdsCount() > 0) {
+        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Link parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Link}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Link)
+        context.ContextOuterClass.LinkOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Link.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinkEndpointIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linkEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link getDefaultInstanceForType() {
+        return context.ContextOuterClass.Link.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link build() {
+        context.ContextOuterClass.Link result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link buildPartial() {
+        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
+        int from_bitField0_ = bitField0_;
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.linkEndpointIds_ = linkEndpointIds_;
+        } else {
+          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Link) {
+          return mergeFrom((context.ContextOuterClass.Link)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Link other) {
+        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIds_.isEmpty()) {
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinkEndpointIdsIsMutable();
+              linkEndpointIds_.addAll(other.linkEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIdsBuilder_.isEmpty()) {
+              linkEndpointIdsBuilder_.dispose();
+              linkEndpointIdsBuilder_ = null;
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linkEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkEndpointIdsFieldBuilder() : null;
+            } else {
+              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Link parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.LinkId linkId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return Whether the linkId field is set.
+       */
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return The linkId.
+       */
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        } else {
+          return linkIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkId_ = value;
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+          } else {
+            linkId_ = value;
+          }
+          onChanged();
+        } else {
+          linkIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+          onChanged();
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
+        } else {
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
+                  getParentForChildren(),
+                  isClean());
+          linkId_ = null;
+        }
+        return linkIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        } else {
+          return linkEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public int getLinkEndpointIdsCount() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.size();
+        } else {
+          return linkEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);
+        } else {
+          return linkEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addAllLinkEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkEndpointIds_);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder clearLinkEndpointIds() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder removeLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
+          int index) {
+        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+          int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);  } else {
+          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getLinkEndpointIdsOrBuilderList() {
+        if (linkEndpointIdsBuilder_ != null) {
+          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
+          int index) {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getLinkEndpointIdsBuilderList() {
+        return getLinkEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getLinkEndpointIdsFieldBuilder() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  linkEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkEndpointIds_ = null;
+        }
+        return linkEndpointIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Link)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Link)
+    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
+    }
+
+    public static context.ContextOuterClass.Link getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Link>
+        PARSER = new com.google.protobuf.AbstractParser<Link>() {
+      @java.lang.Override
+      public Link parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Link(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Link> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Link> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Link getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkIdList}
+   */
+  public static final class LinkIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkIdList)
+      LinkIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkIdList.newBuilder() to construct.
+    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkIdList() {
+      linkIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index) {
+      return linkIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(1, linkIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, linkIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
+
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.LinkIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
+        context.ContextOuterClass.LinkIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkIdList build() {
+        context.ContextOuterClass.LinkIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkIdList buildPartial() {
+        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (linkIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.linkIds_ = linkIds_;
+        } else {
+          result.linkIds_ = linkIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkIdList) {
+          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
+        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linkIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkIdsFieldBuilder() : null;
+            } else {
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
+        } else {
+          return linkIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkIds_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
+          onChanged();
+        } else {
+          linkIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+          int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkIds_ = null;
+        }
+        return linkIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkIdList)
+    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+    }
+
+    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkIdList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+      @java.lang.Override
+      public LinkIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Link> 
+        getLinksList();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    context.ContextOuterClass.Link getLinks(int index);
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    int getLinksCount();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkList}
+   */
+  public static final class LinkList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkList)
+      LinkListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkList.newBuilder() to construct.
+    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkList() {
+      links_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          links_ = java.util.Collections.unmodifiableList(links_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+    }
+
+    public static final int LINKS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Link> links_;
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public int getLinksCount() {
+      return links_.size();
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(1, links_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < links_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, links_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+
+      if (!getLinksList()
+          .equals(other.getLinksList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getLinksCount() > 0) {
+        hash = (37 * hash) + LINKS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinksList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.LinkList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkList)
+        context.ContextOuterClass.LinkListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinksFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList build() {
+        context.ContextOuterClass.LinkList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList buildPartial() {
+        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
+        int from_bitField0_ = bitField0_;
+        if (linksBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            links_ = java.util.Collections.unmodifiableList(links_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.links_ = links_;
+        } else {
+          result.links_ = linksBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkList) {
+          return mergeFrom((context.ContextOuterClass.LinkList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
+        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linksBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinksFieldBuilder() : null;
+            } else {
+              linksBuilder_.addAllMessages(other.links_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Link> links_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
+
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
+        } else {
+          return linksBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
+        } else {
+          return linksBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
+        } else {
+          return linksBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.set(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, links_);
+          onChanged();
+        } else {
+          linksBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
+          onChanged();
+        } else {
+          linksBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+          int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(links_);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
+                  links_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          links_ = null;
+        }
+        return linksBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkList)
+    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+    }
+
+    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+      @java.lang.Override
+      public LinkList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    boolean hasLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
+     */
+    context.ContextOuterClass.LinkId getLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.LinkEvent}
+   */
+  public static final class LinkEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkEvent)
+      LinkEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkEvent.newBuilder() to construct.
+    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int LINK_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.LinkId linkId_;
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkId() {
+      return linkId_ != null;
+    }
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    }
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (linkId_ != null) {
+        output.writeMessage(2, getLinkId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (linkId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getLinkId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.LinkEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
+        context.ContextOuterClass.LinkEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent build() {
+        context.ContextOuterClass.LinkEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent buildPartial() {
+        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkEvent) {
+          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
+        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.LinkId linkId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return Whether the linkId field is set.
+       */
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return The linkId.
+       */
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        } else {
+          return linkIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkId_ = value;
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+          } else {
+            linkId_ = value;
+          }
+          onChanged();
+        } else {
+          linkIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+          onChanged();
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
+        } else {
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
+                  getParentForChildren(),
+                  isClean());
+          linkId_ = null;
+        }
+        return linkIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkEvent)
+    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+    }
+
+    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkEvent>
+        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+      @java.lang.Override
+      public LinkEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    boolean hasServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    context.ContextOuterClass.Uuid getServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Service -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ServiceId}
+   */
+  public static final class ServiceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceId)
+      ServiceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceId.newBuilder() to construct.
+    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (serviceUuid_ != null) {
+                subBuilder = serviceUuid_.toBuilder();
+              }
+              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceUuid_);
+                serviceUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid serviceUuid_;
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceUuid() {
+      return serviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getServiceUuid() {
+      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+      return getServiceUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (serviceUuid_ != null) {
+        output.writeMessage(2, getServiceUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (serviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasServiceUuid() != other.hasServiceUuid()) return false;
+      if (hasServiceUuid()) {
+        if (!getServiceUuid()
+            .equals(other.getServiceUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasServiceUuid()) {
+        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Service -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ServiceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceId)
+        context.ContextOuterClass.ServiceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId build() {
+        context.ContextOuterClass.ServiceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId buildPartial() {
+        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (serviceUuidBuilder_ == null) {
+          result.serviceUuid_ = serviceUuid_;
+        } else {
+          result.serviceUuid_ = serviceUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceId) {
+          return mergeFrom((context.ContextOuterClass.ServiceId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
+        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasServiceUuid()) {
+          mergeServiceUuid(other.getServiceUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid serviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return Whether the serviceUuid field is set.
+       */
+      public boolean hasServiceUuid() {
+        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return The serviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        } else {
+          return serviceUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceUuid_ = value;
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (serviceUuid_ != null) {
+            serviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            serviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          serviceUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder clearServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+          onChanged();
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+        
+        onChanged();
+        return getServiceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+        if (serviceUuidBuilder_ != null) {
+          return serviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getServiceUuidFieldBuilder() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getServiceUuid(),
+                  getParentForChildren(),
+                  isClean());
+          serviceUuid_ = null;
+        }
+        return serviceUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceId)
+    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+    }
+
+    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceId>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+      @java.lang.Override
+      public ServiceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Service)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    int getServiceTypeValue();
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
+     */
+    context.ContextOuterClass.ServiceTypeEnum getServiceType();
+
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getServiceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    int getServiceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getServiceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.Constraint getServiceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    int getServiceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    boolean hasServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatus getServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     */
+    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    boolean hasServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
+     */
+    context.ContextOuterClass.ServiceConfig getServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     */
+    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Service}
+   */
+  public static final class Service extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Service)
+      ServiceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Service.newBuilder() to construct.
+    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Service() {
+      serviceType_ = 0;
+      serviceEndpointIds_ = java.util.Collections.emptyList();
+      serviceConstraints_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Service();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Service(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              serviceType_ = rawValue;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
+              if (serviceStatus_ != null) {
+                subBuilder = serviceStatus_.toBuilder();
+              }
+              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceStatus_);
+                serviceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
+              if (serviceConfig_ != null) {
+                subBuilder = serviceConfig_.toBuilder();
+              }
+              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceConfig_);
+                serviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Service_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
+    private int serviceType_;
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    @java.lang.Override public int getServiceTypeValue() {
+      return serviceType_;
+    }
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+      return serviceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList() {
+      return serviceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getServiceEndpointIdsCount() {
+      return serviceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+      return serviceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index) {
+      return serviceEndpointIds_.get(index);
+    }
+
+    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public int getServiceConstraintsCount() {
+      return serviceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+      return serviceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index) {
+      return serviceConstraints_.get(index);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ServiceStatus serviceStatus_;
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceStatus() {
+      return serviceStatus_ != null;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+      return getServiceStatus();
+    }
+
+    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceConfig serviceConfig_;
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceConfig() {
+      return serviceConfig_ != null;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+      return getServiceConfig();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (serviceId_ != null) {
+        output.writeMessage(1, getServiceId());
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(2, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        output.writeMessage(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        output.writeMessage(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        output.writeMessage(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        output.writeMessage(6, getServiceConfig());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getServiceId());
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceConfig());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Service)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
+
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (serviceType_ != other.serviceType_) return false;
+      if (!getServiceEndpointIdsList()
+          .equals(other.getServiceEndpointIdsList())) return false;
+      if (!getServiceConstraintsList()
+          .equals(other.getServiceConstraintsList())) return false;
+      if (hasServiceStatus() != other.hasServiceStatus()) return false;
+      if (hasServiceStatus()) {
+        if (!getServiceStatus()
+            .equals(other.getServiceStatus())) return false;
+      }
+      if (hasServiceConfig() != other.hasServiceConfig()) return false;
+      if (hasServiceConfig()) {
+        if (!getServiceConfig()
+            .equals(other.getServiceConfig())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + serviceType_;
+      if (getServiceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
+      }
+      if (getServiceConstraintsCount() > 0) {
+        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConstraintsList().hashCode();
+      }
+      if (hasServiceStatus()) {
+        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceStatus().hashCode();
+      }
+      if (hasServiceConfig()) {
+        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConfig().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Service parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Service}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Service)
+        context.ContextOuterClass.ServiceOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Service.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServiceEndpointIdsFieldBuilder();
+          getServiceConstraintsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        serviceType_ = 0;
+
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service getDefaultInstanceForType() {
+        return context.ContextOuterClass.Service.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service build() {
+        context.ContextOuterClass.Service result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service buildPartial() {
+        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        result.serviceType_ = serviceType_;
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceEndpointIds_ = serviceEndpointIds_;
+        } else {
+          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceConstraints_ = serviceConstraints_;
+        } else {
+          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
+        }
+        if (serviceStatusBuilder_ == null) {
+          result.serviceStatus_ = serviceStatus_;
+        } else {
+          result.serviceStatus_ = serviceStatusBuilder_.build();
+        }
+        if (serviceConfigBuilder_ == null) {
+          result.serviceConfig_ = serviceConfig_;
+        } else {
+          result.serviceConfig_ = serviceConfigBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Service) {
+          return mergeFrom((context.ContextOuterClass.Service)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Service other) {
+        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.serviceType_ != 0) {
+          setServiceTypeValue(other.getServiceTypeValue());
+        }
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIds_.isEmpty()) {
+              serviceEndpointIds_ = other.serviceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceEndpointIdsIsMutable();
+              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIdsBuilder_.isEmpty()) {
+              serviceEndpointIdsBuilder_.dispose();
+              serviceEndpointIdsBuilder_ = null;
+              serviceEndpointIds_ = other.serviceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceEndpointIdsFieldBuilder() : null;
+            } else {
+              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
+            }
+          }
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraints_.isEmpty()) {
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceConstraintsIsMutable();
+              serviceConstraints_.addAll(other.serviceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraintsBuilder_.isEmpty()) {
+              serviceConstraintsBuilder_.dispose();
+              serviceConstraintsBuilder_ = null;
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceConstraintsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceConstraintsFieldBuilder() : null;
+            } else {
+              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
+            }
+          }
+        }
+        if (other.hasServiceStatus()) {
+          mergeServiceStatus(other.getServiceStatus());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Service parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private int serviceType_ = 0;
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The enum numeric value on the wire for serviceType.
+       */
+      @java.lang.Override public int getServiceTypeValue() {
+        return serviceType_;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The enum numeric value on the wire for serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceTypeValue(int value) {
+        
+        serviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The serviceType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceType() {
+        
+        serviceType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public int getServiceEndpointIdsCount() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.size();
+        } else {
+          return serviceEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addAllServiceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceEndpointIds_);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder clearServiceEndpointIds() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder removeServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+          int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);  } else {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getServiceEndpointIdsOrBuilderList() {
+        if (serviceEndpointIdsBuilder_ != null) {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getServiceEndpointIdsBuilderList() {
+        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getServiceEndpointIdsFieldBuilder() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  serviceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceEndpointIds_ = null;
+        }
+        return serviceEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
+
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+        if (serviceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        } else {
+          return serviceConstraintsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public int getServiceConstraintsCount() {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.size();
+        } else {
+          return serviceConstraintsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);
+        } else {
+          return serviceConstraintsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addServiceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addAllServiceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceConstraints_);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder clearServiceConstraints() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder removeServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.remove(index);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+          int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);  } else {
+          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getServiceConstraintsFieldBuilder() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  serviceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceConstraints_ = null;
+        }
+        return serviceConstraintsBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceStatus serviceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return Whether the serviceStatus field is set.
+       */
+      public boolean hasServiceStatus() {
+        return serviceStatusBuilder_ != null || serviceStatus_ != null;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return The serviceStatus.
+       */
+      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+        } else {
+          return serviceStatusBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceStatus_ = value;
+          onChanged();
+        } else {
+          serviceStatusBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder setServiceStatus(
+          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceStatusBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (serviceStatus_ != null) {
+            serviceStatus_ =
+              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            serviceStatus_ = value;
+          }
+          onChanged();
+        } else {
+          serviceStatusBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder clearServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+          onChanged();
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
+        
+        onChanged();
+        return getServiceStatusFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+        if (serviceStatusBuilder_ != null) {
+          return serviceStatusBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceStatus_ == null ?
+              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
+          getServiceStatusFieldBuilder() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
+                  getServiceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          serviceStatus_ = null;
+        }
+        return serviceStatusBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return Whether the serviceConfig field is set.
+       */
+      public boolean hasServiceConfig() {
+        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return The serviceConfig.
+       */
+      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        } else {
+          return serviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceConfig_ = value;
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder setServiceConfig(
+          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (serviceConfig_ != null) {
+            serviceConfig_ =
+              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            serviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          serviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder clearServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+          onChanged();
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+        
+        onChanged();
+        return getServiceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+        if (serviceConfigBuilder_ != null) {
+          return serviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceConfig_ == null ?
+              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
+          getServiceConfigFieldBuilder() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
+                  getServiceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          serviceConfig_ = null;
+        }
+        return serviceConfigBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Service)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Service)
+    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+    }
+
+    public static context.ContextOuterClass.Service getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Service>
+        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+      @java.lang.Override
+      public Service parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Service(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Service> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Service> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    int getServiceStatusValue();
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+  }
+  /**
+   * Protobuf type {@code context.ServiceStatus}
+   */
+  public static final class ServiceStatus extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
+      ServiceStatusOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceStatus.newBuilder() to construct.
+    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceStatus() {
+      serviceStatus_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceStatus();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceStatus(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+
+              serviceStatus_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
+    private int serviceStatus_;
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    @java.lang.Override public int getServiceStatusValue() {
+      return serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, serviceStatus_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, serviceStatus_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
+
+      if (serviceStatus_ != other.serviceStatus_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + serviceStatus_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceStatus}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
+        context.ContextOuterClass.ServiceStatusOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        serviceStatus_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus build() {
+        context.ContextOuterClass.ServiceStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus buildPartial() {
+        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
+        result.serviceStatus_ = serviceStatus_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceStatus) {
+          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
+        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
+        if (other.serviceStatus_ != 0) {
+          setServiceStatusValue(other.getServiceStatusValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int serviceStatus_ = 0;
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The enum numeric value on the wire for serviceStatus.
+       */
+      @java.lang.Override public int getServiceStatusValue() {
+        return serviceStatus_;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceStatusValue(int value) {
+        
+        serviceStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The serviceStatus.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The serviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceStatus() {
+        
+        serviceStatus_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
+    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
+    }
+
+    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+      @java.lang.Override
+      public ServiceStatus parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceStatus(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceConfig}
+   */
+  public static final class ServiceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
+      ServiceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceConfig.newBuilder() to construct.
+    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
+        context.ContextOuterClass.ServiceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig build() {
+        context.ContextOuterClass.ServiceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig buildPartial() {
+        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
+        } else {
+          result.configRules_ = configRulesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceConfig) {
+          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
+        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
+        } else {
+          return configRulesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
+          onChanged();
+        } else {
+          configRulesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(configRules_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          configRules_ = null;
+        }
+        return configRulesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
+    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
+    }
+
+    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+      @java.lang.Override
+      public ServiceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceIdList}
+   */
+  public static final class ServiceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
+      ServiceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceIdList.newBuilder() to construct.
+    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceIdList() {
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(1, serviceIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, serviceIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
+
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
+        context.ContextOuterClass.ServiceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList build() {
+        context.ContextOuterClass.ServiceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList buildPartial() {
+        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceIdList) {
+          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
+        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
+        } else {
+          return serviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
+    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
+    }
+
+    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+      @java.lang.Override
+      public ServiceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Service> 
+        getServicesList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.Service getServices(int index);
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    int getServicesCount();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceList}
+   */
+  public static final class ServiceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceList)
+      ServiceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceList.newBuilder() to construct.
+    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceList() {
+      services_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              services_.add(
+                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          services_ = java.util.Collections.unmodifiableList(services_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+    }
+
+    public static final int SERVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Service> services_;
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+      return services_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList() {
+      return services_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public int getServicesCount() {
+      return services_.size();
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Service getServices(int index) {
+      return services_.get(index);
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index) {
+      return services_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < services_.size(); i++) {
+        output.writeMessage(1, services_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < services_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, services_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+
+      if (!getServicesList()
+          .equals(other.getServicesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getServicesCount() > 0) {
+        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getServicesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceList)
+        context.ContextOuterClass.ServiceListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServicesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          servicesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList build() {
+        context.ContextOuterClass.ServiceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList buildPartial() {
+        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
+        int from_bitField0_ = bitField0_;
+        if (servicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            services_ = java.util.Collections.unmodifiableList(services_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.services_ = services_;
+        } else {
+          result.services_ = servicesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceList) {
+          return mergeFrom((context.ContextOuterClass.ServiceList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
+        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
+        if (servicesBuilder_ == null) {
+          if (!other.services_.isEmpty()) {
+            if (services_.isEmpty()) {
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServicesIsMutable();
+              services_.addAll(other.services_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.services_.isEmpty()) {
+            if (servicesBuilder_.isEmpty()) {
+              servicesBuilder_.dispose();
+              servicesBuilder_ = null;
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              servicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServicesFieldBuilder() : null;
+            } else {
+              servicesBuilder_.addAllMessages(other.services_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Service> services_ =
+        java.util.Collections.emptyList();
+      private void ensureServicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
+
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+        if (servicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(services_);
+        } else {
+          return servicesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public int getServicesCount() {
+        if (servicesBuilder_ == null) {
+          return services_.size();
+        } else {
+          return servicesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service getServices(int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);
+        } else {
+          return servicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServicesIsMutable();
+          services_.set(index, value);
+          onChanged();
+        } else {
+          servicesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addServices(context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServicesIsMutable();
+          services_.add(value);
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServicesIsMutable();
+          services_.add(index, value);
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addServices(
+          context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addAllServices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, services_);
+          onChanged();
+        } else {
+          servicesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder clearServices() {
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          servicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder removeServices(int index) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.remove(index);
+          onChanged();
+        } else {
+          servicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder getServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+          int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);  } else {
+          return servicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+           getServicesOrBuilderList() {
+        if (servicesBuilder_ != null) {
+          return servicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(services_);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
+        return getServicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Service.Builder> 
+           getServicesBuilderList() {
+        return getServicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
+          getServicesFieldBuilder() {
+        if (servicesBuilder_ == null) {
+          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
+                  services_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          services_ = null;
+        }
+        return servicesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceList)
+    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
+    }
+
+    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
+      @java.lang.Override
+      public ServiceList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ServiceEvent}
+   */
+  public static final class ServiceEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
+      ServiceEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceEvent.newBuilder() to construct.
+    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
+        context.ContextOuterClass.ServiceEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent build() {
+        context.ContextOuterClass.ServiceEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent buildPartial() {
+        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceEvent) {
+          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
+        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
+    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
+    }
+
+    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
+      @java.lang.Override
+      public ServiceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
+   */
+  public static final class EndPointId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EndPointId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EndPointId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EndPointId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid endpointUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
+       */
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
+       */
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+        } else {
+          return endpointUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointUuid_ = value;
+          onChanged();
+        } else {
+          endpointUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+          } else {
+            endpointUuid_ = value;
+          }
+          onChanged();
+        } else {
+          endpointUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+          onChanged();
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+        
+        onChanged();
+        return getEndpointUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
+                  getParentForChildren(),
+                  isClean());
+          endpointUuid_ = null;
+        }
+        return endpointUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+    }
+
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+      @java.lang.Override
+      public EndPointId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EndPointId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<EndPointId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
+    java.lang.String getEndpointType();
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
+     */
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+  }
+  /**
+   * Protobuf type {@code context.EndPoint}
+   */
+  public static final class EndPoint extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EndPoint() {
+      endpointType_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EndPoint();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EndPoint(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endpointType_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
+    @java.lang.Override
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.EndPoint}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        endpointType_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        result.endpointType_ = endpointType_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPoint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+    }
+
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+      @java.lang.Override
+      public EndPoint parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EndPoint(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<EndPoint> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    int getActionValue();
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
+    /**
+     * <code>string resource_key = 2;</code>
+     * @return The resourceKey.
+     */
+    java.lang.String getResourceKey();
+    /**
+     * <code>string resource_key = 2;</code>
+     * @return The bytes for resourceKey.
+     */
+    com.google.protobuf.ByteString
+        getResourceKeyBytes();
+
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The resourceValue.
+     */
+    java.lang.String getResourceValue();
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The bytes for resourceValue.
+     */
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
+  }
+  /**
+   * Protobuf type {@code context.ConfigRule}
+   */
+  public static final class ConfigRule extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConfigRule() {
+      action_ = 0;
+      resourceKey_ = "";
+      resourceValue_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConfigRule();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConfigRule(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceValue_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceKey_;
+    /**
+     * <code>string resource_key = 2;</code>
+     * @return The resourceKey.
+     */
+    @java.lang.Override
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceKey_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string resource_key = 2;</code>
+     * @return The bytes for resourceKey.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 3;
+    private volatile java.lang.Object resourceValue_;
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The resourceValue.
+     */
+    @java.lang.Override
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The bytes for resourceValue.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
+      }
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resourceValue_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, action_);
+      }
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, resourceValue_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
+
+      if (action_ != other.action_) return false;
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConfigRule}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        action_ = 0;
+
+        resourceKey_ = "";
+
+        resourceValue_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
+        }
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
+          onChanged();
+        }
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int action_ = 0;
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object resourceKey_ = "";
+      /**
+       * <code>string resource_key = 2;</code>
+       * @return The resourceKey.
+       */
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceKey_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string resource_key = 2;</code>
+       * @return The bytes for resourceKey.
+       */
+      public com.google.protobuf.ByteString
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceKey_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string resource_key = 2;</code>
+       * @param value The resourceKey to set.
+       * @return This builder for chaining.
+       */
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string resource_key = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string resource_key = 2;</code>
+       * @param value The bytes for resourceKey to set.
+       * @return This builder for chaining.
+       */
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object resourceValue_ = "";
+      /**
+       * <code>string resource_value = 3;</code>
+       * @return The resourceValue.
+       */
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string resource_value = 3;</code>
+       * @return The bytes for resourceValue.
+       */
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string resource_value = 3;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string resource_value = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string resource_value = 3;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceValue_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+    }
+
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+      @java.lang.Override
+      public ConfigRule parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConfigRule(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConstraintOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
+     */
+    java.lang.String getConstraintType();
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
+     */
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
+
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
+     */
+    java.lang.String getConstraintValue();
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
+  }
+  /**
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint}
+   */
+  public static final class Constraint extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint)
+      ConstraintOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint.newBuilder() to construct.
+    private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint() {
+      constraintType_ = "";
+      constraintValue_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintType_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+    }
+
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
+     */
+    @java.lang.Override
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
+     */
+    @java.lang.Override
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
+
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Constraint parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Constraint prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Constraint)
+        context.ContextOuterClass.ConstraintOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Constraint.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        constraintType_ = "";
+
+        constraintValue_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint build() {
+        context.ContextOuterClass.Constraint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint buildPartial() {
+        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint) {
+          return mergeFrom((context.ContextOuterClass.Constraint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
+        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
+          onChanged();
+        }
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object constraintType_ = "";
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
+       */
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
+       */
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object constraintValue_ = "";
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
+       */
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Constraint)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint)
+    private static final context.ContextOuterClass.Constraint DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint();
+    }
+
+    public static context.ContextOuterClass.Constraint getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+      @java.lang.Override
+      public Constraint parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Constraint> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
+     */
+    boolean hasConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
+     */
+    context.ContextOuterClass.Uuid getConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
+   */
+  public static final class ConnectionId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
+              }
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+    }
+
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    }
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ConnectionId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
+        } else {
+          result.connectionUuid_ = connectionUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
+       */
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
+       */
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        } else {
+          return connectionUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionUuid_ = value;
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
+          }
+          onChanged();
+        } else {
+          connectionUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+          onChanged();
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
+                  getParentForChildren(),
+                  isClean());
+          connectionUuid_ = null;
+        }
+        return connectionUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+    }
+
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+      @java.lang.Override
+      public ConnectionId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return Whether the relatedServiceId field is set.
+     */
+    boolean hasRelatedServiceId();
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return The relatedServiceId.
+     */
+    context.ContextOuterClass.ServiceId getRelatedServiceId();
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathList();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPath(int index);
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    int getPathCount();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Connection}
+   */
+  public static final class Connection extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Connection() {
+      path_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Connection();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Connection(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (relatedServiceId_ != null) {
+                subBuilder = relatedServiceId_.toBuilder();
+              }
+              relatedServiceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(relatedServiceId_);
+                relatedServiceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              path_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          path_ = java.util.Collections.unmodifiableList(path_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    public static final int RELATED_SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId relatedServiceId_;
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return Whether the relatedServiceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasRelatedServiceId() {
+      return relatedServiceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return The relatedServiceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getRelatedServiceId() {
+      return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+    }
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
+      return getRelatedServiceId();
+    }
+
+    public static final int PATH_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> path_;
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
+      return path_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathOrBuilderList() {
+      return path_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathCount() {
+      return path_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPath(int index) {
+      return path_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+        int index) {
+      return path_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (relatedServiceId_ != null) {
+        output.writeMessage(2, getRelatedServiceId());
+      }
+      for (int i = 0; i < path_.size(); i++) {
+        output.writeMessage(3, path_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (relatedServiceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRelatedServiceId());
+      }
+      for (int i = 0; i < path_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, path_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasRelatedServiceId() != other.hasRelatedServiceId()) return false;
+      if (hasRelatedServiceId()) {
+        if (!getRelatedServiceId()
+            .equals(other.getRelatedServiceId())) return false;
+      }
+      if (!getPathList()
+          .equals(other.getPathList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasRelatedServiceId()) {
+        hash = (37 * hash) + RELATED_SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getRelatedServiceId().hashCode();
+      }
+      if (getPathCount() > 0) {
+        hash = (37 * hash) + PATH_FIELD_NUMBER;
+        hash = (53 * hash) + getPathList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Connection}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = null;
+        } else {
+          relatedServiceId_ = null;
+          relatedServiceIdBuilder_ = null;
+        }
+        if (pathBuilder_ == null) {
+          path_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (relatedServiceIdBuilder_ == null) {
+          result.relatedServiceId_ = relatedServiceId_;
+        } else {
+          result.relatedServiceId_ = relatedServiceIdBuilder_.build();
+        }
+        if (pathBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            path_ = java.util.Collections.unmodifiableList(path_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.path_ = path_;
+        } else {
+          result.path_ = pathBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
+        if (other.hasRelatedServiceId()) {
+          mergeRelatedServiceId(other.getRelatedServiceId());
+        }
+        if (pathBuilder_ == null) {
+          if (!other.path_.isEmpty()) {
+            if (path_.isEmpty()) {
+              path_ = other.path_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathIsMutable();
+              path_.addAll(other.path_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.path_.isEmpty()) {
+            if (pathBuilder_.isEmpty()) {
+              pathBuilder_.dispose();
+              pathBuilder_ = null;
+              path_ = other.path_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathFieldBuilder() : null;
+            } else {
+              pathBuilder_.addAllMessages(other.path_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId relatedServiceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> relatedServiceIdBuilder_;
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       * @return Whether the relatedServiceId field is set.
+       */
+      public boolean hasRelatedServiceId() {
+        return relatedServiceIdBuilder_ != null || relatedServiceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       * @return The relatedServiceId.
+       */
+      public context.ContextOuterClass.ServiceId getRelatedServiceId() {
+        if (relatedServiceIdBuilder_ == null) {
+          return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+        } else {
+          return relatedServiceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder setRelatedServiceId(context.ContextOuterClass.ServiceId value) {
+        if (relatedServiceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          relatedServiceId_ = value;
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder setRelatedServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder mergeRelatedServiceId(context.ContextOuterClass.ServiceId value) {
+        if (relatedServiceIdBuilder_ == null) {
+          if (relatedServiceId_ != null) {
+            relatedServiceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(relatedServiceId_).mergeFrom(value).buildPartial();
+          } else {
+            relatedServiceId_ = value;
+          }
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder clearRelatedServiceId() {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = null;
+          onChanged();
+        } else {
+          relatedServiceId_ = null;
+          relatedServiceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getRelatedServiceIdBuilder() {
+        
+        onChanged();
+        return getRelatedServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
+        if (relatedServiceIdBuilder_ != null) {
+          return relatedServiceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return relatedServiceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getRelatedServiceIdFieldBuilder() {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getRelatedServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          relatedServiceId_ = null;
+        }
+        return relatedServiceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> path_ =
+        java.util.Collections.emptyList();
+      private void ensurePathIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(path_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
+        if (pathBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(path_);
+        } else {
+          return pathBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public int getPathCount() {
+        if (pathBuilder_ == null) {
+          return path_.size();
+        } else {
+          return pathBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPath(int index) {
+        if (pathBuilder_ == null) {
+          return path_.get(index);
+        } else {
+          return pathBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder setPath(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.set(index, value);
+          onChanged();
+        } else {
+          pathBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder setPath(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.add(value);
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.add(index, value);
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addAllPath(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, path_);
+          onChanged();
+        } else {
+          pathBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder clearPath() {
+        if (pathBuilder_ == null) {
+          path_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder removePath(int index) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.remove(index);
+          onChanged();
+        } else {
+          pathBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathBuilder(
+          int index) {
+        return getPathFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+          int index) {
+        if (pathBuilder_ == null) {
+          return path_.get(index);  } else {
+          return pathBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathOrBuilderList() {
+        if (pathBuilder_ != null) {
+          return pathBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(path_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathBuilder() {
+        return getPathFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathBuilder(
+          int index) {
+        return getPathFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathBuilderList() {
+        return getPathFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathFieldBuilder() {
+        if (pathBuilder_ == null) {
+          pathBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  path_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          path_ = null;
+        }
+        return pathBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        } else {
+          return connectionIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
+        } else {
+          return connectionIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
+        } else {
+          return connectionIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          connectionIds_ = null;
+        }
+        return connectionIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+      @java.lang.Override
+      public ConnectionIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.Connection getConnections(int index);
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    int getConnectionsCount();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionList}
+   */
+  public static final class ConnectionList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connections_ = java.util.Collections.unmodifiableList(connections_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+    }
+
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionsCount() {
+      return connections_.size();
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index) {
+      return connections_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connections_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connections_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connections_ = java.util.Collections.unmodifiableList(connections_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connections_ = connections_;
+        } else {
+          result.connections_ = connectionsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionsFieldBuilder() : null;
+            } else {
+              connectionsBuilder_.addAllMessages(other.connections_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
+
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
+        } else {
+          return connectionsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
+        } else {
+          return connectionsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
+        } else {
+          return connectionsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
+          onChanged();
+        } else {
+          connectionsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(value);
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connections_);
+          onChanged();
+        } else {
+          connectionsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          connectionsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
+          onChanged();
+        } else {
+          connectionsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+          int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(connections_);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          connections_ = null;
+        }
+        return connectionsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+    }
+
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+      @java.lang.Override
+      public ConnectionList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TeraFlowControllerOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TeraFlowController)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The ipAddress.
+     */
+    java.lang.String getIpAddress();
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The bytes for ipAddress.
+     */
+    com.google.protobuf.ByteString
+        getIpAddressBytes();
+
+    /**
+     * <code>uint32 port = 3;</code>
+     * @return The port.
+     */
+    int getPort();
+  }
+  /**
+   * <pre>
+   * ----- Miscellaneous -------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.TeraFlowController}
+   */
+  public static final class TeraFlowController extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TeraFlowController)
+      TeraFlowControllerOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TeraFlowController.newBuilder() to construct.
+    private TeraFlowController(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TeraFlowController() {
+      ipAddress_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TeraFlowController();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TeraFlowController(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              ipAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              port_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TeraFlowController_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TeraFlowController.class, context.ContextOuterClass.TeraFlowController.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object ipAddress_;
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The ipAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getIpAddress() {
+      java.lang.Object ref = ipAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        ipAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The bytes for ipAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIpAddressBytes() {
+      java.lang.Object ref = ipAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ipAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PORT_FIELD_NUMBER = 3;
+    private int port_;
+    /**
+     * <code>uint32 port = 3;</code>
+     * @return The port.
+     */
+    @java.lang.Override
+    public int getPort() {
+      return port_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (!getIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ipAddress_);
+      }
+      if (port_ != 0) {
+        output.writeUInt32(3, port_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (!getIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ipAddress_);
+      }
+      if (port_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, port_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TeraFlowController)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TeraFlowController other = (context.ContextOuterClass.TeraFlowController) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!getIpAddress()
+          .equals(other.getIpAddress())) return false;
+      if (getPort()
+          != other.getPort()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      hash = (37 * hash) + IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getIpAddress().hashCode();
+      hash = (37 * hash) + PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getPort();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TeraFlowController prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Miscellaneous -------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.TeraFlowController}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TeraFlowController)
+        context.ContextOuterClass.TeraFlowControllerOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TeraFlowController.class, context.ContextOuterClass.TeraFlowController.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TeraFlowController.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        ipAddress_ = "";
+
+        port_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+        return context.ContextOuterClass.TeraFlowController.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController build() {
+        context.ContextOuterClass.TeraFlowController result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController buildPartial() {
+        context.ContextOuterClass.TeraFlowController result = new context.ContextOuterClass.TeraFlowController(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        result.ipAddress_ = ipAddress_;
+        result.port_ = port_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TeraFlowController) {
+          return mergeFrom((context.ContextOuterClass.TeraFlowController)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TeraFlowController other) {
+        if (other == context.ContextOuterClass.TeraFlowController.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (!other.getIpAddress().isEmpty()) {
+          ipAddress_ = other.ipAddress_;
+          onChanged();
+        }
+        if (other.getPort() != 0) {
+          setPort(other.getPort());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TeraFlowController parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TeraFlowController) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private java.lang.Object ipAddress_ = "";
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return The ipAddress.
+       */
+      public java.lang.String getIpAddress() {
+        java.lang.Object ref = ipAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ipAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return The bytes for ipAddress.
+       */
+      public com.google.protobuf.ByteString
+          getIpAddressBytes() {
+        java.lang.Object ref = ipAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ipAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @param value The ipAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ipAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIpAddress() {
+        
+        ipAddress_ = getDefaultInstance().getIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @param value The bytes for ipAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        ipAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int port_ ;
+      /**
+       * <code>uint32 port = 3;</code>
+       * @return The port.
+       */
+      @java.lang.Override
+      public int getPort() {
+        return port_;
+      }
+      /**
+       * <code>uint32 port = 3;</code>
+       * @param value The port to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPort(int value) {
+        
+        port_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 port = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPort() {
+        
+        port_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TeraFlowController)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TeraFlowController)
+    private static final context.ContextOuterClass.TeraFlowController DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TeraFlowController();
+    }
+
+    public static context.ContextOuterClass.TeraFlowController getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TeraFlowController>
+        PARSER = new com.google.protobuf.AbstractParser<TeraFlowController>() {
+      @java.lang.Override
+      public TeraFlowController parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TeraFlowController(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TeraFlowController> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TeraFlowController> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AuthenticationResultOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.AuthenticationResult)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>bool authenticated = 2;</code>
+     * @return The authenticated.
+     */
+    boolean getAuthenticated();
+  }
+  /**
+   * Protobuf type {@code context.AuthenticationResult}
+   */
+  public static final class AuthenticationResult extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.AuthenticationResult)
+      AuthenticationResultOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AuthenticationResult.newBuilder() to construct.
+    private AuthenticationResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AuthenticationResult() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AuthenticationResult();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AuthenticationResult(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+
+              authenticated_ = input.readBool();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_AuthenticationResult_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.AuthenticationResult.class, context.ContextOuterClass.AuthenticationResult.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int AUTHENTICATED_FIELD_NUMBER = 2;
+    private boolean authenticated_;
+    /**
+     * <code>bool authenticated = 2;</code>
+     * @return The authenticated.
+     */
+    @java.lang.Override
+    public boolean getAuthenticated() {
+      return authenticated_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (authenticated_ != false) {
+        output.writeBool(2, authenticated_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (authenticated_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, authenticated_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.AuthenticationResult)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.AuthenticationResult other = (context.ContextOuterClass.AuthenticationResult) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (getAuthenticated()
+          != other.getAuthenticated()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      hash = (37 * hash) + AUTHENTICATED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getAuthenticated());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.AuthenticationResult prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.AuthenticationResult}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.AuthenticationResult)
+        context.ContextOuterClass.AuthenticationResultOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.AuthenticationResult.class, context.ContextOuterClass.AuthenticationResult.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.AuthenticationResult.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        authenticated_ = false;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+        return context.ContextOuterClass.AuthenticationResult.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult build() {
+        context.ContextOuterClass.AuthenticationResult result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult buildPartial() {
+        context.ContextOuterClass.AuthenticationResult result = new context.ContextOuterClass.AuthenticationResult(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        result.authenticated_ = authenticated_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.AuthenticationResult) {
+          return mergeFrom((context.ContextOuterClass.AuthenticationResult)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.AuthenticationResult other) {
+        if (other == context.ContextOuterClass.AuthenticationResult.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.getAuthenticated() != false) {
+          setAuthenticated(other.getAuthenticated());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.AuthenticationResult parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.AuthenticationResult) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private boolean authenticated_ ;
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @return The authenticated.
+       */
+      @java.lang.Override
+      public boolean getAuthenticated() {
+        return authenticated_;
+      }
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @param value The authenticated to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAuthenticated(boolean value) {
+        
+        authenticated_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAuthenticated() {
+        
+        authenticated_ = false;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.AuthenticationResult)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.AuthenticationResult)
+    private static final context.ContextOuterClass.AuthenticationResult DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.AuthenticationResult();
+    }
+
+    public static context.ContextOuterClass.AuthenticationResult getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AuthenticationResult>
+        PARSER = new com.google.protobuf.AbstractParser<AuthenticationResult>() {
+      @java.lang.Override
+      public AuthenticationResult parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AuthenticationResult(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AuthenticationResult> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AuthenticationResult> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Empty_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Empty_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Uuid_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Uuid_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Event_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Event_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Context_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Context_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Topology_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Topology_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Device_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Device_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceConfig_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Link_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Link_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Service_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Service_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceStatus_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceConfig_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPointId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPointId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPoint_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPoint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConfigRule_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConfigRule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Connection_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Connection_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TeraFlowController_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TeraFlowController_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_AuthenticationResult_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_AuthenticationResult_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\rcontext.proto\022\007context\"\007\n\005Empty\"\024\n\004Uui" +
+      "d\022\014\n\004uuid\030\001 \001(\t\"F\n\005Event\022\021\n\ttimestamp\030\001 " +
+      "\001(\001\022*\n\nevent_type\030\002 \001(\0162\026.context.EventT" +
+      "ypeEnum\"0\n\tContextId\022#\n\014context_uuid\030\001 \001" +
+      "(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\ncontext" +
+      "_id\030\001 \001(\0132\022.context.ContextId\022)\n\014topolog" +
+      "y_ids\030\002 \003(\0132\023.context.TopologyId\022\'\n\013serv" +
+      "ice_ids\030\003 \003(\0132\022.context.ServiceId\022/\n\ncon" +
+      "troller\030\004 \001(\0132\033.context.TeraFlowControll" +
+      "er\"8\n\rContextIdList\022\'\n\013context_ids\030\001 \003(\013" +
+      "2\022.context.ContextId\"1\n\013ContextList\022\"\n\010c" +
+      "ontexts\030\001 \003(\0132\020.context.Context\"U\n\014Conte" +
+      "xtEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&" +
+      "\n\ncontext_id\030\002 \001(\0132\022.context.ContextId\"Z" +
+      "\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132\022.conte" +
+      "xt.ContextId\022$\n\rtopology_uuid\030\002 \001(\0132\r.co" +
+      "ntext.Uuid\"~\n\010Topology\022(\n\013topology_id\030\001 " +
+      "\001(\0132\023.context.TopologyId\022%\n\ndevice_ids\030\002" +
+      " \003(\0132\021.context.DeviceId\022!\n\010link_ids\030\003 \003(" +
+      "\0132\017.context.LinkId\";\n\016TopologyIdList\022)\n\014" +
+      "topology_ids\030\001 \003(\0132\023.context.TopologyId\"" +
+      "5\n\014TopologyList\022%\n\ntopologies\030\001 \003(\0132\021.co" +
+      "ntext.Topology\"X\n\rTopologyEvent\022\035\n\005event" +
+      "\030\001 \001(\0132\016.context.Event\022(\n\013topology_id\030\002 " +
+      "\001(\0132\023.context.TopologyId\".\n\010DeviceId\022\"\n\013" +
+      "device_uuid\030\001 \001(\0132\r.context.Uuid\"\232\002\n\006Dev" +
+      "ice\022$\n\tdevice_id\030\001 \001(\0132\021.context.DeviceI" +
+      "d\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_config\030" +
+      "\003 \001(\0132\025.context.DeviceConfig\022G\n\031device_o" +
+      "perational_status\030\004 \001(\0162$.context.Device" +
+      "OperationalStatusEnum\0221\n\016device_drivers\030" +
+      "\005 \003(\0162\031.context.DeviceDriverEnum\022+\n\020devi" +
+      "ce_endpoints\030\006 \003(\0132\021.context.EndPoint\"9\n" +
+      "\014DeviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.co" +
+      "ntext.ConfigRule\"5\n\014DeviceIdList\022%\n\ndevi" +
+      "ce_ids\030\001 \003(\0132\021.context.DeviceId\".\n\nDevic" +
+      "eList\022 \n\007devices\030\001 \003(\0132\017.context.Device\"" +
+      "R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
+      "Event\022$\n\tdevice_id\030\002 \001(\0132\021.context.Devic" +
+      "eId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132\r.conte" +
+      "xt.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132\017.conte" +
+      "xt.LinkId\022.\n\021link_endpoint_ids\030\002 \003(\0132\023.c" +
+      "ontext.EndPointId\"/\n\nLinkIdList\022!\n\010link_" +
+      "ids\030\001 \003(\0132\017.context.LinkId\"(\n\010LinkList\022\034" +
+      "\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tLinkEven" +
+      "t\022\035\n\005event\030\001 \001(\0132\016.context.Event\022 \n\007link" +
+      "_id\030\002 \001(\0132\017.context.LinkId\"X\n\tServiceId\022" +
+      "&\n\ncontext_id\030\001 \001(\0132\022.context.ContextId\022" +
+      "#\n\014service_uuid\030\002 \001(\0132\r.context.Uuid\"\246\002\n" +
+      "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" +
+      "erviceId\022.\n\014service_type\030\002 \001(\0162\030.context" +
+      ".ServiceTypeEnum\0221\n\024service_endpoint_ids" +
+      "\030\003 \003(\0132\023.context.EndPointId\0220\n\023service_c" +
+      "onstraints\030\004 \003(\0132\023.context.Constraint\022.\n" +
+      "\016service_status\030\005 \001(\0132\026.context.ServiceS" +
+      "tatus\022.\n\016service_config\030\006 \001(\0132\026.context." +
+      "ServiceConfig\"C\n\rServiceStatus\0222\n\016servic" +
+      "e_status\030\001 \001(\0162\032.context.ServiceStatusEn" +
+      "um\":\n\rServiceConfig\022)\n\014config_rules\030\001 \003(" +
+      "\0132\023.context.ConfigRule\"8\n\rServiceIdList\022" +
+      "\'\n\013service_ids\030\001 \003(\0132\022.context.ServiceId" +
+      "\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132\020.cont" +
+      "ext.Service\"U\n\014ServiceEvent\022\035\n\005event\030\001 \001" +
+      "(\0132\016.context.Event\022&\n\nservice_id\030\002 \001(\0132\022" +
+      ".context.ServiceId\"\202\001\n\nEndPointId\022(\n\013top" +
+      "ology_id\030\001 \001(\0132\023.context.TopologyId\022$\n\td" +
+      "evice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\rend" +
+      "point_uuid\030\003 \001(\0132\r.context.Uuid\"K\n\010EndPo" +
+      "int\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPo" +
+      "intId\022\025\n\rendpoint_type\030\002 \001(\t\"e\n\nConfigRu" +
+      "le\022)\n\006action\030\001 \001(\0162\031.context.ConfigActio" +
+      "nEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016resource_" +
+      "value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017constraint_" +
+      "type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"6\n\014" +
+      "ConnectionId\022&\n\017connection_uuid\030\001 \001(\0132\r." +
+      "context.Uuid\"\215\001\n\nConnection\022,\n\rconnectio" +
+      "n_id\030\001 \001(\0132\025.context.ConnectionId\022.\n\022rel" +
+      "ated_service_id\030\002 \001(\0132\022.context.ServiceI" +
+      "d\022!\n\004path\030\003 \003(\0132\023.context.EndPointId\"A\n\020" +
+      "ConnectionIdList\022-\n\016connection_ids\030\001 \003(\013" +
+      "2\025.context.ConnectionId\":\n\016ConnectionLis" +
+      "t\022(\n\013connections\030\001 \003(\0132\023.context.Connect" +
+      "ion\"^\n\022TeraFlowController\022&\n\ncontext_id\030" +
+      "\001 \001(\0132\022.context.ContextId\022\022\n\nip_address\030" +
+      "\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationRes" +
+      "ult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" +
+      "tId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTypeE" +
+      "num\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTTYP" +
+      "E_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EVEN" +
+      "TTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n\026D" +
+      "EVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVER_" +
+      "OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT_A" +
+      "PI\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRIVE" +
+      "R_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRIVE" +
+      "R_ONF_TR_352\020\005*\217\001\n\033DeviceOperationalStat" +
+      "usEnum\022%\n!DEVICEOPERATIONALSTATUS_UNDEFI" +
+      "NED\020\000\022$\n DEVICEOPERATIONALSTATUS_DISABLE" +
+      "D\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED\020\002" +
+      "*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKN" +
+      "OWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETY" +
+      "PE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVI" +
+      "TY_SERVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027SE" +
+      "RVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS" +
+      "_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!\n\035" +
+      "SERVICESTATUS_PENDING_REMOVAL\020\003*]\n\020Confi" +
+      "gActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022" +
+      "\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_DE" +
+      "LETE\020\0022\245\r\n\016ContextService\022:\n\016ListContext" +
+      "Ids\022\016.context.Empty\032\026.context.ContextIdL" +
+      "ist\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024." +
+      "context.ContextList\"\000\0224\n\nGetContext\022\022.co" +
+      "ntext.ContextId\032\020.context.Context\"\000\0224\n\nS" +
+      "etContext\022\020.context.Context\032\022.context.Co" +
+      "ntextId\"\000\0225\n\rRemoveContext\022\022.context.Con" +
+      "textId\032\016.context.Empty\"\000\022=\n\020GetContextEv" +
+      "ents\022\016.context.Empty\032\025.context.ContextEv" +
+      "ent\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Con" +
+      "textId\032\027.context.TopologyIdList\"\000\022=\n\016Lis" +
+      "tTopologies\022\022.context.ContextId\032\025.contex" +
+      "t.TopologyList\"\000\0227\n\013GetTopology\022\023.contex" +
+      "t.TopologyId\032\021.context.Topology\"\000\0227\n\013Set" +
+      "Topology\022\021.context.Topology\032\023.context.To" +
+      "pologyId\"\000\0227\n\016RemoveTopology\022\023.context.T" +
+      "opologyId\032\016.context.Empty\"\000\022?\n\021GetTopolo" +
+      "gyEvents\022\016.context.Empty\032\026.context.Topol" +
+      "ogyEvent\"\0000\001\0228\n\rListDeviceIds\022\016.context." +
+      "Empty\032\025.context.DeviceIdList\"\000\0224\n\013ListDe" +
+      "vices\022\016.context.Empty\032\023.context.DeviceLi" +
+      "st\"\000\0221\n\tGetDevice\022\021.context.DeviceId\032\017.c" +
+      "ontext.Device\"\000\0221\n\tSetDevice\022\017.context.D" +
+      "evice\032\021.context.DeviceId\"\000\0223\n\014RemoveDevi" +
+      "ce\022\021.context.DeviceId\032\016.context.Empty\"\000\022" +
+      ";\n\017GetDeviceEvents\022\016.context.Empty\032\024.con" +
+      "text.DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.co" +
+      "ntext.Empty\032\023.context.LinkIdList\"\000\0220\n\tLi" +
+      "stLinks\022\016.context.Empty\032\021.context.LinkLi" +
+      "st\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.conte" +
+      "xt.Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.co" +
+      "ntext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.L" +
+      "inkId\032\016.context.Empty\"\000\0227\n\rGetLinkEvents" +
+      "\022\016.context.Empty\032\022.context.LinkEvent\"\0000\001" +
+      "\022>\n\016ListServiceIds\022\022.context.ContextId\032\026" +
+      ".context.ServiceIdList\"\000\022:\n\014ListServices" +
+      "\022\022.context.ContextId\032\024.context.ServiceLi" +
+      "st\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020" +
+      ".context.Service\"\000\0224\n\nSetService\022\020.conte" +
+      "xt.Service\032\022.context.ServiceId\"\000\0225\n\rRemo" +
+      "veService\022\022.context.ServiceId\032\016.context." +
+      "Empty\"\000\022=\n\020GetServiceEvents\022\016.context.Em" +
+      "pty\032\025.context.ServiceEvent\"\0000\001b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_context_Empty_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_context_Empty_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Empty_descriptor,
+        new java.lang.String[] { });
+    internal_static_context_Uuid_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_context_Uuid_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Uuid_descriptor,
+        new java.lang.String[] { "Uuid", });
+    internal_static_context_Event_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_context_Event_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Event_descriptor,
+        new java.lang.String[] { "Timestamp", "EventType", });
+    internal_static_context_ContextId_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_context_ContextId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ContextId_descriptor,
+        new java.lang.String[] { "ContextUuid", });
+    internal_static_context_Context_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_context_Context_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Context_descriptor,
+        new java.lang.String[] { "ContextId", "TopologyIds", "ServiceIds", "Controller", });
+    internal_static_context_ContextIdList_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_context_ContextIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ContextIdList_descriptor,
+        new java.lang.String[] { "ContextIds", });
+    internal_static_context_ContextList_descriptor =
+      getDescriptor().getMessageTypes().get(6);
+    internal_static_context_ContextList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ContextList_descriptor,
+        new java.lang.String[] { "Contexts", });
+    internal_static_context_ContextEvent_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_context_ContextEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ContextEvent_descriptor,
+        new java.lang.String[] { "Event", "ContextId", });
+    internal_static_context_TopologyId_descriptor =
+      getDescriptor().getMessageTypes().get(8);
+    internal_static_context_TopologyId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TopologyId_descriptor,
+        new java.lang.String[] { "ContextId", "TopologyUuid", });
+    internal_static_context_Topology_descriptor =
+      getDescriptor().getMessageTypes().get(9);
+    internal_static_context_Topology_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Topology_descriptor,
+        new java.lang.String[] { "TopologyId", "DeviceIds", "LinkIds", });
+    internal_static_context_TopologyIdList_descriptor =
+      getDescriptor().getMessageTypes().get(10);
+    internal_static_context_TopologyIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TopologyIdList_descriptor,
+        new java.lang.String[] { "TopologyIds", });
+    internal_static_context_TopologyList_descriptor =
+      getDescriptor().getMessageTypes().get(11);
+    internal_static_context_TopologyList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TopologyList_descriptor,
+        new java.lang.String[] { "Topologies", });
+    internal_static_context_TopologyEvent_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_context_TopologyEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TopologyEvent_descriptor,
+        new java.lang.String[] { "Event", "TopologyId", });
+    internal_static_context_DeviceId_descriptor =
+      getDescriptor().getMessageTypes().get(13);
+    internal_static_context_DeviceId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceId_descriptor,
+        new java.lang.String[] { "DeviceUuid", });
+    internal_static_context_Device_descriptor =
+      getDescriptor().getMessageTypes().get(14);
+    internal_static_context_Device_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Device_descriptor,
+        new java.lang.String[] { "DeviceId", "DeviceType", "DeviceConfig", "DeviceOperationalStatus", "DeviceDrivers", "DeviceEndpoints", });
+    internal_static_context_DeviceConfig_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_context_DeviceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
+    internal_static_context_DeviceIdList_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_context_DeviceIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceIdList_descriptor,
+        new java.lang.String[] { "DeviceIds", });
+    internal_static_context_DeviceList_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_context_DeviceList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceList_descriptor,
+        new java.lang.String[] { "Devices", });
+    internal_static_context_DeviceEvent_descriptor =
+      getDescriptor().getMessageTypes().get(18);
+    internal_static_context_DeviceEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceEvent_descriptor,
+        new java.lang.String[] { "Event", "DeviceId", });
+    internal_static_context_LinkId_descriptor =
+      getDescriptor().getMessageTypes().get(19);
+    internal_static_context_LinkId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_LinkId_descriptor,
+        new java.lang.String[] { "LinkUuid", });
+    internal_static_context_Link_descriptor =
+      getDescriptor().getMessageTypes().get(20);
+    internal_static_context_Link_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Link_descriptor,
+        new java.lang.String[] { "LinkId", "LinkEndpointIds", });
+    internal_static_context_LinkIdList_descriptor =
+      getDescriptor().getMessageTypes().get(21);
+    internal_static_context_LinkIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_LinkIdList_descriptor,
+        new java.lang.String[] { "LinkIds", });
+    internal_static_context_LinkList_descriptor =
+      getDescriptor().getMessageTypes().get(22);
+    internal_static_context_LinkList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_LinkList_descriptor,
+        new java.lang.String[] { "Links", });
+    internal_static_context_LinkEvent_descriptor =
+      getDescriptor().getMessageTypes().get(23);
+    internal_static_context_LinkEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_LinkEvent_descriptor,
+        new java.lang.String[] { "Event", "LinkId", });
+    internal_static_context_ServiceId_descriptor =
+      getDescriptor().getMessageTypes().get(24);
+    internal_static_context_ServiceId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceId_descriptor,
+        new java.lang.String[] { "ContextId", "ServiceUuid", });
+    internal_static_context_Service_descriptor =
+      getDescriptor().getMessageTypes().get(25);
+    internal_static_context_Service_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Service_descriptor,
+        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", });
+    internal_static_context_ServiceStatus_descriptor =
+      getDescriptor().getMessageTypes().get(26);
+    internal_static_context_ServiceStatus_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceStatus_descriptor,
+        new java.lang.String[] { "ServiceStatus", });
+    internal_static_context_ServiceConfig_descriptor =
+      getDescriptor().getMessageTypes().get(27);
+    internal_static_context_ServiceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
+    internal_static_context_ServiceIdList_descriptor =
+      getDescriptor().getMessageTypes().get(28);
+    internal_static_context_ServiceIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceIdList_descriptor,
+        new java.lang.String[] { "ServiceIds", });
+    internal_static_context_ServiceList_descriptor =
+      getDescriptor().getMessageTypes().get(29);
+    internal_static_context_ServiceList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceList_descriptor,
+        new java.lang.String[] { "Services", });
+    internal_static_context_ServiceEvent_descriptor =
+      getDescriptor().getMessageTypes().get(30);
+    internal_static_context_ServiceEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceEvent_descriptor,
+        new java.lang.String[] { "Event", "ServiceId", });
+    internal_static_context_EndPointId_descriptor =
+      getDescriptor().getMessageTypes().get(31);
+    internal_static_context_EndPointId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPointId_descriptor,
+        new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
+    internal_static_context_EndPoint_descriptor =
+      getDescriptor().getMessageTypes().get(32);
+    internal_static_context_EndPoint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPoint_descriptor,
+        new java.lang.String[] { "EndpointId", "EndpointType", });
+    internal_static_context_ConfigRule_descriptor =
+      getDescriptor().getMessageTypes().get(33);
+    internal_static_context_ConfigRule_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConfigRule_descriptor,
+        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
+    internal_static_context_Constraint_descriptor =
+      getDescriptor().getMessageTypes().get(34);
+    internal_static_context_Constraint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_descriptor,
+        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+    internal_static_context_ConnectionId_descriptor =
+      getDescriptor().getMessageTypes().get(35);
+    internal_static_context_ConnectionId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionId_descriptor,
+        new java.lang.String[] { "ConnectionUuid", });
+    internal_static_context_Connection_descriptor =
+      getDescriptor().getMessageTypes().get(36);
+    internal_static_context_Connection_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Connection_descriptor,
+        new java.lang.String[] { "ConnectionId", "RelatedServiceId", "Path", });
+    internal_static_context_ConnectionIdList_descriptor =
+      getDescriptor().getMessageTypes().get(37);
+    internal_static_context_ConnectionIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionIdList_descriptor,
+        new java.lang.String[] { "ConnectionIds", });
+    internal_static_context_ConnectionList_descriptor =
+      getDescriptor().getMessageTypes().get(38);
+    internal_static_context_ConnectionList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionList_descriptor,
+        new java.lang.String[] { "Connections", });
+    internal_static_context_TeraFlowController_descriptor =
+      getDescriptor().getMessageTypes().get(39);
+    internal_static_context_TeraFlowController_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TeraFlowController_descriptor,
+        new java.lang.String[] { "ContextId", "IpAddress", "Port", });
+    internal_static_context_AuthenticationResult_descriptor =
+      getDescriptor().getMessageTypes().get(40);
+    internal_static_context_AuthenticationResult_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_AuthenticationResult_descriptor,
+        new java.lang.String[] { "ContextId", "Authenticated", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e5095d25896abc5ff37b7a5e7d4ac7f97825dc6
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/ContextService.java
@@ -0,0 +1,74 @@
+package context;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public interface ContextService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request);
+    
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request);
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbecd5d2f3cdf04e9f47693a4aeea37753855cdf
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -0,0 +1,264 @@
+package context;
+
+import io.grpc.BindableService;
+import io.quarkus.grpc.GrpcService;
+import io.quarkus.grpc.runtime.MutinyBean;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceImplBase implements BindableService, MutinyBean {
+
+    private final ContextService delegate;
+
+    ContextServiceBean(@GrpcService ContextService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listContextIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listContexts(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.getContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+       try {
+         return delegate.setContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.removeContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listTopologyIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listTopologies(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+       try {
+         return delegate.getTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+       try {
+         return delegate.setTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+       try {
+         return delegate.removeTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listDeviceIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listDevices(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.getDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+       try {
+         return delegate.setDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.removeDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listLinkIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listLinks(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+       try {
+         return delegate.getLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+       try {
+         return delegate.setLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+       try {
+         return delegate.removeLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listServiceIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listServices(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.getService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+       try {
+         return delegate.setService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.removeService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getContextEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getTopologyEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getDeviceEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getLinkEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getServiceEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e815b940e668e33bf936d7d9de0930d086ff9a3
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -0,0 +1,149 @@
+package context;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public class ContextServiceClient implements ContextService, MutinyClient<MutinyContextServiceGrpc.MutinyContextServiceStub> {
+
+    private final MutinyContextServiceGrpc.MutinyContextServiceStub stub;
+
+    public ContextServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyContextServiceGrpc.MutinyContextServiceStub, MutinyContextServiceGrpc.MutinyContextServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyContextServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyContextServiceGrpc.MutinyContextServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+       return stub.listContextIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+       return stub.listContexts(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+       return stub.getContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+       return stub.setContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+       return stub.removeContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+       return stub.listTopologyIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+       return stub.listTopologies(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+       return stub.getTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+       return stub.setTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+       return stub.removeTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+       return stub.listDeviceIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+       return stub.listDevices(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+       return stub.getDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+       return stub.setDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+       return stub.removeDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+       return stub.listLinkIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+       return stub.listLinks(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+       return stub.getLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+       return stub.setLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+       return stub.removeLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+       return stub.listServiceIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+       return stub.listServices(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+       return stub.getService(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+       return stub.setService(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+       return stub.removeService(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+       return stub.getContextEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+       return stub.getTopologyEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+       return stub.getDeviceEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+       return stub.getLinkEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+       return stub.getServiceEvents(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..03f2a66f6f09ed54eb1c359a356ba5240b184166
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -0,0 +1,2386 @@
+package context;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: context.proto")
+public final class ContextServiceGrpc {
+
+  private ContextServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "context.ContextService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextIdList> getListContextIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListContextIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextIdList> getListContextIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList> getListContextIdsMethod;
+    if ((getListContextIdsMethod = ContextServiceGrpc.getListContextIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListContextIdsMethod = ContextServiceGrpc.getListContextIdsMethod) == null) {
+          ContextServiceGrpc.getListContextIdsMethod = getListContextIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListContextIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListContextIds"))
+              .build();
+        }
+      }
+    }
+    return getListContextIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextList> getListContextsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListContexts",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextList> getListContextsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList> getListContextsMethod;
+    if ((getListContextsMethod = ContextServiceGrpc.getListContextsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListContextsMethod = ContextServiceGrpc.getListContextsMethod) == null) {
+          ContextServiceGrpc.getListContextsMethod = getListContextsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListContexts"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListContexts"))
+              .build();
+        }
+      }
+    }
+    return getListContextsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Context> getGetContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetContext",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.Context.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Context> getGetContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context> getGetContextMethod;
+    if ((getGetContextMethod = ContextServiceGrpc.getGetContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetContextMethod = ContextServiceGrpc.getGetContextMethod) == null) {
+          ContextServiceGrpc.getGetContextMethod = getGetContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Context.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetContext"))
+              .build();
+        }
+      }
+    }
+    return getGetContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Context,
+      context.ContextOuterClass.ContextId> getSetContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetContext",
+      requestType = context.ContextOuterClass.Context.class,
+      responseType = context.ContextOuterClass.ContextId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Context,
+      context.ContextOuterClass.ContextId> getSetContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId> getSetContextMethod;
+    if ((getSetContextMethod = ContextServiceGrpc.getSetContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetContextMethod = ContextServiceGrpc.getSetContextMethod) == null) {
+          ContextServiceGrpc.getSetContextMethod = getSetContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Context.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetContext"))
+              .build();
+        }
+      }
+    }
+    return getSetContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Empty> getRemoveContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveContext",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Empty> getRemoveContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty> getRemoveContextMethod;
+    if ((getRemoveContextMethod = ContextServiceGrpc.getRemoveContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveContextMethod = ContextServiceGrpc.getRemoveContextMethod) == null) {
+          ContextServiceGrpc.getRemoveContextMethod = getRemoveContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveContext"))
+              .build();
+        }
+      }
+    }
+    return getRemoveContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextEvent> getGetContextEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetContextEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextEvent> getGetContextEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent> getGetContextEventsMethod;
+    if ((getGetContextEventsMethod = ContextServiceGrpc.getGetContextEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetContextEventsMethod = ContextServiceGrpc.getGetContextEventsMethod) == null) {
+          ContextServiceGrpc.getGetContextEventsMethod = getGetContextEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetContextEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetContextEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetContextEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListTopologyIds",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.TopologyIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod;
+    if ((getListTopologyIdsMethod = ContextServiceGrpc.getListTopologyIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListTopologyIdsMethod = ContextServiceGrpc.getListTopologyIdsMethod) == null) {
+          ContextServiceGrpc.getListTopologyIdsMethod = getListTopologyIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopologyIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListTopologyIds"))
+              .build();
+        }
+      }
+    }
+    return getListTopologyIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyList> getListTopologiesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListTopologies",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.TopologyList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyList> getListTopologiesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList> getListTopologiesMethod;
+    if ((getListTopologiesMethod = ContextServiceGrpc.getListTopologiesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListTopologiesMethod = ContextServiceGrpc.getListTopologiesMethod) == null) {
+          ContextServiceGrpc.getListTopologiesMethod = getListTopologiesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopologies"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListTopologies"))
+              .build();
+        }
+      }
+    }
+    return getListTopologiesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Topology> getGetTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetTopology",
+      requestType = context.ContextOuterClass.TopologyId.class,
+      responseType = context.ContextOuterClass.Topology.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Topology> getGetTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology> getGetTopologyMethod;
+    if ((getGetTopologyMethod = ContextServiceGrpc.getGetTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetTopologyMethod = ContextServiceGrpc.getGetTopologyMethod) == null) {
+          ContextServiceGrpc.getGetTopologyMethod = getGetTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Topology.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetTopology"))
+              .build();
+        }
+      }
+    }
+    return getGetTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Topology,
+      context.ContextOuterClass.TopologyId> getSetTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetTopology",
+      requestType = context.ContextOuterClass.Topology.class,
+      responseType = context.ContextOuterClass.TopologyId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Topology,
+      context.ContextOuterClass.TopologyId> getSetTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId> getSetTopologyMethod;
+    if ((getSetTopologyMethod = ContextServiceGrpc.getSetTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetTopologyMethod = ContextServiceGrpc.getSetTopologyMethod) == null) {
+          ContextServiceGrpc.getSetTopologyMethod = getSetTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Topology.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetTopology"))
+              .build();
+        }
+      }
+    }
+    return getSetTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Empty> getRemoveTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveTopology",
+      requestType = context.ContextOuterClass.TopologyId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Empty> getRemoveTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty> getRemoveTopologyMethod;
+    if ((getRemoveTopologyMethod = ContextServiceGrpc.getRemoveTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveTopologyMethod = ContextServiceGrpc.getRemoveTopologyMethod) == null) {
+          ContextServiceGrpc.getRemoveTopologyMethod = getRemoveTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveTopology"))
+              .build();
+        }
+      }
+    }
+    return getRemoveTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetTopologyEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.TopologyEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod;
+    if ((getGetTopologyEventsMethod = ContextServiceGrpc.getGetTopologyEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetTopologyEventsMethod = ContextServiceGrpc.getGetTopologyEventsMethod) == null) {
+          ContextServiceGrpc.getGetTopologyEventsMethod = getGetTopologyEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopologyEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetTopologyEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetTopologyEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListDeviceIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod;
+    if ((getListDeviceIdsMethod = ContextServiceGrpc.getListDeviceIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListDeviceIdsMethod = ContextServiceGrpc.getListDeviceIdsMethod) == null) {
+          ContextServiceGrpc.getListDeviceIdsMethod = getListDeviceIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListDeviceIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListDeviceIds"))
+              .build();
+        }
+      }
+    }
+    return getListDeviceIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceList> getListDevicesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListDevices",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceList> getListDevicesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList> getListDevicesMethod;
+    if ((getListDevicesMethod = ContextServiceGrpc.getListDevicesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListDevicesMethod = ContextServiceGrpc.getListDevicesMethod) == null) {
+          ContextServiceGrpc.getListDevicesMethod = getListDevicesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListDevices"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListDevices"))
+              .build();
+        }
+      }
+    }
+    return getListDevicesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Device> getGetDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetDevice",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.Device.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Device> getGetDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device> getGetDeviceMethod;
+    if ((getGetDeviceMethod = ContextServiceGrpc.getGetDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetDeviceMethod = ContextServiceGrpc.getGetDeviceMethod) == null) {
+          ContextServiceGrpc.getGetDeviceMethod = getGetDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetDevice"))
+              .build();
+        }
+      }
+    }
+    return getGetDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getSetDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetDevice",
+      requestType = context.ContextOuterClass.Device.class,
+      responseType = context.ContextOuterClass.DeviceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getSetDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId> getSetDeviceMethod;
+    if ((getSetDeviceMethod = ContextServiceGrpc.getSetDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetDeviceMethod = ContextServiceGrpc.getSetDeviceMethod) == null) {
+          ContextServiceGrpc.getSetDeviceMethod = getSetDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetDevice"))
+              .build();
+        }
+      }
+    }
+    return getSetDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getRemoveDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveDevice",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getRemoveDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty> getRemoveDeviceMethod;
+    if ((getRemoveDeviceMethod = ContextServiceGrpc.getRemoveDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveDeviceMethod = ContextServiceGrpc.getRemoveDeviceMethod) == null) {
+          ContextServiceGrpc.getRemoveDeviceMethod = getRemoveDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveDevice"))
+              .build();
+        }
+      }
+    }
+    return getRemoveDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetDeviceEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod;
+    if ((getGetDeviceEventsMethod = ContextServiceGrpc.getGetDeviceEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetDeviceEventsMethod = ContextServiceGrpc.getGetDeviceEventsMethod) == null) {
+          ContextServiceGrpc.getGetDeviceEventsMethod = getGetDeviceEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetDeviceEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetDeviceEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetDeviceEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkIdList> getListLinkIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListLinkIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkIdList> getListLinkIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList> getListLinkIdsMethod;
+    if ((getListLinkIdsMethod = ContextServiceGrpc.getListLinkIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListLinkIdsMethod = ContextServiceGrpc.getListLinkIdsMethod) == null) {
+          ContextServiceGrpc.getListLinkIdsMethod = getListLinkIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListLinkIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListLinkIds"))
+              .build();
+        }
+      }
+    }
+    return getListLinkIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkList> getListLinksMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListLinks",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkList> getListLinksMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList> getListLinksMethod;
+    if ((getListLinksMethod = ContextServiceGrpc.getListLinksMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListLinksMethod = ContextServiceGrpc.getListLinksMethod) == null) {
+          ContextServiceGrpc.getListLinksMethod = getListLinksMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListLinks"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListLinks"))
+              .build();
+        }
+      }
+    }
+    return getListLinksMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Link> getGetLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetLink",
+      requestType = context.ContextOuterClass.LinkId.class,
+      responseType = context.ContextOuterClass.Link.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Link> getGetLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link> getGetLinkMethod;
+    if ((getGetLinkMethod = ContextServiceGrpc.getGetLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetLinkMethod = ContextServiceGrpc.getGetLinkMethod) == null) {
+          ContextServiceGrpc.getGetLinkMethod = getGetLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Link.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetLink"))
+              .build();
+        }
+      }
+    }
+    return getGetLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Link,
+      context.ContextOuterClass.LinkId> getSetLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetLink",
+      requestType = context.ContextOuterClass.Link.class,
+      responseType = context.ContextOuterClass.LinkId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Link,
+      context.ContextOuterClass.LinkId> getSetLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId> getSetLinkMethod;
+    if ((getSetLinkMethod = ContextServiceGrpc.getSetLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetLinkMethod = ContextServiceGrpc.getSetLinkMethod) == null) {
+          ContextServiceGrpc.getSetLinkMethod = getSetLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Link.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetLink"))
+              .build();
+        }
+      }
+    }
+    return getSetLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Empty> getRemoveLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveLink",
+      requestType = context.ContextOuterClass.LinkId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Empty> getRemoveLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getRemoveLinkMethod;
+    if ((getRemoveLinkMethod = ContextServiceGrpc.getRemoveLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveLinkMethod = ContextServiceGrpc.getRemoveLinkMethod) == null) {
+          ContextServiceGrpc.getRemoveLinkMethod = getRemoveLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveLink"))
+              .build();
+        }
+      }
+    }
+    return getRemoveLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetLinkEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod;
+    if ((getGetLinkEventsMethod = ContextServiceGrpc.getGetLinkEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetLinkEventsMethod = ContextServiceGrpc.getGetLinkEventsMethod) == null) {
+          ContextServiceGrpc.getGetLinkEventsMethod = getGetLinkEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetLinkEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetLinkEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetLinkEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListServiceIds",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.ServiceIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod;
+    if ((getListServiceIdsMethod = ContextServiceGrpc.getListServiceIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListServiceIdsMethod = ContextServiceGrpc.getListServiceIdsMethod) == null) {
+          ContextServiceGrpc.getListServiceIdsMethod = getListServiceIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListServiceIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListServiceIds"))
+              .build();
+        }
+      }
+    }
+    return getListServiceIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceList> getListServicesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListServices",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.ServiceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceList> getListServicesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList> getListServicesMethod;
+    if ((getListServicesMethod = ContextServiceGrpc.getListServicesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListServicesMethod = ContextServiceGrpc.getListServicesMethod) == null) {
+          ContextServiceGrpc.getListServicesMethod = getListServicesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListServices"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListServices"))
+              .build();
+        }
+      }
+    }
+    return getListServicesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Service> getGetServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetService",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.Service.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Service> getGetServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service> getGetServiceMethod;
+    if ((getGetServiceMethod = ContextServiceGrpc.getGetServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetServiceMethod = ContextServiceGrpc.getGetServiceMethod) == null) {
+          ContextServiceGrpc.getGetServiceMethod = getGetServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Service.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetService"))
+              .build();
+        }
+      }
+    }
+    return getGetServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.ServiceId> getSetServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetService",
+      requestType = context.ContextOuterClass.Service.class,
+      responseType = context.ContextOuterClass.ServiceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.ServiceId> getSetServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId> getSetServiceMethod;
+    if ((getSetServiceMethod = ContextServiceGrpc.getSetServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetServiceMethod = ContextServiceGrpc.getSetServiceMethod) == null) {
+          ContextServiceGrpc.getSetServiceMethod = getSetServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Service.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetService"))
+              .build();
+        }
+      }
+    }
+    return getSetServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Empty> getRemoveServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveService",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Empty> getRemoveServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty> getRemoveServiceMethod;
+    if ((getRemoveServiceMethod = ContextServiceGrpc.getRemoveServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveServiceMethod = ContextServiceGrpc.getRemoveServiceMethod) == null) {
+          ContextServiceGrpc.getRemoveServiceMethod = getRemoveServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveService"))
+              .build();
+        }
+      }
+    }
+    return getRemoveServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetServiceEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ServiceEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod;
+    if ((getGetServiceEventsMethod = ContextServiceGrpc.getGetServiceEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetServiceEventsMethod = ContextServiceGrpc.getGetServiceEventsMethod) == null) {
+          ContextServiceGrpc.getGetServiceEventsMethod = getGetServiceEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetServiceEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetServiceEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetServiceEventsMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static ContextServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceStub>() {
+        @java.lang.Override
+        public ContextServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceStub(channel, callOptions);
+        }
+      };
+    return ContextServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static ContextServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceBlockingStub>() {
+        @java.lang.Override
+        public ContextServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return ContextServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static ContextServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceFutureStub>() {
+        @java.lang.Override
+        public ContextServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceFutureStub(channel, callOptions);
+        }
+      };
+    return ContextServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class ContextServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void listContextIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListContextIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listContexts(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListContextsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Context> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setContext(context.ContextOuterClass.Context request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getContextEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetContextEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologyIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListTopologyIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologies(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListTopologiesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setTopology(context.ContextOuterClass.Topology request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getTopologyEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listDeviceIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListDeviceIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listDevices(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListDevicesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Device> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getDeviceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listLinkIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListLinkIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listLinks(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListLinksMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Link> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setLink(context.ContextOuterClass.Link request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getLinkEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetLinkEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listServiceIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListServiceIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listServices(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListServicesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Service> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setService(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getServiceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceEventsMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getListContextIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextIdList>(
+                  this, METHODID_LIST_CONTEXT_IDS)))
+          .addMethod(
+            getListContextsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextList>(
+                  this, METHODID_LIST_CONTEXTS)))
+          .addMethod(
+            getGetContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.Context>(
+                  this, METHODID_GET_CONTEXT)))
+          .addMethod(
+            getSetContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Context,
+                context.ContextOuterClass.ContextId>(
+                  this, METHODID_SET_CONTEXT)))
+          .addMethod(
+            getRemoveContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_CONTEXT)))
+          .addMethod(
+            getGetContextEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextEvent>(
+                  this, METHODID_GET_CONTEXT_EVENTS)))
+          .addMethod(
+            getListTopologyIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.TopologyIdList>(
+                  this, METHODID_LIST_TOPOLOGY_IDS)))
+          .addMethod(
+            getListTopologiesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.TopologyList>(
+                  this, METHODID_LIST_TOPOLOGIES)))
+          .addMethod(
+            getGetTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.TopologyId,
+                context.ContextOuterClass.Topology>(
+                  this, METHODID_GET_TOPOLOGY)))
+          .addMethod(
+            getSetTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Topology,
+                context.ContextOuterClass.TopologyId>(
+                  this, METHODID_SET_TOPOLOGY)))
+          .addMethod(
+            getRemoveTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.TopologyId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_TOPOLOGY)))
+          .addMethod(
+            getGetTopologyEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.TopologyEvent>(
+                  this, METHODID_GET_TOPOLOGY_EVENTS)))
+          .addMethod(
+            getListDeviceIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceIdList>(
+                  this, METHODID_LIST_DEVICE_IDS)))
+          .addMethod(
+            getListDevicesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceList>(
+                  this, METHODID_LIST_DEVICES)))
+          .addMethod(
+            getGetDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.Device>(
+                  this, METHODID_GET_DEVICE)))
+          .addMethod(
+            getSetDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Device,
+                context.ContextOuterClass.DeviceId>(
+                  this, METHODID_SET_DEVICE)))
+          .addMethod(
+            getRemoveDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_DEVICE)))
+          .addMethod(
+            getGetDeviceEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceEvent>(
+                  this, METHODID_GET_DEVICE_EVENTS)))
+          .addMethod(
+            getListLinkIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkIdList>(
+                  this, METHODID_LIST_LINK_IDS)))
+          .addMethod(
+            getListLinksMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkList>(
+                  this, METHODID_LIST_LINKS)))
+          .addMethod(
+            getGetLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.LinkId,
+                context.ContextOuterClass.Link>(
+                  this, METHODID_GET_LINK)))
+          .addMethod(
+            getSetLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Link,
+                context.ContextOuterClass.LinkId>(
+                  this, METHODID_SET_LINK)))
+          .addMethod(
+            getRemoveLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.LinkId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_LINK)))
+          .addMethod(
+            getGetLinkEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkEvent>(
+                  this, METHODID_GET_LINK_EVENTS)))
+          .addMethod(
+            getListServiceIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.ServiceIdList>(
+                  this, METHODID_LIST_SERVICE_IDS)))
+          .addMethod(
+            getListServicesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.ServiceList>(
+                  this, METHODID_LIST_SERVICES)))
+          .addMethod(
+            getGetServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.Service>(
+                  this, METHODID_GET_SERVICE)))
+          .addMethod(
+            getSetServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Service,
+                context.ContextOuterClass.ServiceId>(
+                  this, METHODID_SET_SERVICE)))
+          .addMethod(
+            getRemoveServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_SERVICE)))
+          .addMethod(
+            getGetServiceEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ServiceEvent>(
+                  this, METHODID_GET_SERVICE_EVENTS)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceStub extends io.grpc.stub.AbstractAsyncStub<ContextServiceStub> {
+    private ContextServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void listContextIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListContextIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listContexts(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListContextsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Context> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setContext(context.ContextOuterClass.Context request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getContextEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetContextEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologyIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListTopologyIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologies(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListTopologiesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setTopology(context.ContextOuterClass.Topology request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getTopologyEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetTopologyEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listDeviceIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListDeviceIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listDevices(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListDevicesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Device> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getDeviceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetDeviceEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listLinkIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListLinkIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listLinks(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListLinksMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Link> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setLink(context.ContextOuterClass.Link request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getLinkEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetLinkEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listServiceIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListServiceIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listServices(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListServicesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Service> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setService(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getServiceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetServiceEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ContextServiceBlockingStub> {
+    private ContextServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextIdList listContextIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListContextIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextList listContexts(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListContextsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Context getContext(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextId setContext(context.ContextOuterClass.Context request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeContext(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.ContextEvent> getContextEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetContextEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyIdList listTopologyIds(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListTopologyIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyList listTopologies(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListTopologiesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Topology getTopology(context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyId setTopology(context.ContextOuterClass.Topology request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeTopology(context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.TopologyEvent> getTopologyEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetTopologyEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceIdList listDeviceIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListDeviceIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceList listDevices(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListDevicesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Device getDevice(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceId setDevice(context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeDevice(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.DeviceEvent> getDeviceEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetDeviceEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkIdList listLinkIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListLinkIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkList listLinks(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListLinksMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Link getLink(context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkId setLink(context.ContextOuterClass.Link request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeLink(context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.LinkEvent> getLinkEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetLinkEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceIdList listServiceIds(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListServiceIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceList listServices(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListServicesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Service getService(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceId setService(context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeService(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.ServiceEvent> getServiceEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetServiceEventsMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ContextServiceFutureStub> {
+    private ContextServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextIdList> listContextIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListContextIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextList> listContexts(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListContextsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Context> getContext(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextId> setContext(
+        context.ContextOuterClass.Context request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeContext(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyIdList> listTopologyIds(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListTopologyIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyList> listTopologies(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListTopologiesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Topology> getTopology(
+        context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyId> setTopology(
+        context.ContextOuterClass.Topology request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeTopology(
+        context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceIdList> listDeviceIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListDeviceIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceList> listDevices(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListDevicesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Device> getDevice(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceId> setDevice(
+        context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeDevice(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkIdList> listLinkIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListLinkIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkList> listLinks(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListLinksMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Link> getLink(
+        context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkId> setLink(
+        context.ContextOuterClass.Link request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeLink(
+        context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceIdList> listServiceIds(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListServiceIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceList> listServices(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListServicesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Service> getService(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetServiceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceId> setService(
+        context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetServiceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeService(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_LIST_CONTEXT_IDS = 0;
+  private static final int METHODID_LIST_CONTEXTS = 1;
+  private static final int METHODID_GET_CONTEXT = 2;
+  private static final int METHODID_SET_CONTEXT = 3;
+  private static final int METHODID_REMOVE_CONTEXT = 4;
+  private static final int METHODID_GET_CONTEXT_EVENTS = 5;
+  private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
+  private static final int METHODID_LIST_TOPOLOGIES = 7;
+  private static final int METHODID_GET_TOPOLOGY = 8;
+  private static final int METHODID_SET_TOPOLOGY = 9;
+  private static final int METHODID_REMOVE_TOPOLOGY = 10;
+  private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
+  private static final int METHODID_LIST_DEVICE_IDS = 12;
+  private static final int METHODID_LIST_DEVICES = 13;
+  private static final int METHODID_GET_DEVICE = 14;
+  private static final int METHODID_SET_DEVICE = 15;
+  private static final int METHODID_REMOVE_DEVICE = 16;
+  private static final int METHODID_GET_DEVICE_EVENTS = 17;
+  private static final int METHODID_LIST_LINK_IDS = 18;
+  private static final int METHODID_LIST_LINKS = 19;
+  private static final int METHODID_GET_LINK = 20;
+  private static final int METHODID_SET_LINK = 21;
+  private static final int METHODID_REMOVE_LINK = 22;
+  private static final int METHODID_GET_LINK_EVENTS = 23;
+  private static final int METHODID_LIST_SERVICE_IDS = 24;
+  private static final int METHODID_LIST_SERVICES = 25;
+  private static final int METHODID_GET_SERVICE = 26;
+  private static final int METHODID_SET_SERVICE = 27;
+  private static final int METHODID_REMOVE_SERVICE = 28;
+  private static final int METHODID_GET_SERVICE_EVENTS = 29;
+
+  private static final class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final ContextServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(ContextServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_LIST_CONTEXT_IDS:
+          serviceImpl.listContextIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList>) responseObserver);
+          break;
+        case METHODID_LIST_CONTEXTS:
+          serviceImpl.listContexts((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList>) responseObserver);
+          break;
+        case METHODID_GET_CONTEXT:
+          serviceImpl.getContext((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Context>) responseObserver);
+          break;
+        case METHODID_SET_CONTEXT:
+          serviceImpl.setContext((context.ContextOuterClass.Context) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId>) responseObserver);
+          break;
+        case METHODID_REMOVE_CONTEXT:
+          serviceImpl.removeContext((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_CONTEXT_EVENTS:
+          serviceImpl.getContextEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent>) responseObserver);
+          break;
+        case METHODID_LIST_TOPOLOGY_IDS:
+          serviceImpl.listTopologyIds((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList>) responseObserver);
+          break;
+        case METHODID_LIST_TOPOLOGIES:
+          serviceImpl.listTopologies((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList>) responseObserver);
+          break;
+        case METHODID_GET_TOPOLOGY:
+          serviceImpl.getTopology((context.ContextOuterClass.TopologyId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology>) responseObserver);
+          break;
+        case METHODID_SET_TOPOLOGY:
+          serviceImpl.setTopology((context.ContextOuterClass.Topology) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver);
+          break;
+        case METHODID_REMOVE_TOPOLOGY:
+          serviceImpl.removeTopology((context.ContextOuterClass.TopologyId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_TOPOLOGY_EVENTS:
+          serviceImpl.getTopologyEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent>) responseObserver);
+          break;
+        case METHODID_LIST_DEVICE_IDS:
+          serviceImpl.listDeviceIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList>) responseObserver);
+          break;
+        case METHODID_LIST_DEVICES:
+          serviceImpl.listDevices((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver);
+          break;
+        case METHODID_GET_DEVICE:
+          serviceImpl.getDevice((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Device>) responseObserver);
+          break;
+        case METHODID_SET_DEVICE:
+          serviceImpl.setDevice((context.ContextOuterClass.Device) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver);
+          break;
+        case METHODID_REMOVE_DEVICE:
+          serviceImpl.removeDevice((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_DEVICE_EVENTS:
+          serviceImpl.getDeviceEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent>) responseObserver);
+          break;
+        case METHODID_LIST_LINK_IDS:
+          serviceImpl.listLinkIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver);
+          break;
+        case METHODID_LIST_LINKS:
+          serviceImpl.listLinks((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList>) responseObserver);
+          break;
+        case METHODID_GET_LINK:
+          serviceImpl.getLink((context.ContextOuterClass.LinkId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Link>) responseObserver);
+          break;
+        case METHODID_SET_LINK:
+          serviceImpl.setLink((context.ContextOuterClass.Link) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId>) responseObserver);
+          break;
+        case METHODID_REMOVE_LINK:
+          serviceImpl.removeLink((context.ContextOuterClass.LinkId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_LINK_EVENTS:
+          serviceImpl.getLinkEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent>) responseObserver);
+          break;
+        case METHODID_LIST_SERVICE_IDS:
+          serviceImpl.listServiceIds((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList>) responseObserver);
+          break;
+        case METHODID_LIST_SERVICES:
+          serviceImpl.listServices((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver);
+          break;
+        case METHODID_GET_SERVICE:
+          serviceImpl.getService((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Service>) responseObserver);
+          break;
+        case METHODID_SET_SERVICE:
+          serviceImpl.setService((context.ContextOuterClass.Service) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId>) responseObserver);
+          break;
+        case METHODID_REMOVE_SERVICE:
+          serviceImpl.removeService((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_SERVICE_EVENTS:
+          serviceImpl.getServiceEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private static abstract class ContextServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    ContextServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return context.ContextOuterClass.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("ContextService");
+    }
+  }
+
+  private static final class ContextServiceFileDescriptorSupplier
+      extends ContextServiceBaseDescriptorSupplier {
+    ContextServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class ContextServiceMethodDescriptorSupplier
+      extends ContextServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    ContextServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (ContextServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new ContextServiceFileDescriptorSupplier())
+              .addMethod(getListContextIdsMethod())
+              .addMethod(getListContextsMethod())
+              .addMethod(getGetContextMethod())
+              .addMethod(getSetContextMethod())
+              .addMethod(getRemoveContextMethod())
+              .addMethod(getGetContextEventsMethod())
+              .addMethod(getListTopologyIdsMethod())
+              .addMethod(getListTopologiesMethod())
+              .addMethod(getGetTopologyMethod())
+              .addMethod(getSetTopologyMethod())
+              .addMethod(getRemoveTopologyMethod())
+              .addMethod(getGetTopologyEventsMethod())
+              .addMethod(getListDeviceIdsMethod())
+              .addMethod(getListDevicesMethod())
+              .addMethod(getGetDeviceMethod())
+              .addMethod(getSetDeviceMethod())
+              .addMethod(getRemoveDeviceMethod())
+              .addMethod(getGetDeviceEventsMethod())
+              .addMethod(getListLinkIdsMethod())
+              .addMethod(getListLinksMethod())
+              .addMethod(getGetLinkMethod())
+              .addMethod(getSetLinkMethod())
+              .addMethod(getRemoveLinkMethod())
+              .addMethod(getGetLinkEventsMethod())
+              .addMethod(getListServiceIdsMethod())
+              .addMethod(getListServicesMethod())
+              .addMethod(getGetServiceMethod())
+              .addMethod(getSetServiceMethod())
+              .addMethod(getRemoveServiceMethod())
+              .addMethod(getGetServiceEventsMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..7642fdfd5c6d203fe0e0b042ca06448477b05bad
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -0,0 +1,816 @@
+package context;
+
+import static context.ContextServiceGrpc.getServiceDescriptor;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyContextServiceGrpc() {}
+
+    public static MutinyContextServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyContextServiceStub(channel);
+    }
+
+    
+    public static final class MutinyContextServiceStub extends io.grpc.stub.AbstractStub<MutinyContextServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private ContextServiceGrpc.ContextServiceStub delegateStub;
+
+        private MutinyContextServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = ContextServiceGrpc.newStub(channel);
+        }
+
+        private MutinyContextServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = ContextServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyContextServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyContextServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listContextIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listContexts);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listTopologyIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listTopologies);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listDeviceIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listDevices);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listLinkIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listLinks);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listServiceIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listServices);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getService);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setService);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeService);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getContextEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getTopologyEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getDeviceEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getLinkEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getServiceEvents);
+        }
+
+    }
+
+    
+    public static abstract class ContextServiceImplBase implements io.grpc.BindableService {
+
+        private String compression;
+        /**
+        * Set whether the server will try to use a compressed response.
+        *
+        * @param compression the compression, e.g {@code gzip}
+        */
+        public ContextServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+                    .addMethod(
+                            context.ContextServiceGrpc.getListContextIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextIdList>(
+                                            this, METHODID_LIST_CONTEXT_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListContextsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextList>(
+                                            this, METHODID_LIST_CONTEXTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.Context>(
+                                            this, METHODID_GET_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Context,
+                                            context.ContextOuterClass.ContextId>(
+                                            this, METHODID_SET_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetContextEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextEvent>(
+                                            this, METHODID_GET_CONTEXT_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListTopologyIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.TopologyIdList>(
+                                            this, METHODID_LIST_TOPOLOGY_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListTopologiesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.TopologyList>(
+                                            this, METHODID_LIST_TOPOLOGIES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.TopologyId,
+                                            context.ContextOuterClass.Topology>(
+                                            this, METHODID_GET_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Topology,
+                                            context.ContextOuterClass.TopologyId>(
+                                            this, METHODID_SET_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.TopologyId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetTopologyEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.TopologyEvent>(
+                                            this, METHODID_GET_TOPOLOGY_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListDeviceIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceIdList>(
+                                            this, METHODID_LIST_DEVICE_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListDevicesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceList>(
+                                            this, METHODID_LIST_DEVICES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.Device>(
+                                            this, METHODID_GET_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Device,
+                                            context.ContextOuterClass.DeviceId>(
+                                            this, METHODID_SET_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetDeviceEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceEvent>(
+                                            this, METHODID_GET_DEVICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListLinkIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkIdList>(
+                                            this, METHODID_LIST_LINK_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListLinksMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkList>(
+                                            this, METHODID_LIST_LINKS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.LinkId,
+                                            context.ContextOuterClass.Link>(
+                                            this, METHODID_GET_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Link,
+                                            context.ContextOuterClass.LinkId>(
+                                            this, METHODID_SET_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.LinkId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetLinkEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkEvent>(
+                                            this, METHODID_GET_LINK_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListServiceIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.ServiceIdList>(
+                                            this, METHODID_LIST_SERVICE_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListServicesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.ServiceList>(
+                                            this, METHODID_LIST_SERVICES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.Service>(
+                                            this, METHODID_GET_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Service,
+                                            context.ContextOuterClass.ServiceId>(
+                                            this, METHODID_SET_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetServiceEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ServiceEvent>(
+                                            this, METHODID_GET_SERVICE_EVENTS, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_LIST_CONTEXT_IDS = 0;
+    private static final int METHODID_LIST_CONTEXTS = 1;
+    private static final int METHODID_GET_CONTEXT = 2;
+    private static final int METHODID_SET_CONTEXT = 3;
+    private static final int METHODID_REMOVE_CONTEXT = 4;
+    private static final int METHODID_GET_CONTEXT_EVENTS = 5;
+    private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
+    private static final int METHODID_LIST_TOPOLOGIES = 7;
+    private static final int METHODID_GET_TOPOLOGY = 8;
+    private static final int METHODID_SET_TOPOLOGY = 9;
+    private static final int METHODID_REMOVE_TOPOLOGY = 10;
+    private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
+    private static final int METHODID_LIST_DEVICE_IDS = 12;
+    private static final int METHODID_LIST_DEVICES = 13;
+    private static final int METHODID_GET_DEVICE = 14;
+    private static final int METHODID_SET_DEVICE = 15;
+    private static final int METHODID_REMOVE_DEVICE = 16;
+    private static final int METHODID_GET_DEVICE_EVENTS = 17;
+    private static final int METHODID_LIST_LINK_IDS = 18;
+    private static final int METHODID_LIST_LINKS = 19;
+    private static final int METHODID_GET_LINK = 20;
+    private static final int METHODID_SET_LINK = 21;
+    private static final int METHODID_REMOVE_LINK = 22;
+    private static final int METHODID_GET_LINK_EVENTS = 23;
+    private static final int METHODID_LIST_SERVICE_IDS = 24;
+    private static final int METHODID_LIST_SERVICES = 25;
+    private static final int METHODID_GET_SERVICE = 26;
+    private static final int METHODID_SET_SERVICE = 27;
+    private static final int METHODID_REMOVE_SERVICE = 28;
+    private static final int METHODID_GET_SERVICE_EVENTS = 29;
+
+    private static final class MethodHandlers<Req, Resp> implements
+            io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+        private final ContextServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(ContextServiceImplBase serviceImpl, int methodId, String compression) {
+            this.serviceImpl = serviceImpl;
+            this.methodId = methodId;
+            this.compression = compression;
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                case METHODID_LIST_CONTEXT_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listContextIds);
+                    break;
+                case METHODID_LIST_CONTEXTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList>) responseObserver,
+                            compression,
+                            serviceImpl::listContexts);
+                    break;
+                case METHODID_GET_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Context>) responseObserver,
+                            compression,
+                            serviceImpl::getContext);
+                    break;
+                case METHODID_SET_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Context) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId>) responseObserver,
+                            compression,
+                            serviceImpl::setContext);
+                    break;
+                case METHODID_REMOVE_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeContext);
+                    break;
+                case METHODID_GET_CONTEXT_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getContextEvents);
+                    break;
+                case METHODID_LIST_TOPOLOGY_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listTopologyIds);
+                    break;
+                case METHODID_LIST_TOPOLOGIES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList>) responseObserver,
+                            compression,
+                            serviceImpl::listTopologies);
+                    break;
+                case METHODID_GET_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.TopologyId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology>) responseObserver,
+                            compression,
+                            serviceImpl::getTopology);
+                    break;
+                case METHODID_SET_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Topology) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver,
+                            compression,
+                            serviceImpl::setTopology);
+                    break;
+                case METHODID_REMOVE_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.TopologyId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeTopology);
+                    break;
+                case METHODID_GET_TOPOLOGY_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getTopologyEvents);
+                    break;
+                case METHODID_LIST_DEVICE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listDeviceIds);
+                    break;
+                case METHODID_LIST_DEVICES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver,
+                            compression,
+                            serviceImpl::listDevices);
+                    break;
+                case METHODID_GET_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Device>) responseObserver,
+                            compression,
+                            serviceImpl::getDevice);
+                    break;
+                case METHODID_SET_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver,
+                            compression,
+                            serviceImpl::setDevice);
+                    break;
+                case METHODID_REMOVE_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeDevice);
+                    break;
+                case METHODID_GET_DEVICE_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getDeviceEvents);
+                    break;
+                case METHODID_LIST_LINK_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listLinkIds);
+                    break;
+                case METHODID_LIST_LINKS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList>) responseObserver,
+                            compression,
+                            serviceImpl::listLinks);
+                    break;
+                case METHODID_GET_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Link>) responseObserver,
+                            compression,
+                            serviceImpl::getLink);
+                    break;
+                case METHODID_SET_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Link) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId>) responseObserver,
+                            compression,
+                            serviceImpl::setLink);
+                    break;
+                case METHODID_REMOVE_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeLink);
+                    break;
+                case METHODID_GET_LINK_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getLinkEvents);
+                    break;
+                case METHODID_LIST_SERVICE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listServiceIds);
+                    break;
+                case METHODID_LIST_SERVICES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver,
+                            compression,
+                            serviceImpl::listServices);
+                    break;
+                case METHODID_GET_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Service>) responseObserver,
+                            compression,
+                            serviceImpl::getService);
+                    break;
+                case METHODID_SET_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Service) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId>) responseObserver,
+                            compression,
+                            serviceImpl::setService);
+                    break;
+                case METHODID_REMOVE_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeService);
+                    break;
+                case METHODID_GET_SERVICE_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getServiceEvents);
+                    break;
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public io.grpc.stub.StreamObserver<Req> invoke(io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/MutinyPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/policy/MutinyPolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..bad12a99d34a314f9c097ee7fda4ba7219dbb984
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/MutinyPolicyServiceGrpc.java
@@ -0,0 +1,240 @@
+package policy;
+
+import static policy.PolicyServiceGrpc.getServiceDescriptor;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: policy.proto")
+public final class MutinyPolicyServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyPolicyServiceGrpc() {}
+
+    public static MutinyPolicyServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyPolicyServiceStub(channel);
+    }
+
+    
+    public static final class MutinyPolicyServiceStub extends io.grpc.stub.AbstractStub<MutinyPolicyServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private PolicyServiceGrpc.PolicyServiceStub delegateStub;
+
+        private MutinyPolicyServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = PolicyServiceGrpc.newStub(channel);
+        }
+
+        private MutinyPolicyServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = PolicyServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyPolicyServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyPolicyServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyAdd(policy.Policy.PolicyRule request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::policyAdd);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyUpdate(policy.Policy.PolicyRule request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::policyUpdate);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyDelete(policy.Policy.PolicyRule request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::policyDelete);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRule> getPolicy(policy.Policy.PolicyRuleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicy);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByDeviceId(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicyByDeviceId);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByServiceId(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicyByServiceId);
+        }
+
+    }
+
+    
+    public static abstract class PolicyServiceImplBase implements io.grpc.BindableService {
+
+        private String compression;
+        /**
+        * Set whether the server will try to use a compressed response.
+        *
+        * @param compression the compression, e.g {@code gzip}
+        */
+        public PolicyServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyAdd(policy.Policy.PolicyRule request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyUpdate(policy.Policy.PolicyRule request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyDelete(policy.Policy.PolicyRule request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRule> getPolicy(policy.Policy.PolicyRuleId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByDeviceId(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByServiceId(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getPolicyAddMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRule,
+                                            policy.Policy.PolicyRuleState>(
+                                            this, METHODID_POLICY_ADD, compression)))
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getPolicyUpdateMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRule,
+                                            policy.Policy.PolicyRuleState>(
+                                            this, METHODID_POLICY_UPDATE, compression)))
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getPolicyDeleteMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRule,
+                                            policy.Policy.PolicyRuleState>(
+                                            this, METHODID_POLICY_DELETE, compression)))
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getGetPolicyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleId,
+                                            policy.Policy.PolicyRule>(
+                                            this, METHODID_GET_POLICY, compression)))
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getGetPolicyByDeviceIdMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            policy.Policy.PolicyRuleList>(
+                                            this, METHODID_GET_POLICY_BY_DEVICE_ID, compression)))
+                    .addMethod(
+                            policy.PolicyServiceGrpc.getGetPolicyByServiceIdMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            policy.Policy.PolicyRuleList>(
+                                            this, METHODID_GET_POLICY_BY_SERVICE_ID, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_POLICY_ADD = 0;
+    private static final int METHODID_POLICY_UPDATE = 1;
+    private static final int METHODID_POLICY_DELETE = 2;
+    private static final int METHODID_GET_POLICY = 3;
+    private static final int METHODID_GET_POLICY_BY_DEVICE_ID = 4;
+    private static final int METHODID_GET_POLICY_BY_SERVICE_ID = 5;
+
+    private static final class MethodHandlers<Req, Resp> implements
+            io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+        private final PolicyServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(PolicyServiceImplBase serviceImpl, int methodId, String compression) {
+            this.serviceImpl = serviceImpl;
+            this.methodId = methodId;
+            this.compression = compression;
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                case METHODID_POLICY_ADD:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRule) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver,
+                            compression,
+                            serviceImpl::policyAdd);
+                    break;
+                case METHODID_POLICY_UPDATE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRule) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver,
+                            compression,
+                            serviceImpl::policyUpdate);
+                    break;
+                case METHODID_POLICY_DELETE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRule) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver,
+                            compression,
+                            serviceImpl::policyDelete);
+                    break;
+                case METHODID_GET_POLICY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRule>) responseObserver,
+                            compression,
+                            serviceImpl::getPolicy);
+                    break;
+                case METHODID_GET_POLICY_BY_DEVICE_ID:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver,
+                            compression,
+                            serviceImpl::getPolicyByDeviceId);
+                    break;
+                case METHODID_GET_POLICY_BY_SERVICE_ID:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver,
+                            compression,
+                            serviceImpl::getPolicyByServiceId);
+                    break;
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public io.grpc.stub.StreamObserver<Req> invoke(io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
new file mode 100644
index 0000000000000000000000000000000000000000..8386be80944cbbbe49d8485a1abff74fdc112d30
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -0,0 +1,8984 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: policy.proto
+
+package policy;
+
+public final class Policy {
+  private Policy() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code policy.RuleState}
+   */
+  public enum RuleState
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * Rule is currently inactive
+     * </pre>
+     *
+     * <code>POLICY_INACTIVE = 0;</code>
+     */
+    POLICY_INACTIVE(0),
+    /**
+     * <pre>
+     * Rule installation planned
+     * </pre>
+     *
+     * <code>POLICY_PLANNED = 1;</code>
+     */
+    POLICY_PLANNED(1),
+    /**
+     * <pre>
+     * Rule is currently active
+     * </pre>
+     *
+     * <code>POLICY_ACTIVE = 2;</code>
+     */
+    POLICY_ACTIVE(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * Rule is currently inactive
+     * </pre>
+     *
+     * <code>POLICY_INACTIVE = 0;</code>
+     */
+    public static final int POLICY_INACTIVE_VALUE = 0;
+    /**
+     * <pre>
+     * Rule installation planned
+     * </pre>
+     *
+     * <code>POLICY_PLANNED = 1;</code>
+     */
+    public static final int POLICY_PLANNED_VALUE = 1;
+    /**
+     * <pre>
+     * Rule is currently active
+     * </pre>
+     *
+     * <code>POLICY_ACTIVE = 2;</code>
+     */
+    public static final int POLICY_ACTIVE_VALUE = 2;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static RuleState valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static RuleState forNumber(int value) {
+      switch (value) {
+        case 0: return POLICY_INACTIVE;
+        case 1: return POLICY_PLANNED;
+        case 2: return POLICY_ACTIVE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<RuleState>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        RuleState> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<RuleState>() {
+            public RuleState findValueByNumber(int number) {
+              return RuleState.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return policy.Policy.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final RuleState[] VALUES = values();
+
+    public static RuleState valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private RuleState(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.RuleState)
+  }
+
+  /**
+   * Protobuf enum {@code policy.PolicyRuleType}
+   */
+  public enum PolicyRuleType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * Device-level
+     * </pre>
+     *
+     * <code>POLICYTYPE_DEVICE = 0;</code>
+     */
+    POLICYTYPE_DEVICE(0),
+    /**
+     * <pre>
+     * Network-wide
+     * </pre>
+     *
+     * <code>POLICYTYPE_NETWORK = 1;</code>
+     */
+    POLICYTYPE_NETWORK(1),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * Device-level
+     * </pre>
+     *
+     * <code>POLICYTYPE_DEVICE = 0;</code>
+     */
+    public static final int POLICYTYPE_DEVICE_VALUE = 0;
+    /**
+     * <pre>
+     * Network-wide
+     * </pre>
+     *
+     * <code>POLICYTYPE_NETWORK = 1;</code>
+     */
+    public static final int POLICYTYPE_NETWORK_VALUE = 1;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static PolicyRuleType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static PolicyRuleType forNumber(int value) {
+      switch (value) {
+        case 0: return POLICYTYPE_DEVICE;
+        case 1: return POLICYTYPE_NETWORK;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<PolicyRuleType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        PolicyRuleType> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<PolicyRuleType>() {
+            public PolicyRuleType findValueByNumber(int number) {
+              return PolicyRuleType.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return policy.Policy.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final PolicyRuleType[] VALUES = values();
+
+    public static PolicyRuleType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private PolicyRuleType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleType)
+  }
+
+  public interface PolicyRuleIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     * @return Whether the uuid field is set.
+     */
+    boolean hasUuid();
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     * @return The uuid.
+     */
+    context.ContextOuterClass.Uuid getUuid();
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getUuidOrBuilder();
+  }
+  /**
+   * Protobuf type {@code policy.PolicyRuleId}
+   */
+  public static final class PolicyRuleId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleId)
+      PolicyRuleIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleId.newBuilder() to construct.
+    private PolicyRuleId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (uuid_ != null) {
+                subBuilder = uuid_.toBuilder();
+              }
+              uuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(uuid_);
+                uuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleId.class, policy.Policy.PolicyRuleId.Builder.class);
+    }
+
+    public static final int UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid uuid_;
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     * @return Whether the uuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasUuid() {
+      return uuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     * @return The uuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getUuid() {
+      return uuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : uuid_;
+    }
+    /**
+     * <code>.context.Uuid uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getUuidOrBuilder() {
+      return getUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (uuid_ != null) {
+        output.writeMessage(1, getUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (uuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleId)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleId other = (policy.Policy.PolicyRuleId) obj;
+
+      if (hasUuid() != other.hasUuid()) return false;
+      if (hasUuid()) {
+        if (!getUuid()
+            .equals(other.getUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasUuid()) {
+        hash = (37 * hash) + UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code policy.PolicyRuleId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleId)
+        policy.Policy.PolicyRuleIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleId.class, policy.Policy.PolicyRuleId.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (uuidBuilder_ == null) {
+          uuid_ = null;
+        } else {
+          uuid_ = null;
+          uuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleId_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleId getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleId build() {
+        policy.Policy.PolicyRuleId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleId buildPartial() {
+        policy.Policy.PolicyRuleId result = new policy.Policy.PolicyRuleId(this);
+        if (uuidBuilder_ == null) {
+          result.uuid_ = uuid_;
+        } else {
+          result.uuid_ = uuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleId) {
+          return mergeFrom((policy.Policy.PolicyRuleId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleId other) {
+        if (other == policy.Policy.PolicyRuleId.getDefaultInstance()) return this;
+        if (other.hasUuid()) {
+          mergeUuid(other.getUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid uuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> uuidBuilder_;
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       * @return Whether the uuid field is set.
+       */
+      public boolean hasUuid() {
+        return uuidBuilder_ != null || uuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       * @return The uuid.
+       */
+      public context.ContextOuterClass.Uuid getUuid() {
+        if (uuidBuilder_ == null) {
+          return uuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : uuid_;
+        } else {
+          return uuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public Builder setUuid(context.ContextOuterClass.Uuid value) {
+        if (uuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          uuid_ = value;
+          onChanged();
+        } else {
+          uuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public Builder setUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (uuidBuilder_ == null) {
+          uuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          uuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public Builder mergeUuid(context.ContextOuterClass.Uuid value) {
+        if (uuidBuilder_ == null) {
+          if (uuid_ != null) {
+            uuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(uuid_).mergeFrom(value).buildPartial();
+          } else {
+            uuid_ = value;
+          }
+          onChanged();
+        } else {
+          uuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public Builder clearUuid() {
+        if (uuidBuilder_ == null) {
+          uuid_ = null;
+          onChanged();
+        } else {
+          uuid_ = null;
+          uuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getUuidBuilder() {
+        
+        onChanged();
+        return getUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getUuidOrBuilder() {
+        if (uuidBuilder_ != null) {
+          return uuidBuilder_.getMessageOrBuilder();
+        } else {
+          return uuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : uuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getUuidFieldBuilder() {
+        if (uuidBuilder_ == null) {
+          uuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getUuid(),
+                  getParentForChildren(),
+                  isClean());
+          uuid_ = null;
+        }
+        return uuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleId)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleId)
+    private static final policy.Policy.PolicyRuleId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleId();
+    }
+
+    public static policy.Policy.PolicyRuleId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleId>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleId>() {
+      @java.lang.Override
+      public PolicyRuleId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     * @return Whether the policyRuleId field is set.
+     */
+    boolean hasPolicyRuleId();
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     * @return The policyRuleId.
+     */
+    context.ContextOuterClass.Uuid getPolicyRuleId();
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getPolicyRuleIdOrBuilder();
+
+    /**
+     * <code>.policy.RuleState policyRuleState = 2;</code>
+     * @return The enum numeric value on the wire for policyRuleState.
+     */
+    int getPolicyRuleStateValue();
+    /**
+     * <code>.policy.RuleState policyRuleState = 2;</code>
+     * @return The policyRuleState.
+     */
+    policy.Policy.RuleState getPolicyRuleState();
+  }
+  /**
+   * Protobuf type {@code policy.PolicyRuleState}
+   */
+  public static final class PolicyRuleState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleState)
+      PolicyRuleStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleState.newBuilder() to construct.
+    private PolicyRuleState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleState() {
+      policyRuleState_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (policyRuleId_ != null) {
+                subBuilder = policyRuleId_.toBuilder();
+              }
+              policyRuleId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(policyRuleId_);
+                policyRuleId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              policyRuleState_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleState.class, policy.Policy.PolicyRuleState.Builder.class);
+    }
+
+    public static final int POLICYRULEID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid policyRuleId_;
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     * @return Whether the policyRuleId field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolicyRuleId() {
+      return policyRuleId_ != null;
+    }
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     * @return The policyRuleId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getPolicyRuleId() {
+      return policyRuleId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : policyRuleId_;
+    }
+    /**
+     * <code>.context.Uuid policyRuleId = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getPolicyRuleIdOrBuilder() {
+      return getPolicyRuleId();
+    }
+
+    public static final int POLICYRULESTATE_FIELD_NUMBER = 2;
+    private int policyRuleState_;
+    /**
+     * <code>.policy.RuleState policyRuleState = 2;</code>
+     * @return The enum numeric value on the wire for policyRuleState.
+     */
+    @java.lang.Override public int getPolicyRuleStateValue() {
+      return policyRuleState_;
+    }
+    /**
+     * <code>.policy.RuleState policyRuleState = 2;</code>
+     * @return The policyRuleState.
+     */
+    @java.lang.Override public policy.Policy.RuleState getPolicyRuleState() {
+      @SuppressWarnings("deprecation")
+      policy.Policy.RuleState result = policy.Policy.RuleState.valueOf(policyRuleState_);
+      return result == null ? policy.Policy.RuleState.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (policyRuleId_ != null) {
+        output.writeMessage(1, getPolicyRuleId());
+      }
+      if (policyRuleState_ != policy.Policy.RuleState.POLICY_INACTIVE.getNumber()) {
+        output.writeEnum(2, policyRuleState_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (policyRuleId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getPolicyRuleId());
+      }
+      if (policyRuleState_ != policy.Policy.RuleState.POLICY_INACTIVE.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, policyRuleState_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleState)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleState other = (policy.Policy.PolicyRuleState) obj;
+
+      if (hasPolicyRuleId() != other.hasPolicyRuleId()) return false;
+      if (hasPolicyRuleId()) {
+        if (!getPolicyRuleId()
+            .equals(other.getPolicyRuleId())) return false;
+      }
+      if (policyRuleState_ != other.policyRuleState_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasPolicyRuleId()) {
+        hash = (37 * hash) + POLICYRULEID_FIELD_NUMBER;
+        hash = (53 * hash) + getPolicyRuleId().hashCode();
+      }
+      hash = (37 * hash) + POLICYRULESTATE_FIELD_NUMBER;
+      hash = (53 * hash) + policyRuleState_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code policy.PolicyRuleState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleState)
+        policy.Policy.PolicyRuleStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleState.class, policy.Policy.PolicyRuleState.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = null;
+        } else {
+          policyRuleId_ = null;
+          policyRuleIdBuilder_ = null;
+        }
+        policyRuleState_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleState_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleState getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleState build() {
+        policy.Policy.PolicyRuleState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleState buildPartial() {
+        policy.Policy.PolicyRuleState result = new policy.Policy.PolicyRuleState(this);
+        if (policyRuleIdBuilder_ == null) {
+          result.policyRuleId_ = policyRuleId_;
+        } else {
+          result.policyRuleId_ = policyRuleIdBuilder_.build();
+        }
+        result.policyRuleState_ = policyRuleState_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleState) {
+          return mergeFrom((policy.Policy.PolicyRuleState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleState other) {
+        if (other == policy.Policy.PolicyRuleState.getDefaultInstance()) return this;
+        if (other.hasPolicyRuleId()) {
+          mergePolicyRuleId(other.getPolicyRuleId());
+        }
+        if (other.policyRuleState_ != 0) {
+          setPolicyRuleStateValue(other.getPolicyRuleStateValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid policyRuleId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> policyRuleIdBuilder_;
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       * @return Whether the policyRuleId field is set.
+       */
+      public boolean hasPolicyRuleId() {
+        return policyRuleIdBuilder_ != null || policyRuleId_ != null;
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       * @return The policyRuleId.
+       */
+      public context.ContextOuterClass.Uuid getPolicyRuleId() {
+        if (policyRuleIdBuilder_ == null) {
+          return policyRuleId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : policyRuleId_;
+        } else {
+          return policyRuleIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public Builder setPolicyRuleId(context.ContextOuterClass.Uuid value) {
+        if (policyRuleIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          policyRuleId_ = value;
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public Builder setPolicyRuleId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = builderForValue.build();
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public Builder mergePolicyRuleId(context.ContextOuterClass.Uuid value) {
+        if (policyRuleIdBuilder_ == null) {
+          if (policyRuleId_ != null) {
+            policyRuleId_ =
+              context.ContextOuterClass.Uuid.newBuilder(policyRuleId_).mergeFrom(value).buildPartial();
+          } else {
+            policyRuleId_ = value;
+          }
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public Builder clearPolicyRuleId() {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = null;
+          onChanged();
+        } else {
+          policyRuleId_ = null;
+          policyRuleIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getPolicyRuleIdBuilder() {
+        
+        onChanged();
+        return getPolicyRuleIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getPolicyRuleIdOrBuilder() {
+        if (policyRuleIdBuilder_ != null) {
+          return policyRuleIdBuilder_.getMessageOrBuilder();
+        } else {
+          return policyRuleId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : policyRuleId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid policyRuleId = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getPolicyRuleIdFieldBuilder() {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getPolicyRuleId(),
+                  getParentForChildren(),
+                  isClean());
+          policyRuleId_ = null;
+        }
+        return policyRuleIdBuilder_;
+      }
+
+      private int policyRuleState_ = 0;
+      /**
+       * <code>.policy.RuleState policyRuleState = 2;</code>
+       * @return The enum numeric value on the wire for policyRuleState.
+       */
+      @java.lang.Override public int getPolicyRuleStateValue() {
+        return policyRuleState_;
+      }
+      /**
+       * <code>.policy.RuleState policyRuleState = 2;</code>
+       * @param value The enum numeric value on the wire for policyRuleState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleStateValue(int value) {
+        
+        policyRuleState_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.RuleState policyRuleState = 2;</code>
+       * @return The policyRuleState.
+       */
+      @java.lang.Override
+      public policy.Policy.RuleState getPolicyRuleState() {
+        @SuppressWarnings("deprecation")
+        policy.Policy.RuleState result = policy.Policy.RuleState.valueOf(policyRuleState_);
+        return result == null ? policy.Policy.RuleState.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.policy.RuleState policyRuleState = 2;</code>
+       * @param value The policyRuleState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleState(policy.Policy.RuleState value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        policyRuleState_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.RuleState policyRuleState = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRuleState() {
+        
+        policyRuleState_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleState)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleState)
+    private static final policy.Policy.PolicyRuleState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleState();
+    }
+
+    public static policy.Policy.PolicyRuleState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleState>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleState>() {
+      @java.lang.Override
+      public PolicyRuleState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleVariableOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleVariable)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string policyRuleVariable = 1;</code>
+     * @return The policyRuleVariable.
+     */
+    java.lang.String getPolicyRuleVariable();
+    /**
+     * <code>string policyRuleVariable = 1;</code>
+     * @return The bytes for policyRuleVariable.
+     */
+    com.google.protobuf.ByteString
+        getPolicyRuleVariableBytes();
+  }
+  /**
+   * Protobuf type {@code policy.PolicyRuleVariable}
+   */
+  public static final class PolicyRuleVariable extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleVariable)
+      PolicyRuleVariableOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleVariable.newBuilder() to construct.
+    private PolicyRuleVariable(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleVariable() {
+      policyRuleVariable_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleVariable();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleVariable(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              policyRuleVariable_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
+    }
+
+    public static final int POLICYRULEVARIABLE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object policyRuleVariable_;
+    /**
+     * <code>string policyRuleVariable = 1;</code>
+     * @return The policyRuleVariable.
+     */
+    @java.lang.Override
+    public java.lang.String getPolicyRuleVariable() {
+      java.lang.Object ref = policyRuleVariable_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        policyRuleVariable_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string policyRuleVariable = 1;</code>
+     * @return The bytes for policyRuleVariable.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getPolicyRuleVariableBytes() {
+      java.lang.Object ref = policyRuleVariable_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        policyRuleVariable_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getPolicyRuleVariableBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleVariable_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getPolicyRuleVariableBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleVariable_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleVariable)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleVariable other = (policy.Policy.PolicyRuleVariable) obj;
+
+      if (!getPolicyRuleVariable()
+          .equals(other.getPolicyRuleVariable())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + POLICYRULEVARIABLE_FIELD_NUMBER;
+      hash = (53 * hash) + getPolicyRuleVariable().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleVariable parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleVariable parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleVariable parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleVariable prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code policy.PolicyRuleVariable}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleVariable)
+        policy.Policy.PolicyRuleVariableOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleVariable.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        policyRuleVariable_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleVariable.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleVariable build() {
+        policy.Policy.PolicyRuleVariable result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleVariable buildPartial() {
+        policy.Policy.PolicyRuleVariable result = new policy.Policy.PolicyRuleVariable(this);
+        result.policyRuleVariable_ = policyRuleVariable_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleVariable) {
+          return mergeFrom((policy.Policy.PolicyRuleVariable)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleVariable other) {
+        if (other == policy.Policy.PolicyRuleVariable.getDefaultInstance()) return this;
+        if (!other.getPolicyRuleVariable().isEmpty()) {
+          policyRuleVariable_ = other.policyRuleVariable_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleVariable parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleVariable) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object policyRuleVariable_ = "";
+      /**
+       * <code>string policyRuleVariable = 1;</code>
+       * @return The policyRuleVariable.
+       */
+      public java.lang.String getPolicyRuleVariable() {
+        java.lang.Object ref = policyRuleVariable_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          policyRuleVariable_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string policyRuleVariable = 1;</code>
+       * @return The bytes for policyRuleVariable.
+       */
+      public com.google.protobuf.ByteString
+          getPolicyRuleVariableBytes() {
+        java.lang.Object ref = policyRuleVariable_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          policyRuleVariable_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string policyRuleVariable = 1;</code>
+       * @param value The policyRuleVariable to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleVariable(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        policyRuleVariable_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string policyRuleVariable = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRuleVariable() {
+        
+        policyRuleVariable_ = getDefaultInstance().getPolicyRuleVariable();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string policyRuleVariable = 1;</code>
+       * @param value The bytes for policyRuleVariable to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleVariableBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        policyRuleVariable_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleVariable)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleVariable)
+    private static final policy.Policy.PolicyRuleVariable DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleVariable();
+    }
+
+    public static policy.Policy.PolicyRuleVariable getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleVariable>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleVariable>() {
+      @java.lang.Override
+      public PolicyRuleVariable parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleVariable(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleVariable> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleVariable> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleValue)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string policyRuleValue = 1;</code>
+     * @return The policyRuleValue.
+     */
+    java.lang.String getPolicyRuleValue();
+    /**
+     * <code>string policyRuleValue = 1;</code>
+     * @return The bytes for policyRuleValue.
+     */
+    com.google.protobuf.ByteString
+        getPolicyRuleValueBytes();
+  }
+  /**
+   * Protobuf type {@code policy.PolicyRuleValue}
+   */
+  public static final class PolicyRuleValue extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleValue)
+      PolicyRuleValueOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleValue.newBuilder() to construct.
+    private PolicyRuleValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleValue() {
+      policyRuleValue_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleValue();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleValue(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              policyRuleValue_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
+    }
+
+    public static final int POLICYRULEVALUE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object policyRuleValue_;
+    /**
+     * <code>string policyRuleValue = 1;</code>
+     * @return The policyRuleValue.
+     */
+    @java.lang.Override
+    public java.lang.String getPolicyRuleValue() {
+      java.lang.Object ref = policyRuleValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        policyRuleValue_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string policyRuleValue = 1;</code>
+     * @return The bytes for policyRuleValue.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getPolicyRuleValueBytes() {
+      java.lang.Object ref = policyRuleValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        policyRuleValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getPolicyRuleValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleValue_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getPolicyRuleValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleValue_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleValue)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleValue other = (policy.Policy.PolicyRuleValue) obj;
+
+      if (!getPolicyRuleValue()
+          .equals(other.getPolicyRuleValue())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + POLICYRULEVALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getPolicyRuleValue().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleValue parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleValue parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleValue parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleValue prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code policy.PolicyRuleValue}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleValue)
+        policy.Policy.PolicyRuleValueOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleValue.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        policyRuleValue_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleValue.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleValue build() {
+        policy.Policy.PolicyRuleValue result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleValue buildPartial() {
+        policy.Policy.PolicyRuleValue result = new policy.Policy.PolicyRuleValue(this);
+        result.policyRuleValue_ = policyRuleValue_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleValue) {
+          return mergeFrom((policy.Policy.PolicyRuleValue)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleValue other) {
+        if (other == policy.Policy.PolicyRuleValue.getDefaultInstance()) return this;
+        if (!other.getPolicyRuleValue().isEmpty()) {
+          policyRuleValue_ = other.policyRuleValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleValue parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleValue) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object policyRuleValue_ = "";
+      /**
+       * <code>string policyRuleValue = 1;</code>
+       * @return The policyRuleValue.
+       */
+      public java.lang.String getPolicyRuleValue() {
+        java.lang.Object ref = policyRuleValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          policyRuleValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string policyRuleValue = 1;</code>
+       * @return The bytes for policyRuleValue.
+       */
+      public com.google.protobuf.ByteString
+          getPolicyRuleValueBytes() {
+        java.lang.Object ref = policyRuleValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          policyRuleValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string policyRuleValue = 1;</code>
+       * @param value The policyRuleValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        policyRuleValue_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string policyRuleValue = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRuleValue() {
+        
+        policyRuleValue_ = getDefaultInstance().getPolicyRuleValue();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string policyRuleValue = 1;</code>
+       * @param value The bytes for policyRuleValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        policyRuleValue_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleValue)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleValue)
+    private static final policy.Policy.PolicyRuleValue DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleValue();
+    }
+
+    public static policy.Policy.PolicyRuleValue getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleValue>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleValue>() {
+      @java.lang.Override
+      public PolicyRuleValue parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleValue(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleValue> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleValue> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+  }
+  /**
+   * <pre>
+   * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+   *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+   * Event
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleEvent}
+   */
+  public static final class PolicyRuleEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleEvent)
+      PolicyRuleEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleEvent.newBuilder() to construct.
+    private PolicyRuleEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleEvent)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleEvent other = (policy.Policy.PolicyRuleEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+     *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+     * Event
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleEvent)
+        policy.Policy.PolicyRuleEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleEvent build() {
+        policy.Policy.PolicyRuleEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleEvent buildPartial() {
+        policy.Policy.PolicyRuleEvent result = new policy.Policy.PolicyRuleEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleEvent) {
+          return mergeFrom((policy.Policy.PolicyRuleEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleEvent other) {
+        if (other == policy.Policy.PolicyRuleEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleEvent)
+    private static final policy.Policy.PolicyRuleEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleEvent();
+    }
+
+    public static policy.Policy.PolicyRuleEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleEvent>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleEvent>() {
+      @java.lang.Override
+      public PolicyRuleEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleConditionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleCondition)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     * @return Whether the polRuleConditionVar field is set.
+     */
+    boolean hasPolRuleConditionVar();
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     * @return The polRuleConditionVar.
+     */
+    policy.Policy.PolicyRuleVariable getPolRuleConditionVar();
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     */
+    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder();
+
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     * @return Whether the polRuleConditionVal field is set.
+     */
+    boolean hasPolRuleConditionVal();
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     * @return The polRuleConditionVal.
+     */
+    policy.Policy.PolicyRuleValue getPolRuleConditionVal();
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     */
+    policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder();
+  }
+  /**
+   * <pre>
+   * Condition
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleCondition}
+   */
+  public static final class PolicyRuleCondition extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleCondition)
+      PolicyRuleConditionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleCondition.newBuilder() to construct.
+    private PolicyRuleCondition(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleCondition() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleCondition();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleCondition(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
+              if (polRuleConditionVar_ != null) {
+                subBuilder = polRuleConditionVar_.toBuilder();
+              }
+              polRuleConditionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(polRuleConditionVar_);
+                polRuleConditionVar_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
+              if (polRuleConditionVal_ != null) {
+                subBuilder = polRuleConditionVal_.toBuilder();
+              }
+              polRuleConditionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(polRuleConditionVal_);
+                polRuleConditionVal_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
+    }
+
+    public static final int POLRULECONDITIONVAR_FIELD_NUMBER = 1;
+    private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     * @return Whether the polRuleConditionVar field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolRuleConditionVar() {
+      return polRuleConditionVar_ != null;
+    }
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     * @return The polRuleConditionVar.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
+      return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
+    }
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
+      return getPolRuleConditionVar();
+    }
+
+    public static final int POLRULECONDITIONVAL_FIELD_NUMBER = 2;
+    private policy.Policy.PolicyRuleValue polRuleConditionVal_;
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     * @return Whether the polRuleConditionVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolRuleConditionVal() {
+      return polRuleConditionVal_ != null;
+    }
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     * @return The polRuleConditionVal.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
+      return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
+    }
+    /**
+     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
+      return getPolRuleConditionVal();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (polRuleConditionVar_ != null) {
+        output.writeMessage(1, getPolRuleConditionVar());
+      }
+      if (polRuleConditionVal_ != null) {
+        output.writeMessage(2, getPolRuleConditionVal());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (polRuleConditionVar_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getPolRuleConditionVar());
+      }
+      if (polRuleConditionVal_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getPolRuleConditionVal());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleCondition)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleCondition other = (policy.Policy.PolicyRuleCondition) obj;
+
+      if (hasPolRuleConditionVar() != other.hasPolRuleConditionVar()) return false;
+      if (hasPolRuleConditionVar()) {
+        if (!getPolRuleConditionVar()
+            .equals(other.getPolRuleConditionVar())) return false;
+      }
+      if (hasPolRuleConditionVal() != other.hasPolRuleConditionVal()) return false;
+      if (hasPolRuleConditionVal()) {
+        if (!getPolRuleConditionVal()
+            .equals(other.getPolRuleConditionVal())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasPolRuleConditionVar()) {
+        hash = (37 * hash) + POLRULECONDITIONVAR_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleConditionVar().hashCode();
+      }
+      if (hasPolRuleConditionVal()) {
+        hash = (37 * hash) + POLRULECONDITIONVAL_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleConditionVal().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleCondition parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleCondition parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleCondition parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleCondition prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * Condition
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleCondition}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleCondition)
+        policy.Policy.PolicyRuleConditionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleCondition.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (polRuleConditionVarBuilder_ == null) {
+          polRuleConditionVar_ = null;
+        } else {
+          polRuleConditionVar_ = null;
+          polRuleConditionVarBuilder_ = null;
+        }
+        if (polRuleConditionValBuilder_ == null) {
+          polRuleConditionVal_ = null;
+        } else {
+          polRuleConditionVal_ = null;
+          polRuleConditionValBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleCondition.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleCondition build() {
+        policy.Policy.PolicyRuleCondition result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleCondition buildPartial() {
+        policy.Policy.PolicyRuleCondition result = new policy.Policy.PolicyRuleCondition(this);
+        if (polRuleConditionVarBuilder_ == null) {
+          result.polRuleConditionVar_ = polRuleConditionVar_;
+        } else {
+          result.polRuleConditionVar_ = polRuleConditionVarBuilder_.build();
+        }
+        if (polRuleConditionValBuilder_ == null) {
+          result.polRuleConditionVal_ = polRuleConditionVal_;
+        } else {
+          result.polRuleConditionVal_ = polRuleConditionValBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleCondition) {
+          return mergeFrom((policy.Policy.PolicyRuleCondition)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleCondition other) {
+        if (other == policy.Policy.PolicyRuleCondition.getDefaultInstance()) return this;
+        if (other.hasPolRuleConditionVar()) {
+          mergePolRuleConditionVar(other.getPolRuleConditionVar());
+        }
+        if (other.hasPolRuleConditionVal()) {
+          mergePolRuleConditionVal(other.getPolRuleConditionVal());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleCondition parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleCondition) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleConditionVarBuilder_;
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       * @return Whether the polRuleConditionVar field is set.
+       */
+      public boolean hasPolRuleConditionVar() {
+        return polRuleConditionVarBuilder_ != null || polRuleConditionVar_ != null;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       * @return The polRuleConditionVar.
+       */
+      public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
+        if (polRuleConditionVarBuilder_ == null) {
+          return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
+        } else {
+          return polRuleConditionVarBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public Builder setPolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
+        if (polRuleConditionVarBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          polRuleConditionVar_ = value;
+          onChanged();
+        } else {
+          polRuleConditionVarBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public Builder setPolRuleConditionVar(
+          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
+        if (polRuleConditionVarBuilder_ == null) {
+          polRuleConditionVar_ = builderForValue.build();
+          onChanged();
+        } else {
+          polRuleConditionVarBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public Builder mergePolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
+        if (polRuleConditionVarBuilder_ == null) {
+          if (polRuleConditionVar_ != null) {
+            polRuleConditionVar_ =
+              policy.Policy.PolicyRuleVariable.newBuilder(polRuleConditionVar_).mergeFrom(value).buildPartial();
+          } else {
+            polRuleConditionVar_ = value;
+          }
+          onChanged();
+        } else {
+          polRuleConditionVarBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public Builder clearPolRuleConditionVar() {
+        if (polRuleConditionVarBuilder_ == null) {
+          polRuleConditionVar_ = null;
+          onChanged();
+        } else {
+          polRuleConditionVar_ = null;
+          polRuleConditionVarBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public policy.Policy.PolicyRuleVariable.Builder getPolRuleConditionVarBuilder() {
+        
+        onChanged();
+        return getPolRuleConditionVarFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
+        if (polRuleConditionVarBuilder_ != null) {
+          return polRuleConditionVarBuilder_.getMessageOrBuilder();
+        } else {
+          return polRuleConditionVar_ == null ?
+              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
+          getPolRuleConditionVarFieldBuilder() {
+        if (polRuleConditionVarBuilder_ == null) {
+          polRuleConditionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
+                  getPolRuleConditionVar(),
+                  getParentForChildren(),
+                  isClean());
+          polRuleConditionVar_ = null;
+        }
+        return polRuleConditionVarBuilder_;
+      }
+
+      private policy.Policy.PolicyRuleValue polRuleConditionVal_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleConditionValBuilder_;
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       * @return Whether the polRuleConditionVal field is set.
+       */
+      public boolean hasPolRuleConditionVal() {
+        return polRuleConditionValBuilder_ != null || polRuleConditionVal_ != null;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       * @return The polRuleConditionVal.
+       */
+      public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
+        if (polRuleConditionValBuilder_ == null) {
+          return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
+        } else {
+          return polRuleConditionValBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public Builder setPolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
+        if (polRuleConditionValBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          polRuleConditionVal_ = value;
+          onChanged();
+        } else {
+          polRuleConditionValBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public Builder setPolRuleConditionVal(
+          policy.Policy.PolicyRuleValue.Builder builderForValue) {
+        if (polRuleConditionValBuilder_ == null) {
+          polRuleConditionVal_ = builderForValue.build();
+          onChanged();
+        } else {
+          polRuleConditionValBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public Builder mergePolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
+        if (polRuleConditionValBuilder_ == null) {
+          if (polRuleConditionVal_ != null) {
+            polRuleConditionVal_ =
+              policy.Policy.PolicyRuleValue.newBuilder(polRuleConditionVal_).mergeFrom(value).buildPartial();
+          } else {
+            polRuleConditionVal_ = value;
+          }
+          onChanged();
+        } else {
+          polRuleConditionValBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public Builder clearPolRuleConditionVal() {
+        if (polRuleConditionValBuilder_ == null) {
+          polRuleConditionVal_ = null;
+          onChanged();
+        } else {
+          polRuleConditionVal_ = null;
+          polRuleConditionValBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public policy.Policy.PolicyRuleValue.Builder getPolRuleConditionValBuilder() {
+        
+        onChanged();
+        return getPolRuleConditionValFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
+        if (polRuleConditionValBuilder_ != null) {
+          return polRuleConditionValBuilder_.getMessageOrBuilder();
+        } else {
+          return polRuleConditionVal_ == null ?
+              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
+          getPolRuleConditionValFieldBuilder() {
+        if (polRuleConditionValBuilder_ == null) {
+          polRuleConditionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
+                  getPolRuleConditionVal(),
+                  getParentForChildren(),
+                  isClean());
+          polRuleConditionVal_ = null;
+        }
+        return polRuleConditionValBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleCondition)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleCondition)
+    private static final policy.Policy.PolicyRuleCondition DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleCondition();
+    }
+
+    public static policy.Policy.PolicyRuleCondition getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleCondition>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleCondition>() {
+      @java.lang.Override
+      public PolicyRuleCondition parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleCondition(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleCondition> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleCondition> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     * @return Whether the polRuleActionVar field is set.
+     */
+    boolean hasPolRuleActionVar();
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     * @return The polRuleActionVar.
+     */
+    policy.Policy.PolicyRuleVariable getPolRuleActionVar();
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     */
+    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder();
+
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * @return Whether the polRuleActionVal field is set.
+     */
+    boolean hasPolRuleActionVal();
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * @return The polRuleActionVal.
+     */
+    policy.Policy.PolicyRuleValue getPolRuleActionVal();
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     */
+    policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder();
+  }
+  /**
+   * <pre>
+   * Action
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleAction}
+   */
+  public static final class PolicyRuleAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleAction)
+      PolicyRuleActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleAction.newBuilder() to construct.
+    private PolicyRuleAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleAction() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleAction(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
+              if (polRuleActionVar_ != null) {
+                subBuilder = polRuleActionVar_.toBuilder();
+              }
+              polRuleActionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(polRuleActionVar_);
+                polRuleActionVar_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
+              if (polRuleActionVal_ != null) {
+                subBuilder = polRuleActionVal_.toBuilder();
+              }
+              polRuleActionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(polRuleActionVal_);
+                polRuleActionVal_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
+    }
+
+    public static final int POLRULEACTIONVAR_FIELD_NUMBER = 1;
+    private policy.Policy.PolicyRuleVariable polRuleActionVar_;
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     * @return Whether the polRuleActionVar field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolRuleActionVar() {
+      return polRuleActionVar_ != null;
+    }
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     * @return The polRuleActionVar.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
+      return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
+    }
+    /**
+     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
+      return getPolRuleActionVar();
+    }
+
+    public static final int POLRULEACTIONVAL_FIELD_NUMBER = 2;
+    private policy.Policy.PolicyRuleValue polRuleActionVal_;
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * @return Whether the polRuleActionVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolRuleActionVal() {
+      return polRuleActionVal_ != null;
+    }
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * @return The polRuleActionVal.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
+      return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+    }
+    /**
+     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
+      return getPolRuleActionVal();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (polRuleActionVar_ != null) {
+        output.writeMessage(1, getPolRuleActionVar());
+      }
+      if (polRuleActionVal_ != null) {
+        output.writeMessage(2, getPolRuleActionVal());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (polRuleActionVar_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getPolRuleActionVar());
+      }
+      if (polRuleActionVal_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getPolRuleActionVal());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleAction)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleAction other = (policy.Policy.PolicyRuleAction) obj;
+
+      if (hasPolRuleActionVar() != other.hasPolRuleActionVar()) return false;
+      if (hasPolRuleActionVar()) {
+        if (!getPolRuleActionVar()
+            .equals(other.getPolRuleActionVar())) return false;
+      }
+      if (hasPolRuleActionVal() != other.hasPolRuleActionVal()) return false;
+      if (hasPolRuleActionVal()) {
+        if (!getPolRuleActionVal()
+            .equals(other.getPolRuleActionVal())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasPolRuleActionVar()) {
+        hash = (37 * hash) + POLRULEACTIONVAR_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleActionVar().hashCode();
+      }
+      if (hasPolRuleActionVal()) {
+        hash = (37 * hash) + POLRULEACTIONVAL_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleActionVal().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleAction parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleAction parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleAction prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * Action
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleAction)
+        policy.Policy.PolicyRuleActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleAction.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (polRuleActionVarBuilder_ == null) {
+          polRuleActionVar_ = null;
+        } else {
+          polRuleActionVar_ = null;
+          polRuleActionVarBuilder_ = null;
+        }
+        if (polRuleActionValBuilder_ == null) {
+          polRuleActionVal_ = null;
+        } else {
+          polRuleActionVal_ = null;
+          polRuleActionValBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleAction build() {
+        policy.Policy.PolicyRuleAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleAction buildPartial() {
+        policy.Policy.PolicyRuleAction result = new policy.Policy.PolicyRuleAction(this);
+        if (polRuleActionVarBuilder_ == null) {
+          result.polRuleActionVar_ = polRuleActionVar_;
+        } else {
+          result.polRuleActionVar_ = polRuleActionVarBuilder_.build();
+        }
+        if (polRuleActionValBuilder_ == null) {
+          result.polRuleActionVal_ = polRuleActionVal_;
+        } else {
+          result.polRuleActionVal_ = polRuleActionValBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleAction) {
+          return mergeFrom((policy.Policy.PolicyRuleAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleAction other) {
+        if (other == policy.Policy.PolicyRuleAction.getDefaultInstance()) return this;
+        if (other.hasPolRuleActionVar()) {
+          mergePolRuleActionVar(other.getPolRuleActionVar());
+        }
+        if (other.hasPolRuleActionVal()) {
+          mergePolRuleActionVal(other.getPolRuleActionVal());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private policy.Policy.PolicyRuleVariable polRuleActionVar_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleActionVarBuilder_;
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       * @return Whether the polRuleActionVar field is set.
+       */
+      public boolean hasPolRuleActionVar() {
+        return polRuleActionVarBuilder_ != null || polRuleActionVar_ != null;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       * @return The polRuleActionVar.
+       */
+      public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
+        if (polRuleActionVarBuilder_ == null) {
+          return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
+        } else {
+          return polRuleActionVarBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public Builder setPolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
+        if (polRuleActionVarBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          polRuleActionVar_ = value;
+          onChanged();
+        } else {
+          polRuleActionVarBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public Builder setPolRuleActionVar(
+          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
+        if (polRuleActionVarBuilder_ == null) {
+          polRuleActionVar_ = builderForValue.build();
+          onChanged();
+        } else {
+          polRuleActionVarBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public Builder mergePolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
+        if (polRuleActionVarBuilder_ == null) {
+          if (polRuleActionVar_ != null) {
+            polRuleActionVar_ =
+              policy.Policy.PolicyRuleVariable.newBuilder(polRuleActionVar_).mergeFrom(value).buildPartial();
+          } else {
+            polRuleActionVar_ = value;
+          }
+          onChanged();
+        } else {
+          polRuleActionVarBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public Builder clearPolRuleActionVar() {
+        if (polRuleActionVarBuilder_ == null) {
+          polRuleActionVar_ = null;
+          onChanged();
+        } else {
+          polRuleActionVar_ = null;
+          polRuleActionVarBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public policy.Policy.PolicyRuleVariable.Builder getPolRuleActionVarBuilder() {
+        
+        onChanged();
+        return getPolRuleActionVarFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
+        if (polRuleActionVarBuilder_ != null) {
+          return polRuleActionVarBuilder_.getMessageOrBuilder();
+        } else {
+          return polRuleActionVar_ == null ?
+              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
+          getPolRuleActionVarFieldBuilder() {
+        if (polRuleActionVarBuilder_ == null) {
+          polRuleActionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
+                  getPolRuleActionVar(),
+                  getParentForChildren(),
+                  isClean());
+          polRuleActionVar_ = null;
+        }
+        return polRuleActionVarBuilder_;
+      }
+
+      private policy.Policy.PolicyRuleValue polRuleActionVal_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleActionValBuilder_;
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * @return Whether the polRuleActionVal field is set.
+       */
+      public boolean hasPolRuleActionVal() {
+        return polRuleActionValBuilder_ != null || polRuleActionVal_ != null;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * @return The polRuleActionVal.
+       */
+      public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
+        if (polRuleActionValBuilder_ == null) {
+          return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+        } else {
+          return polRuleActionValBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public Builder setPolRuleActionVal(policy.Policy.PolicyRuleValue value) {
+        if (polRuleActionValBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          polRuleActionVal_ = value;
+          onChanged();
+        } else {
+          polRuleActionValBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public Builder setPolRuleActionVal(
+          policy.Policy.PolicyRuleValue.Builder builderForValue) {
+        if (polRuleActionValBuilder_ == null) {
+          polRuleActionVal_ = builderForValue.build();
+          onChanged();
+        } else {
+          polRuleActionValBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public Builder mergePolRuleActionVal(policy.Policy.PolicyRuleValue value) {
+        if (polRuleActionValBuilder_ == null) {
+          if (polRuleActionVal_ != null) {
+            polRuleActionVal_ =
+              policy.Policy.PolicyRuleValue.newBuilder(polRuleActionVal_).mergeFrom(value).buildPartial();
+          } else {
+            polRuleActionVal_ = value;
+          }
+          onChanged();
+        } else {
+          polRuleActionValBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public Builder clearPolRuleActionVal() {
+        if (polRuleActionValBuilder_ == null) {
+          polRuleActionVal_ = null;
+          onChanged();
+        } else {
+          polRuleActionVal_ = null;
+          polRuleActionValBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public policy.Policy.PolicyRuleValue.Builder getPolRuleActionValBuilder() {
+        
+        onChanged();
+        return getPolRuleActionValFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
+        if (polRuleActionValBuilder_ != null) {
+          return polRuleActionValBuilder_.getMessageOrBuilder();
+        } else {
+          return polRuleActionVal_ == null ?
+              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+        }
+      }
+      /**
+       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
+          getPolRuleActionValFieldBuilder() {
+        if (polRuleActionValBuilder_ == null) {
+          polRuleActionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
+                  getPolRuleActionVal(),
+                  getParentForChildren(),
+                  isClean());
+          polRuleActionVal_ = null;
+        }
+        return polRuleActionValBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleAction)
+    private static final policy.Policy.PolicyRuleAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleAction();
+    }
+
+    public static policy.Policy.PolicyRuleAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleAction>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleAction>() {
+      @java.lang.Override
+      public PolicyRuleAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRule)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     * @return Whether the policyRuleId field is set.
+     */
+    boolean hasPolicyRuleId();
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     * @return The policyRuleId.
+     */
+    policy.Policy.PolicyRuleId getPolicyRuleId();
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     */
+    policy.Policy.PolicyRuleIdOrBuilder getPolicyRuleIdOrBuilder();
+
+    /**
+     * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+     * @return The enum numeric value on the wire for policyRuleType.
+     */
+    int getPolicyRuleTypeValue();
+    /**
+     * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+     * @return The policyRuleType.
+     */
+    policy.Policy.PolicyRuleType getPolicyRuleType();
+
+    /**
+     * <code>uint32 PolicyRulePriority = 3;</code>
+     * @return The policyRulePriority.
+     */
+    int getPolicyRulePriority();
+
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     * @return The event.
+     */
+    policy.Policy.PolicyRuleEvent getEvent();
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     */
+    policy.Policy.PolicyRuleEventOrBuilder getEventOrBuilder();
+
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    java.util.List<policy.Policy.PolicyRuleCondition> 
+        getPolRuleConditionListList();
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index);
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    int getPolRuleConditionListCount();
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
+        getPolRuleConditionListOrBuilderList();
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    java.util.List<policy.Policy.PolicyRuleAction> 
+        getPolRuleActionListList();
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    policy.Policy.PolicyRuleAction getPolRuleActionList(int index);
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    int getPolRuleActionListCount();
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
+        getPolRuleActionListOrBuilderList();
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceListList();
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceList(int index);
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    int getServiceListCount();
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceListOrBuilderList();
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceListList();
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceList(int index);
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    int getDeviceListCount();
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceListOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   * Policy rule partially complies with IETF’s:
+   *     RFC 3060: https://datatracker.ietf.org/doc/html/rfc3060
+   *     RFC 3460: https://datatracker.ietf.org/doc/html/rfc3460
+   * Enhanced with a policy rule event according to the ECA model
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRule}
+   */
+  public static final class PolicyRule extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRule)
+      PolicyRuleOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRule.newBuilder() to construct.
+    private PolicyRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRule() {
+      policyRuleType_ = 0;
+      polRuleConditionList_ = java.util.Collections.emptyList();
+      polRuleActionList_ = java.util.Collections.emptyList();
+      serviceList_ = java.util.Collections.emptyList();
+      deviceList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRule();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRule(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              policy.Policy.PolicyRuleId.Builder subBuilder = null;
+              if (policyRuleId_ != null) {
+                subBuilder = policyRuleId_.toBuilder();
+              }
+              policyRuleId_ = input.readMessage(policy.Policy.PolicyRuleId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(policyRuleId_);
+                policyRuleId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              policyRuleType_ = rawValue;
+              break;
+            }
+            case 24: {
+
+              policyRulePriority_ = input.readUInt32();
+              break;
+            }
+            case 34: {
+              policy.Policy.PolicyRuleEvent.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(policy.Policy.PolicyRuleEvent.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              polRuleConditionList_.add(
+                  input.readMessage(policy.Policy.PolicyRuleCondition.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              polRuleActionList_.add(
+                  input.readMessage(policy.Policy.PolicyRuleAction.parser(), extensionRegistry));
+              break;
+            }
+            case 58: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              serviceList_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 66: {
+              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+                deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              deviceList_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) != 0)) {
+          deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRule.class, policy.Policy.PolicyRule.Builder.class);
+    }
+
+    public static final int POLICYRULEID_FIELD_NUMBER = 1;
+    private policy.Policy.PolicyRuleId policyRuleId_;
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     * @return Whether the policyRuleId field is set.
+     */
+    @java.lang.Override
+    public boolean hasPolicyRuleId() {
+      return policyRuleId_ != null;
+    }
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     * @return The policyRuleId.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleId getPolicyRuleId() {
+      return policyRuleId_ == null ? policy.Policy.PolicyRuleId.getDefaultInstance() : policyRuleId_;
+    }
+    /**
+     * <pre>
+     * Basic policy rule attributes
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleIdOrBuilder getPolicyRuleIdOrBuilder() {
+      return getPolicyRuleId();
+    }
+
+    public static final int POLICYRULETYPE_FIELD_NUMBER = 2;
+    private int policyRuleType_;
+    /**
+     * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+     * @return The enum numeric value on the wire for policyRuleType.
+     */
+    @java.lang.Override public int getPolicyRuleTypeValue() {
+      return policyRuleType_;
+    }
+    /**
+     * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+     * @return The policyRuleType.
+     */
+    @java.lang.Override public policy.Policy.PolicyRuleType getPolicyRuleType() {
+      @SuppressWarnings("deprecation")
+      policy.Policy.PolicyRuleType result = policy.Policy.PolicyRuleType.valueOf(policyRuleType_);
+      return result == null ? policy.Policy.PolicyRuleType.UNRECOGNIZED : result;
+    }
+
+    public static final int POLICYRULEPRIORITY_FIELD_NUMBER = 3;
+    private int policyRulePriority_;
+    /**
+     * <code>uint32 PolicyRulePriority = 3;</code>
+     * @return The policyRulePriority.
+     */
+    @java.lang.Override
+    public int getPolicyRulePriority() {
+      return policyRulePriority_;
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 4;
+    private policy.Policy.PolicyRuleEvent event_;
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleEvent getEvent() {
+      return event_ == null ? policy.Policy.PolicyRuleEvent.getDefaultInstance() : event_;
+    }
+    /**
+     * <pre>
+     * Event-Condition-Action model
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleEvent event = 4;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleEventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int POLRULECONDITIONLIST_FIELD_NUMBER = 5;
+    private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_;
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
+      return polRuleConditionList_;
+    }
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
+        getPolRuleConditionListOrBuilderList() {
+      return polRuleConditionList_;
+    }
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    @java.lang.Override
+    public int getPolRuleConditionListCount() {
+      return polRuleConditionList_.size();
+    }
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
+      return polRuleConditionList_.get(index);
+    }
+    /**
+     * <pre>
+     * One or more conditions must be met
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+        int index) {
+      return polRuleConditionList_.get(index);
+    }
+
+    public static final int POLRULEACTIONLIST_FIELD_NUMBER = 6;
+    private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_;
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
+      return polRuleActionList_;
+    }
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
+        getPolRuleActionListOrBuilderList() {
+      return polRuleActionList_;
+    }
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    @java.lang.Override
+    public int getPolRuleActionListCount() {
+      return polRuleActionList_.size();
+    }
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
+      return polRuleActionList_.get(index);
+    }
+    /**
+     * <pre>
+     * One or more actions should be applied
+     * </pre>
+     *
+     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
+        int index) {
+      return polRuleActionList_.get(index);
+    }
+
+    public static final int SERVICELIST_FIELD_NUMBER = 7;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceList_;
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
+      return serviceList_;
+    }
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceListOrBuilderList() {
+      return serviceList_;
+    }
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    @java.lang.Override
+    public int getServiceListCount() {
+      return serviceList_.size();
+    }
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceList(int index) {
+      return serviceList_.get(index);
+    }
+    /**
+     * <pre>
+     * Affected services and devices
+     * </pre>
+     *
+     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
+        int index) {
+      return serviceList_.get(index);
+    }
+
+    public static final int DEVICELIST_FIELD_NUMBER = 8;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceList_;
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
+      return deviceList_;
+    }
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceListOrBuilderList() {
+      return deviceList_;
+    }
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    @java.lang.Override
+    public int getDeviceListCount() {
+      return deviceList_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceList(int index) {
+      return deviceList_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
+        int index) {
+      return deviceList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (policyRuleId_ != null) {
+        output.writeMessage(1, getPolicyRuleId());
+      }
+      if (policyRuleType_ != policy.Policy.PolicyRuleType.POLICYTYPE_DEVICE.getNumber()) {
+        output.writeEnum(2, policyRuleType_);
+      }
+      if (policyRulePriority_ != 0) {
+        output.writeUInt32(3, policyRulePriority_);
+      }
+      if (event_ != null) {
+        output.writeMessage(4, getEvent());
+      }
+      for (int i = 0; i < polRuleConditionList_.size(); i++) {
+        output.writeMessage(5, polRuleConditionList_.get(i));
+      }
+      for (int i = 0; i < polRuleActionList_.size(); i++) {
+        output.writeMessage(6, polRuleActionList_.get(i));
+      }
+      for (int i = 0; i < serviceList_.size(); i++) {
+        output.writeMessage(7, serviceList_.get(i));
+      }
+      for (int i = 0; i < deviceList_.size(); i++) {
+        output.writeMessage(8, deviceList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (policyRuleId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getPolicyRuleId());
+      }
+      if (policyRuleType_ != policy.Policy.PolicyRuleType.POLICYTYPE_DEVICE.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, policyRuleType_);
+      }
+      if (policyRulePriority_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, policyRulePriority_);
+      }
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getEvent());
+      }
+      for (int i = 0; i < polRuleConditionList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, polRuleConditionList_.get(i));
+      }
+      for (int i = 0; i < polRuleActionList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, polRuleActionList_.get(i));
+      }
+      for (int i = 0; i < serviceList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, serviceList_.get(i));
+      }
+      for (int i = 0; i < deviceList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, deviceList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRule)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRule other = (policy.Policy.PolicyRule) obj;
+
+      if (hasPolicyRuleId() != other.hasPolicyRuleId()) return false;
+      if (hasPolicyRuleId()) {
+        if (!getPolicyRuleId()
+            .equals(other.getPolicyRuleId())) return false;
+      }
+      if (policyRuleType_ != other.policyRuleType_) return false;
+      if (getPolicyRulePriority()
+          != other.getPolicyRulePriority()) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (!getPolRuleConditionListList()
+          .equals(other.getPolRuleConditionListList())) return false;
+      if (!getPolRuleActionListList()
+          .equals(other.getPolRuleActionListList())) return false;
+      if (!getServiceListList()
+          .equals(other.getServiceListList())) return false;
+      if (!getDeviceListList()
+          .equals(other.getDeviceListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasPolicyRuleId()) {
+        hash = (37 * hash) + POLICYRULEID_FIELD_NUMBER;
+        hash = (53 * hash) + getPolicyRuleId().hashCode();
+      }
+      hash = (37 * hash) + POLICYRULETYPE_FIELD_NUMBER;
+      hash = (53 * hash) + policyRuleType_;
+      hash = (37 * hash) + POLICYRULEPRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPolicyRulePriority();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (getPolRuleConditionListCount() > 0) {
+        hash = (37 * hash) + POLRULECONDITIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleConditionListList().hashCode();
+      }
+      if (getPolRuleActionListCount() > 0) {
+        hash = (37 * hash) + POLRULEACTIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getPolRuleActionListList().hashCode();
+      }
+      if (getServiceListCount() > 0) {
+        hash = (37 * hash) + SERVICELIST_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceListList().hashCode();
+      }
+      if (getDeviceListCount() > 0) {
+        hash = (37 * hash) + DEVICELIST_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRule parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRule parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRule parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRule parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRule parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRule parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRule prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * Policy rule partially complies with IETF’s:
+     *     RFC 3060: https://datatracker.ietf.org/doc/html/rfc3060
+     *     RFC 3460: https://datatracker.ietf.org/doc/html/rfc3460
+     * Enhanced with a policy rule event according to the ECA model
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRule}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRule)
+        policy.Policy.PolicyRuleOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRule_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRule_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRule.class, policy.Policy.PolicyRule.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRule.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPolRuleConditionListFieldBuilder();
+          getPolRuleActionListFieldBuilder();
+          getServiceListFieldBuilder();
+          getDeviceListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = null;
+        } else {
+          policyRuleId_ = null;
+          policyRuleIdBuilder_ = null;
+        }
+        policyRuleType_ = 0;
+
+        policyRulePriority_ = 0;
+
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (polRuleConditionListBuilder_ == null) {
+          polRuleConditionList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          polRuleConditionListBuilder_.clear();
+        }
+        if (polRuleActionListBuilder_ == null) {
+          polRuleActionList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          polRuleActionListBuilder_.clear();
+        }
+        if (serviceListBuilder_ == null) {
+          serviceList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          serviceListBuilder_.clear();
+        }
+        if (deviceListBuilder_ == null) {
+          deviceList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          deviceListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRule_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRule getDefaultInstanceForType() {
+        return policy.Policy.PolicyRule.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRule build() {
+        policy.Policy.PolicyRule result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRule buildPartial() {
+        policy.Policy.PolicyRule result = new policy.Policy.PolicyRule(this);
+        int from_bitField0_ = bitField0_;
+        if (policyRuleIdBuilder_ == null) {
+          result.policyRuleId_ = policyRuleId_;
+        } else {
+          result.policyRuleId_ = policyRuleIdBuilder_.build();
+        }
+        result.policyRuleType_ = policyRuleType_;
+        result.policyRulePriority_ = policyRulePriority_;
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (polRuleConditionListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.polRuleConditionList_ = polRuleConditionList_;
+        } else {
+          result.polRuleConditionList_ = polRuleConditionListBuilder_.build();
+        }
+        if (polRuleActionListBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.polRuleActionList_ = polRuleActionList_;
+        } else {
+          result.polRuleActionList_ = polRuleActionListBuilder_.build();
+        }
+        if (serviceListBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.serviceList_ = serviceList_;
+        } else {
+          result.serviceList_ = serviceListBuilder_.build();
+        }
+        if (deviceListBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) != 0)) {
+            deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.deviceList_ = deviceList_;
+        } else {
+          result.deviceList_ = deviceListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRule) {
+          return mergeFrom((policy.Policy.PolicyRule)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRule other) {
+        if (other == policy.Policy.PolicyRule.getDefaultInstance()) return this;
+        if (other.hasPolicyRuleId()) {
+          mergePolicyRuleId(other.getPolicyRuleId());
+        }
+        if (other.policyRuleType_ != 0) {
+          setPolicyRuleTypeValue(other.getPolicyRuleTypeValue());
+        }
+        if (other.getPolicyRulePriority() != 0) {
+          setPolicyRulePriority(other.getPolicyRulePriority());
+        }
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (polRuleConditionListBuilder_ == null) {
+          if (!other.polRuleConditionList_.isEmpty()) {
+            if (polRuleConditionList_.isEmpty()) {
+              polRuleConditionList_ = other.polRuleConditionList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePolRuleConditionListIsMutable();
+              polRuleConditionList_.addAll(other.polRuleConditionList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.polRuleConditionList_.isEmpty()) {
+            if (polRuleConditionListBuilder_.isEmpty()) {
+              polRuleConditionListBuilder_.dispose();
+              polRuleConditionListBuilder_ = null;
+              polRuleConditionList_ = other.polRuleConditionList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              polRuleConditionListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPolRuleConditionListFieldBuilder() : null;
+            } else {
+              polRuleConditionListBuilder_.addAllMessages(other.polRuleConditionList_);
+            }
+          }
+        }
+        if (polRuleActionListBuilder_ == null) {
+          if (!other.polRuleActionList_.isEmpty()) {
+            if (polRuleActionList_.isEmpty()) {
+              polRuleActionList_ = other.polRuleActionList_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensurePolRuleActionListIsMutable();
+              polRuleActionList_.addAll(other.polRuleActionList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.polRuleActionList_.isEmpty()) {
+            if (polRuleActionListBuilder_.isEmpty()) {
+              polRuleActionListBuilder_.dispose();
+              polRuleActionListBuilder_ = null;
+              polRuleActionList_ = other.polRuleActionList_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              polRuleActionListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPolRuleActionListFieldBuilder() : null;
+            } else {
+              polRuleActionListBuilder_.addAllMessages(other.polRuleActionList_);
+            }
+          }
+        }
+        if (serviceListBuilder_ == null) {
+          if (!other.serviceList_.isEmpty()) {
+            if (serviceList_.isEmpty()) {
+              serviceList_ = other.serviceList_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureServiceListIsMutable();
+              serviceList_.addAll(other.serviceList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceList_.isEmpty()) {
+            if (serviceListBuilder_.isEmpty()) {
+              serviceListBuilder_.dispose();
+              serviceListBuilder_ = null;
+              serviceList_ = other.serviceList_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              serviceListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceListFieldBuilder() : null;
+            } else {
+              serviceListBuilder_.addAllMessages(other.serviceList_);
+            }
+          }
+        }
+        if (deviceListBuilder_ == null) {
+          if (!other.deviceList_.isEmpty()) {
+            if (deviceList_.isEmpty()) {
+              deviceList_ = other.deviceList_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureDeviceListIsMutable();
+              deviceList_.addAll(other.deviceList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceList_.isEmpty()) {
+            if (deviceListBuilder_.isEmpty()) {
+              deviceListBuilder_.dispose();
+              deviceListBuilder_ = null;
+              deviceList_ = other.deviceList_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              deviceListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceListFieldBuilder() : null;
+            } else {
+              deviceListBuilder_.addAllMessages(other.deviceList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRule parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private policy.Policy.PolicyRuleId policyRuleId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder> policyRuleIdBuilder_;
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       * @return Whether the policyRuleId field is set.
+       */
+      public boolean hasPolicyRuleId() {
+        return policyRuleIdBuilder_ != null || policyRuleId_ != null;
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       * @return The policyRuleId.
+       */
+      public policy.Policy.PolicyRuleId getPolicyRuleId() {
+        if (policyRuleIdBuilder_ == null) {
+          return policyRuleId_ == null ? policy.Policy.PolicyRuleId.getDefaultInstance() : policyRuleId_;
+        } else {
+          return policyRuleIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public Builder setPolicyRuleId(policy.Policy.PolicyRuleId value) {
+        if (policyRuleIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          policyRuleId_ = value;
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public Builder setPolicyRuleId(
+          policy.Policy.PolicyRuleId.Builder builderForValue) {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = builderForValue.build();
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public Builder mergePolicyRuleId(policy.Policy.PolicyRuleId value) {
+        if (policyRuleIdBuilder_ == null) {
+          if (policyRuleId_ != null) {
+            policyRuleId_ =
+              policy.Policy.PolicyRuleId.newBuilder(policyRuleId_).mergeFrom(value).buildPartial();
+          } else {
+            policyRuleId_ = value;
+          }
+          onChanged();
+        } else {
+          policyRuleIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public Builder clearPolicyRuleId() {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleId_ = null;
+          onChanged();
+        } else {
+          policyRuleId_ = null;
+          policyRuleIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public policy.Policy.PolicyRuleId.Builder getPolicyRuleIdBuilder() {
+        
+        onChanged();
+        return getPolicyRuleIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      public policy.Policy.PolicyRuleIdOrBuilder getPolicyRuleIdOrBuilder() {
+        if (policyRuleIdBuilder_ != null) {
+          return policyRuleIdBuilder_.getMessageOrBuilder();
+        } else {
+          return policyRuleId_ == null ?
+              policy.Policy.PolicyRuleId.getDefaultInstance() : policyRuleId_;
+        }
+      }
+      /**
+       * <pre>
+       * Basic policy rule attributes
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleId policyRuleId = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder> 
+          getPolicyRuleIdFieldBuilder() {
+        if (policyRuleIdBuilder_ == null) {
+          policyRuleIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder>(
+                  getPolicyRuleId(),
+                  getParentForChildren(),
+                  isClean());
+          policyRuleId_ = null;
+        }
+        return policyRuleIdBuilder_;
+      }
+
+      private int policyRuleType_ = 0;
+      /**
+       * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+       * @return The enum numeric value on the wire for policyRuleType.
+       */
+      @java.lang.Override public int getPolicyRuleTypeValue() {
+        return policyRuleType_;
+      }
+      /**
+       * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+       * @param value The enum numeric value on the wire for policyRuleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleTypeValue(int value) {
+        
+        policyRuleType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+       * @return The policyRuleType.
+       */
+      @java.lang.Override
+      public policy.Policy.PolicyRuleType getPolicyRuleType() {
+        @SuppressWarnings("deprecation")
+        policy.Policy.PolicyRuleType result = policy.Policy.PolicyRuleType.valueOf(policyRuleType_);
+        return result == null ? policy.Policy.PolicyRuleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+       * @param value The policyRuleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleType(policy.Policy.PolicyRuleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        policyRuleType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleType policyRuleType = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRuleType() {
+        
+        policyRuleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int policyRulePriority_ ;
+      /**
+       * <code>uint32 PolicyRulePriority = 3;</code>
+       * @return The policyRulePriority.
+       */
+      @java.lang.Override
+      public int getPolicyRulePriority() {
+        return policyRulePriority_;
+      }
+      /**
+       * <code>uint32 PolicyRulePriority = 3;</code>
+       * @param value The policyRulePriority to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRulePriority(int value) {
+        
+        policyRulePriority_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 PolicyRulePriority = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRulePriority() {
+        
+        policyRulePriority_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private policy.Policy.PolicyRuleEvent event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleEvent, policy.Policy.PolicyRuleEvent.Builder, policy.Policy.PolicyRuleEventOrBuilder> eventBuilder_;
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       * @return The event.
+       */
+      public policy.Policy.PolicyRuleEvent getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? policy.Policy.PolicyRuleEvent.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public Builder setEvent(policy.Policy.PolicyRuleEvent value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public Builder setEvent(
+          policy.Policy.PolicyRuleEvent.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public Builder mergeEvent(policy.Policy.PolicyRuleEvent value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              policy.Policy.PolicyRuleEvent.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public policy.Policy.PolicyRuleEvent.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      public policy.Policy.PolicyRuleEventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              policy.Policy.PolicyRuleEvent.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <pre>
+       * Event-Condition-Action model
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleEvent event = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          policy.Policy.PolicyRuleEvent, policy.Policy.PolicyRuleEvent.Builder, policy.Policy.PolicyRuleEventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              policy.Policy.PolicyRuleEvent, policy.Policy.PolicyRuleEvent.Builder, policy.Policy.PolicyRuleEventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_ =
+        java.util.Collections.emptyList();
+      private void ensurePolRuleConditionListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>(polRuleConditionList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> polRuleConditionListBuilder_;
+
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
+        if (polRuleConditionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+        } else {
+          return polRuleConditionListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public int getPolRuleConditionListCount() {
+        if (polRuleConditionListBuilder_ == null) {
+          return polRuleConditionList_.size();
+        } else {
+          return polRuleConditionListBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
+        if (polRuleConditionListBuilder_ == null) {
+          return polRuleConditionList_.get(index);
+        } else {
+          return polRuleConditionListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder setPolRuleConditionList(
+          int index, policy.Policy.PolicyRuleCondition value) {
+        if (polRuleConditionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.set(index, value);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder setPolRuleConditionList(
+          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
+        if (polRuleConditionListBuilder_ == null) {
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder addPolRuleConditionList(policy.Policy.PolicyRuleCondition value) {
+        if (polRuleConditionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.add(value);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder addPolRuleConditionList(
+          int index, policy.Policy.PolicyRuleCondition value) {
+        if (polRuleConditionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.add(index, value);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder addPolRuleConditionList(
+          policy.Policy.PolicyRuleCondition.Builder builderForValue) {
+        if (polRuleConditionListBuilder_ == null) {
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder addPolRuleConditionList(
+          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
+        if (polRuleConditionListBuilder_ == null) {
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder addAllPolRuleConditionList(
+          java.lang.Iterable<? extends policy.Policy.PolicyRuleCondition> values) {
+        if (polRuleConditionListBuilder_ == null) {
+          ensurePolRuleConditionListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, polRuleConditionList_);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder clearPolRuleConditionList() {
+        if (polRuleConditionListBuilder_ == null) {
+          polRuleConditionList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public Builder removePolRuleConditionList(int index) {
+        if (polRuleConditionListBuilder_ == null) {
+          ensurePolRuleConditionListIsMutable();
+          polRuleConditionList_.remove(index);
+          onChanged();
+        } else {
+          polRuleConditionListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public policy.Policy.PolicyRuleCondition.Builder getPolRuleConditionListBuilder(
+          int index) {
+        return getPolRuleConditionListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+          int index) {
+        if (polRuleConditionListBuilder_ == null) {
+          return polRuleConditionList_.get(index);  } else {
+          return polRuleConditionListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
+           getPolRuleConditionListOrBuilderList() {
+        if (polRuleConditionListBuilder_ != null) {
+          return polRuleConditionListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+        }
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder() {
+        return getPolRuleConditionListFieldBuilder().addBuilder(
+            policy.Policy.PolicyRuleCondition.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder(
+          int index) {
+        return getPolRuleConditionListFieldBuilder().addBuilder(
+            index, policy.Policy.PolicyRuleCondition.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * One or more conditions must be met
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRuleCondition.Builder> 
+           getPolRuleConditionListBuilderList() {
+        return getPolRuleConditionListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> 
+          getPolRuleConditionListFieldBuilder() {
+        if (polRuleConditionListBuilder_ == null) {
+          polRuleConditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder>(
+                  polRuleConditionList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          polRuleConditionList_ = null;
+        }
+        return polRuleConditionListBuilder_;
+      }
+
+      private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_ =
+        java.util.Collections.emptyList();
+      private void ensurePolRuleActionListIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>(polRuleActionList_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> polRuleActionListBuilder_;
+
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
+        if (polRuleActionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(polRuleActionList_);
+        } else {
+          return polRuleActionListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public int getPolRuleActionListCount() {
+        if (polRuleActionListBuilder_ == null) {
+          return polRuleActionList_.size();
+        } else {
+          return polRuleActionListBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
+        if (polRuleActionListBuilder_ == null) {
+          return polRuleActionList_.get(index);
+        } else {
+          return polRuleActionListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder setPolRuleActionList(
+          int index, policy.Policy.PolicyRuleAction value) {
+        if (polRuleActionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.set(index, value);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder setPolRuleActionList(
+          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
+        if (polRuleActionListBuilder_ == null) {
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder addPolRuleActionList(policy.Policy.PolicyRuleAction value) {
+        if (polRuleActionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.add(value);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder addPolRuleActionList(
+          int index, policy.Policy.PolicyRuleAction value) {
+        if (polRuleActionListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.add(index, value);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder addPolRuleActionList(
+          policy.Policy.PolicyRuleAction.Builder builderForValue) {
+        if (polRuleActionListBuilder_ == null) {
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder addPolRuleActionList(
+          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
+        if (polRuleActionListBuilder_ == null) {
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder addAllPolRuleActionList(
+          java.lang.Iterable<? extends policy.Policy.PolicyRuleAction> values) {
+        if (polRuleActionListBuilder_ == null) {
+          ensurePolRuleActionListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, polRuleActionList_);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder clearPolRuleActionList() {
+        if (polRuleActionListBuilder_ == null) {
+          polRuleActionList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public Builder removePolRuleActionList(int index) {
+        if (polRuleActionListBuilder_ == null) {
+          ensurePolRuleActionListIsMutable();
+          polRuleActionList_.remove(index);
+          onChanged();
+        } else {
+          polRuleActionListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public policy.Policy.PolicyRuleAction.Builder getPolRuleActionListBuilder(
+          int index) {
+        return getPolRuleActionListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
+          int index) {
+        if (polRuleActionListBuilder_ == null) {
+          return polRuleActionList_.get(index);  } else {
+          return polRuleActionListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
+           getPolRuleActionListOrBuilderList() {
+        if (polRuleActionListBuilder_ != null) {
+          return polRuleActionListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(polRuleActionList_);
+        }
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder() {
+        return getPolRuleActionListFieldBuilder().addBuilder(
+            policy.Policy.PolicyRuleAction.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder(
+          int index) {
+        return getPolRuleActionListFieldBuilder().addBuilder(
+            index, policy.Policy.PolicyRuleAction.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * One or more actions should be applied
+       * </pre>
+       *
+       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRuleAction.Builder> 
+           getPolRuleActionListBuilderList() {
+        return getPolRuleActionListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> 
+          getPolRuleActionListFieldBuilder() {
+        if (polRuleActionListBuilder_ == null) {
+          polRuleActionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder>(
+                  polRuleActionList_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          polRuleActionList_ = null;
+        }
+        return polRuleActionListBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceList_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceListIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceList_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceListBuilder_;
+
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
+        if (serviceListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceList_);
+        } else {
+          return serviceListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public int getServiceListCount() {
+        if (serviceListBuilder_ == null) {
+          return serviceList_.size();
+        } else {
+          return serviceListBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceList(int index) {
+        if (serviceListBuilder_ == null) {
+          return serviceList_.get(index);
+        } else {
+          return serviceListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder setServiceList(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceListIsMutable();
+          serviceList_.set(index, value);
+          onChanged();
+        } else {
+          serviceListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder setServiceList(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceListBuilder_ == null) {
+          ensureServiceListIsMutable();
+          serviceList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder addServiceList(context.ContextOuterClass.ServiceId value) {
+        if (serviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceListIsMutable();
+          serviceList_.add(value);
+          onChanged();
+        } else {
+          serviceListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder addServiceList(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceListIsMutable();
+          serviceList_.add(index, value);
+          onChanged();
+        } else {
+          serviceListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder addServiceList(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceListBuilder_ == null) {
+          ensureServiceListIsMutable();
+          serviceList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder addServiceList(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceListBuilder_ == null) {
+          ensureServiceListIsMutable();
+          serviceList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder addAllServiceList(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceListBuilder_ == null) {
+          ensureServiceListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceList_);
+          onChanged();
+        } else {
+          serviceListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder clearServiceList() {
+        if (serviceListBuilder_ == null) {
+          serviceList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          serviceListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public Builder removeServiceList(int index) {
+        if (serviceListBuilder_ == null) {
+          ensureServiceListIsMutable();
+          serviceList_.remove(index);
+          onChanged();
+        } else {
+          serviceListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceListBuilder(
+          int index) {
+        return getServiceListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
+          int index) {
+        if (serviceListBuilder_ == null) {
+          return serviceList_.get(index);  } else {
+          return serviceListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceListOrBuilderList() {
+        if (serviceListBuilder_ != null) {
+          return serviceListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceList_);
+        }
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder() {
+        return getServiceListFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder(
+          int index) {
+        return getServiceListFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       * Affected services and devices
+       * </pre>
+       *
+       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceListBuilderList() {
+        return getServiceListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceListFieldBuilder() {
+        if (serviceListBuilder_ == null) {
+          serviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceList_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceList_ = null;
+        }
+        return serviceListBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceList_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceListIsMutable() {
+        if (!((bitField0_ & 0x00000008) != 0)) {
+          deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceList_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceListBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
+        if (deviceListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceList_);
+        } else {
+          return deviceListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public int getDeviceListCount() {
+        if (deviceListBuilder_ == null) {
+          return deviceList_.size();
+        } else {
+          return deviceListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceList(int index) {
+        if (deviceListBuilder_ == null) {
+          return deviceList_.get(index);
+        } else {
+          return deviceListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder setDeviceList(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceListIsMutable();
+          deviceList_.set(index, value);
+          onChanged();
+        } else {
+          deviceListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder setDeviceList(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceListBuilder_ == null) {
+          ensureDeviceListIsMutable();
+          deviceList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder addDeviceList(context.ContextOuterClass.DeviceId value) {
+        if (deviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceListIsMutable();
+          deviceList_.add(value);
+          onChanged();
+        } else {
+          deviceListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder addDeviceList(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceListIsMutable();
+          deviceList_.add(index, value);
+          onChanged();
+        } else {
+          deviceListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder addDeviceList(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceListBuilder_ == null) {
+          ensureDeviceListIsMutable();
+          deviceList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder addDeviceList(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceListBuilder_ == null) {
+          ensureDeviceListIsMutable();
+          deviceList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder addAllDeviceList(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceListBuilder_ == null) {
+          ensureDeviceListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceList_);
+          onChanged();
+        } else {
+          deviceListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder clearDeviceList() {
+        if (deviceListBuilder_ == null) {
+          deviceList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          deviceListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public Builder removeDeviceList(int index) {
+        if (deviceListBuilder_ == null) {
+          ensureDeviceListIsMutable();
+          deviceList_.remove(index);
+          onChanged();
+        } else {
+          deviceListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceListBuilder(
+          int index) {
+        return getDeviceListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
+          int index) {
+        if (deviceListBuilder_ == null) {
+          return deviceList_.get(index);  } else {
+          return deviceListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceListOrBuilderList() {
+        if (deviceListBuilder_ != null) {
+          return deviceListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceList_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder() {
+        return getDeviceListFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder(
+          int index) {
+        return getDeviceListFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceListBuilderList() {
+        return getDeviceListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceListFieldBuilder() {
+        if (deviceListBuilder_ == null) {
+          deviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceList_,
+                  ((bitField0_ & 0x00000008) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceList_ = null;
+        }
+        return deviceListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRule)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRule)
+    private static final policy.Policy.PolicyRule DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRule();
+    }
+
+    public static policy.Policy.PolicyRule getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRule>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRule>() {
+      @java.lang.Override
+      public PolicyRule parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRule(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRule> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRule> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRule getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PolicyRuleListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    java.util.List<policy.Policy.PolicyRule> 
+        getPolicyRuleListList();
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    policy.Policy.PolicyRule getPolicyRuleList(int index);
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    int getPolicyRuleListCount();
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
+        getPolicyRuleListOrBuilderList();
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    policy.Policy.PolicyRuleOrBuilder getPolicyRuleListOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   * A list of policy rules
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleList}
+   */
+  public static final class PolicyRuleList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleList)
+      PolicyRuleListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleList.newBuilder() to construct.
+    private PolicyRuleList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleList() {
+      policyRuleList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                policyRuleList_ = new java.util.ArrayList<policy.Policy.PolicyRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              policyRuleList_.add(
+                  input.readMessage(policy.Policy.PolicyRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          policyRuleList_ = java.util.Collections.unmodifiableList(policyRuleList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.Policy.internal_static_policy_PolicyRuleList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.Policy.internal_static_policy_PolicyRuleList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.Policy.PolicyRuleList.class, policy.Policy.PolicyRuleList.Builder.class);
+    }
+
+    public static final int POLICYRULELIST_FIELD_NUMBER = 1;
+    private java.util.List<policy.Policy.PolicyRule> policyRuleList_;
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<policy.Policy.PolicyRule> getPolicyRuleListList() {
+      return policyRuleList_;
+    }
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
+        getPolicyRuleListOrBuilderList() {
+      return policyRuleList_;
+    }
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    @java.lang.Override
+    public int getPolicyRuleListCount() {
+      return policyRuleList_.size();
+    }
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRule getPolicyRuleList(int index) {
+      return policyRuleList_.get(index);
+    }
+    /**
+     * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+     */
+    @java.lang.Override
+    public policy.Policy.PolicyRuleOrBuilder getPolicyRuleListOrBuilder(
+        int index) {
+      return policyRuleList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < policyRuleList_.size(); i++) {
+        output.writeMessage(1, policyRuleList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < policyRuleList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, policyRuleList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.Policy.PolicyRuleList)) {
+        return super.equals(obj);
+      }
+      policy.Policy.PolicyRuleList other = (policy.Policy.PolicyRuleList) obj;
+
+      if (!getPolicyRuleListList()
+          .equals(other.getPolicyRuleListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getPolicyRuleListCount() > 0) {
+        hash = (37 * hash) + POLICYRULELIST_FIELD_NUMBER;
+        hash = (53 * hash) + getPolicyRuleListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.Policy.PolicyRuleList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.Policy.PolicyRuleList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.Policy.PolicyRuleList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * A list of policy rules
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleList)
+        policy.Policy.PolicyRuleListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.Policy.internal_static_policy_PolicyRuleList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.Policy.internal_static_policy_PolicyRuleList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.Policy.PolicyRuleList.class, policy.Policy.PolicyRuleList.Builder.class);
+      }
+
+      // Construct using policy.Policy.PolicyRuleList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPolicyRuleListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (policyRuleListBuilder_ == null) {
+          policyRuleList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          policyRuleListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.Policy.internal_static_policy_PolicyRuleList_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleList getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleList build() {
+        policy.Policy.PolicyRuleList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.Policy.PolicyRuleList buildPartial() {
+        policy.Policy.PolicyRuleList result = new policy.Policy.PolicyRuleList(this);
+        int from_bitField0_ = bitField0_;
+        if (policyRuleListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            policyRuleList_ = java.util.Collections.unmodifiableList(policyRuleList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.policyRuleList_ = policyRuleList_;
+        } else {
+          result.policyRuleList_ = policyRuleListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.Policy.PolicyRuleList) {
+          return mergeFrom((policy.Policy.PolicyRuleList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.Policy.PolicyRuleList other) {
+        if (other == policy.Policy.PolicyRuleList.getDefaultInstance()) return this;
+        if (policyRuleListBuilder_ == null) {
+          if (!other.policyRuleList_.isEmpty()) {
+            if (policyRuleList_.isEmpty()) {
+              policyRuleList_ = other.policyRuleList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePolicyRuleListIsMutable();
+              policyRuleList_.addAll(other.policyRuleList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.policyRuleList_.isEmpty()) {
+            if (policyRuleListBuilder_.isEmpty()) {
+              policyRuleListBuilder_.dispose();
+              policyRuleListBuilder_ = null;
+              policyRuleList_ = other.policyRuleList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              policyRuleListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPolicyRuleListFieldBuilder() : null;
+            } else {
+              policyRuleListBuilder_.addAllMessages(other.policyRuleList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.Policy.PolicyRuleList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.Policy.PolicyRuleList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<policy.Policy.PolicyRule> policyRuleList_ =
+        java.util.Collections.emptyList();
+      private void ensurePolicyRuleListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          policyRuleList_ = new java.util.ArrayList<policy.Policy.PolicyRule>(policyRuleList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder> policyRuleListBuilder_;
+
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRule> getPolicyRuleListList() {
+        if (policyRuleListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(policyRuleList_);
+        } else {
+          return policyRuleListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public int getPolicyRuleListCount() {
+        if (policyRuleListBuilder_ == null) {
+          return policyRuleList_.size();
+        } else {
+          return policyRuleListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public policy.Policy.PolicyRule getPolicyRuleList(int index) {
+        if (policyRuleListBuilder_ == null) {
+          return policyRuleList_.get(index);
+        } else {
+          return policyRuleListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder setPolicyRuleList(
+          int index, policy.Policy.PolicyRule value) {
+        if (policyRuleListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.set(index, value);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder setPolicyRuleList(
+          int index, policy.Policy.PolicyRule.Builder builderForValue) {
+        if (policyRuleListBuilder_ == null) {
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          policyRuleListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder addPolicyRuleList(policy.Policy.PolicyRule value) {
+        if (policyRuleListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.add(value);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder addPolicyRuleList(
+          int index, policy.Policy.PolicyRule value) {
+        if (policyRuleListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.add(index, value);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder addPolicyRuleList(
+          policy.Policy.PolicyRule.Builder builderForValue) {
+        if (policyRuleListBuilder_ == null) {
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          policyRuleListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder addPolicyRuleList(
+          int index, policy.Policy.PolicyRule.Builder builderForValue) {
+        if (policyRuleListBuilder_ == null) {
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          policyRuleListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder addAllPolicyRuleList(
+          java.lang.Iterable<? extends policy.Policy.PolicyRule> values) {
+        if (policyRuleListBuilder_ == null) {
+          ensurePolicyRuleListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, policyRuleList_);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder clearPolicyRuleList() {
+        if (policyRuleListBuilder_ == null) {
+          policyRuleList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public Builder removePolicyRuleList(int index) {
+        if (policyRuleListBuilder_ == null) {
+          ensurePolicyRuleListIsMutable();
+          policyRuleList_.remove(index);
+          onChanged();
+        } else {
+          policyRuleListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public policy.Policy.PolicyRule.Builder getPolicyRuleListBuilder(
+          int index) {
+        return getPolicyRuleListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public policy.Policy.PolicyRuleOrBuilder getPolicyRuleListOrBuilder(
+          int index) {
+        if (policyRuleListBuilder_ == null) {
+          return policyRuleList_.get(index);  } else {
+          return policyRuleListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
+           getPolicyRuleListOrBuilderList() {
+        if (policyRuleListBuilder_ != null) {
+          return policyRuleListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(policyRuleList_);
+        }
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public policy.Policy.PolicyRule.Builder addPolicyRuleListBuilder() {
+        return getPolicyRuleListFieldBuilder().addBuilder(
+            policy.Policy.PolicyRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public policy.Policy.PolicyRule.Builder addPolicyRuleListBuilder(
+          int index) {
+        return getPolicyRuleListFieldBuilder().addBuilder(
+            index, policy.Policy.PolicyRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .policy.PolicyRule policyRuleList = 1;</code>
+       */
+      public java.util.List<policy.Policy.PolicyRule.Builder> 
+           getPolicyRuleListBuilderList() {
+        return getPolicyRuleListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder> 
+          getPolicyRuleListFieldBuilder() {
+        if (policyRuleListBuilder_ == null) {
+          policyRuleListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder>(
+                  policyRuleList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          policyRuleList_ = null;
+        }
+        return policyRuleListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleList)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleList)
+    private static final policy.Policy.PolicyRuleList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleList();
+    }
+
+    public static policy.Policy.PolicyRuleList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleList>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleList>() {
+      @java.lang.Override
+      public PolicyRuleList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.Policy.PolicyRuleList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleVariable_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleVariable_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleValue_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleValue_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleCondition_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleCondition_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleAction_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRule_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleList_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\014policy.proto\022\006policy\032\rcontext.proto\"+\n" +
+      "\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.context.Uu" +
+      "id\"b\n\017PolicyRuleState\022#\n\014policyRuleId\030\001 " +
+      "\001(\0132\r.context.Uuid\022*\n\017policyRuleState\030\002 " +
+      "\001(\0162\021.policy.RuleState\"0\n\022PolicyRuleVari" +
+      "able\022\032\n\022policyRuleVariable\030\001 \001(\t\"*\n\017Poli" +
+      "cyRuleValue\022\027\n\017policyRuleValue\030\001 \001(\t\"0\n\017" +
+      "PolicyRuleEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
+      ".Event\"\204\001\n\023PolicyRuleCondition\0227\n\023polRul" +
+      "eConditionVar\030\001 \001(\0132\032.policy.PolicyRuleV" +
+      "ariable\0224\n\023polRuleConditionVal\030\002 \001(\0132\027.p" +
+      "olicy.PolicyRuleValue\"{\n\020PolicyRuleActio" +
+      "n\0224\n\020polRuleActionVar\030\001 \001(\0132\032.policy.Pol" +
+      "icyRuleVariable\0221\n\020polRuleActionVal\030\002 \001(" +
+      "\0132\027.policy.PolicyRuleValue\"\354\002\n\nPolicyRul" +
+      "e\022*\n\014policyRuleId\030\001 \001(\0132\024.policy.PolicyR" +
+      "uleId\022.\n\016policyRuleType\030\002 \001(\0162\026.policy.P" +
+      "olicyRuleType\022\032\n\022PolicyRulePriority\030\003 \001(" +
+      "\r\022&\n\005event\030\004 \001(\0132\027.policy.PolicyRuleEven" +
+      "t\0229\n\024polRuleConditionList\030\005 \003(\0132\033.policy" +
+      ".PolicyRuleCondition\0223\n\021polRuleActionLis" +
+      "t\030\006 \003(\0132\030.policy.PolicyRuleAction\022\'\n\013ser" +
+      "viceList\030\007 \003(\0132\022.context.ServiceId\022%\n\nde" +
+      "viceList\030\010 \003(\0132\021.context.DeviceId\"<\n\016Pol" +
+      "icyRuleList\022*\n\016policyRuleList\030\001 \003(\0132\022.po" +
+      "licy.PolicyRule*G\n\tRuleState\022\023\n\017POLICY_I" +
+      "NACTIVE\020\000\022\022\n\016POLICY_PLANNED\020\001\022\021\n\rPOLICY_" +
+      "ACTIVE\020\002*?\n\016PolicyRuleType\022\025\n\021POLICYTYPE" +
+      "_DEVICE\020\000\022\026\n\022POLICYTYPE_NETWORK\020\0012\214\003\n\rPo" +
+      "licyService\022:\n\tPolicyAdd\022\022.policy.Policy" +
+      "Rule\032\027.policy.PolicyRuleState\"\000\022=\n\014Polic" +
+      "yUpdate\022\022.policy.PolicyRule\032\027.policy.Pol" +
+      "icyRuleState\"\000\022=\n\014PolicyDelete\022\022.policy." +
+      "PolicyRule\032\027.policy.PolicyRuleState\"\000\0227\n" +
+      "\tGetPolicy\022\024.policy.PolicyRuleId\032\022.polic" +
+      "y.PolicyRule\"\000\022B\n\023GetPolicyByDeviceId\022\021." +
+      "context.DeviceId\032\026.policy.PolicyRuleList" +
+      "\"\000\022D\n\024GetPolicyByServiceId\022\022.context.Ser" +
+      "viceId\032\026.policy.PolicyRuleList\"\000b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+        });
+    internal_static_policy_PolicyRuleId_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_policy_PolicyRuleId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleId_descriptor,
+        new java.lang.String[] { "Uuid", });
+    internal_static_policy_PolicyRuleState_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_policy_PolicyRuleState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleState_descriptor,
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", });
+    internal_static_policy_PolicyRuleVariable_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_policy_PolicyRuleVariable_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleVariable_descriptor,
+        new java.lang.String[] { "PolicyRuleVariable", });
+    internal_static_policy_PolicyRuleValue_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_policy_PolicyRuleValue_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleValue_descriptor,
+        new java.lang.String[] { "PolicyRuleValue", });
+    internal_static_policy_PolicyRuleEvent_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_policy_PolicyRuleEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleEvent_descriptor,
+        new java.lang.String[] { "Event", });
+    internal_static_policy_PolicyRuleCondition_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_policy_PolicyRuleCondition_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleCondition_descriptor,
+        new java.lang.String[] { "PolRuleConditionVar", "PolRuleConditionVal", });
+    internal_static_policy_PolicyRuleAction_descriptor =
+      getDescriptor().getMessageTypes().get(6);
+    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleAction_descriptor,
+        new java.lang.String[] { "PolRuleActionVar", "PolRuleActionVal", });
+    internal_static_policy_PolicyRule_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_policy_PolicyRule_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRule_descriptor,
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleType", "PolicyRulePriority", "Event", "PolRuleConditionList", "PolRuleActionList", "ServiceList", "DeviceList", });
+    internal_static_policy_PolicyRuleList_descriptor =
+      getDescriptor().getMessageTypes().get(8);
+    internal_static_policy_PolicyRuleList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleList_descriptor,
+        new java.lang.String[] { "PolicyRuleList", });
+    context.ContextOuterClass.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyService.java b/src/policy/target/generated-sources/grpc/policy/PolicyService.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c2e637f5dcf6b5783dd68900a03a72e58cc6206
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyService.java
@@ -0,0 +1,26 @@
+package policy;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: policy.proto")
+public interface PolicyService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyAdd(policy.Policy.PolicyRule request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyUpdate(policy.Policy.PolicyRule request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyDelete(policy.Policy.PolicyRule request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRule> getPolicy(policy.Policy.PolicyRuleId request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByDeviceId(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByServiceId(context.ContextOuterClass.ServiceId request);
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyServiceBean.java b/src/policy/target/generated-sources/grpc/policy/PolicyServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..08c0e47d9fbf9b232553fd4ce1a9c7e948f42519
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyServiceBean.java
@@ -0,0 +1,67 @@
+package policy;
+
+import io.grpc.BindableService;
+import io.quarkus.grpc.GrpcService;
+import io.quarkus.grpc.runtime.MutinyBean;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: policy.proto")
+public class PolicyServiceBean extends MutinyPolicyServiceGrpc.PolicyServiceImplBase implements BindableService, MutinyBean {
+
+    private final PolicyService delegate;
+
+    PolicyServiceBean(@GrpcService PolicyService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyAdd(policy.Policy.PolicyRule request) {
+       try {
+         return delegate.policyAdd(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyUpdate(policy.Policy.PolicyRule request) {
+       try {
+         return delegate.policyUpdate(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyDelete(policy.Policy.PolicyRule request) {
+       try {
+         return delegate.policyDelete(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRule> getPolicy(policy.Policy.PolicyRuleId request) {
+       try {
+         return delegate.getPolicy(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByDeviceId(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.getPolicyByDeviceId(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByServiceId(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.getPolicyByServiceId(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyServiceClient.java b/src/policy/target/generated-sources/grpc/policy/PolicyServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d447719767146f965aa0f82c72c684d2c0a37bb
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyServiceClient.java
@@ -0,0 +1,48 @@
+package policy;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: policy.proto")
+public class PolicyServiceClient implements PolicyService, MutinyClient<MutinyPolicyServiceGrpc.MutinyPolicyServiceStub> {
+
+    private final MutinyPolicyServiceGrpc.MutinyPolicyServiceStub stub;
+
+    public PolicyServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyPolicyServiceGrpc.MutinyPolicyServiceStub, MutinyPolicyServiceGrpc.MutinyPolicyServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyPolicyServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyPolicyServiceGrpc.MutinyPolicyServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyAdd(policy.Policy.PolicyRule request) {
+       return stub.policyAdd(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyUpdate(policy.Policy.PolicyRule request) {
+       return stub.policyUpdate(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleState> policyDelete(policy.Policy.PolicyRule request) {
+       return stub.policyDelete(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRule> getPolicy(policy.Policy.PolicyRuleId request) {
+       return stub.getPolicy(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByDeviceId(context.ContextOuterClass.DeviceId request) {
+       return stub.getPolicyByDeviceId(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> getPolicyByServiceId(context.ContextOuterClass.ServiceId request) {
+       return stub.getPolicyByServiceId(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/policy/PolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..76cba32684b0d766bfc9ed58dc6f93cd239d4431
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyServiceGrpc.java
@@ -0,0 +1,645 @@
+package policy;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: policy.proto")
+public final class PolicyServiceGrpc {
+
+  private PolicyServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "policy.PolicyService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyAddMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "PolicyAdd",
+      requestType = policy.Policy.PolicyRule.class,
+      responseType = policy.Policy.PolicyRuleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyAddMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState> getPolicyAddMethod;
+    if ((getPolicyAddMethod = PolicyServiceGrpc.getPolicyAddMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getPolicyAddMethod = PolicyServiceGrpc.getPolicyAddMethod) == null) {
+          PolicyServiceGrpc.getPolicyAddMethod = getPolicyAddMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "PolicyAdd"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRule.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleState.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("PolicyAdd"))
+              .build();
+        }
+      }
+    }
+    return getPolicyAddMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyUpdateMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "PolicyUpdate",
+      requestType = policy.Policy.PolicyRule.class,
+      responseType = policy.Policy.PolicyRuleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyUpdateMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState> getPolicyUpdateMethod;
+    if ((getPolicyUpdateMethod = PolicyServiceGrpc.getPolicyUpdateMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getPolicyUpdateMethod = PolicyServiceGrpc.getPolicyUpdateMethod) == null) {
+          PolicyServiceGrpc.getPolicyUpdateMethod = getPolicyUpdateMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "PolicyUpdate"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRule.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleState.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("PolicyUpdate"))
+              .build();
+        }
+      }
+    }
+    return getPolicyUpdateMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyDeleteMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "PolicyDelete",
+      requestType = policy.Policy.PolicyRule.class,
+      responseType = policy.Policy.PolicyRuleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRule,
+      policy.Policy.PolicyRuleState> getPolicyDeleteMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState> getPolicyDeleteMethod;
+    if ((getPolicyDeleteMethod = PolicyServiceGrpc.getPolicyDeleteMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getPolicyDeleteMethod = PolicyServiceGrpc.getPolicyDeleteMethod) == null) {
+          PolicyServiceGrpc.getPolicyDeleteMethod = getPolicyDeleteMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRule, policy.Policy.PolicyRuleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "PolicyDelete"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRule.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleState.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("PolicyDelete"))
+              .build();
+        }
+      }
+    }
+    return getPolicyDeleteMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRule> getGetPolicyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetPolicy",
+      requestType = policy.Policy.PolicyRuleId.class,
+      responseType = policy.Policy.PolicyRule.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRule> getGetPolicyMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId, policy.Policy.PolicyRule> getGetPolicyMethod;
+    if ((getGetPolicyMethod = PolicyServiceGrpc.getGetPolicyMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getGetPolicyMethod = PolicyServiceGrpc.getGetPolicyMethod) == null) {
+          PolicyServiceGrpc.getGetPolicyMethod = getGetPolicyMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleId, policy.Policy.PolicyRule>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicy"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRule.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("GetPolicy"))
+              .build();
+        }
+      }
+    }
+    return getGetPolicyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      policy.Policy.PolicyRuleList> getGetPolicyByDeviceIdMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetPolicyByDeviceId",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = policy.Policy.PolicyRuleList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      policy.Policy.PolicyRuleList> getGetPolicyByDeviceIdMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, policy.Policy.PolicyRuleList> getGetPolicyByDeviceIdMethod;
+    if ((getGetPolicyByDeviceIdMethod = PolicyServiceGrpc.getGetPolicyByDeviceIdMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getGetPolicyByDeviceIdMethod = PolicyServiceGrpc.getGetPolicyByDeviceIdMethod) == null) {
+          PolicyServiceGrpc.getGetPolicyByDeviceIdMethod = getGetPolicyByDeviceIdMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, policy.Policy.PolicyRuleList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicyByDeviceId"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleList.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("GetPolicyByDeviceId"))
+              .build();
+        }
+      }
+    }
+    return getGetPolicyByDeviceIdMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      policy.Policy.PolicyRuleList> getGetPolicyByServiceIdMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetPolicyByServiceId",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = policy.Policy.PolicyRuleList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      policy.Policy.PolicyRuleList> getGetPolicyByServiceIdMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, policy.Policy.PolicyRuleList> getGetPolicyByServiceIdMethod;
+    if ((getGetPolicyByServiceIdMethod = PolicyServiceGrpc.getGetPolicyByServiceIdMethod) == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        if ((getGetPolicyByServiceIdMethod = PolicyServiceGrpc.getGetPolicyByServiceIdMethod) == null) {
+          PolicyServiceGrpc.getGetPolicyByServiceIdMethod = getGetPolicyByServiceIdMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, policy.Policy.PolicyRuleList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicyByServiceId"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleList.getDefaultInstance()))
+              .setSchemaDescriptor(new PolicyServiceMethodDescriptorSupplier("GetPolicyByServiceId"))
+              .build();
+        }
+      }
+    }
+    return getGetPolicyByServiceIdMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static PolicyServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<PolicyServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<PolicyServiceStub>() {
+        @java.lang.Override
+        public PolicyServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new PolicyServiceStub(channel, callOptions);
+        }
+      };
+    return PolicyServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static PolicyServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<PolicyServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<PolicyServiceBlockingStub>() {
+        @java.lang.Override
+        public PolicyServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new PolicyServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return PolicyServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static PolicyServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<PolicyServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<PolicyServiceFutureStub>() {
+        @java.lang.Override
+        public PolicyServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new PolicyServiceFutureStub(channel, callOptions);
+        }
+      };
+    return PolicyServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class PolicyServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void policyAdd(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPolicyAddMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void policyUpdate(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPolicyUpdateMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void policyDelete(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPolicyDeleteMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicy(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRule> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyByDeviceIdMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyByServiceId(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyByServiceIdMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getPolicyAddMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRule,
+                policy.Policy.PolicyRuleState>(
+                  this, METHODID_POLICY_ADD)))
+          .addMethod(
+            getPolicyUpdateMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRule,
+                policy.Policy.PolicyRuleState>(
+                  this, METHODID_POLICY_UPDATE)))
+          .addMethod(
+            getPolicyDeleteMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRule,
+                policy.Policy.PolicyRuleState>(
+                  this, METHODID_POLICY_DELETE)))
+          .addMethod(
+            getGetPolicyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleId,
+                policy.Policy.PolicyRule>(
+                  this, METHODID_GET_POLICY)))
+          .addMethod(
+            getGetPolicyByDeviceIdMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                policy.Policy.PolicyRuleList>(
+                  this, METHODID_GET_POLICY_BY_DEVICE_ID)))
+          .addMethod(
+            getGetPolicyByServiceIdMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                policy.Policy.PolicyRuleList>(
+                  this, METHODID_GET_POLICY_BY_SERVICE_ID)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class PolicyServiceStub extends io.grpc.stub.AbstractAsyncStub<PolicyServiceStub> {
+    private PolicyServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected PolicyServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new PolicyServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void policyAdd(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getPolicyAddMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void policyUpdate(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getPolicyUpdateMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void policyDelete(policy.Policy.PolicyRule request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getPolicyDeleteMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicy(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRule> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetPolicyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetPolicyByDeviceIdMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyByServiceId(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetPolicyByServiceIdMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class PolicyServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<PolicyServiceBlockingStub> {
+    private PolicyServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected PolicyServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new PolicyServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleState policyAdd(policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getPolicyAddMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleState policyUpdate(policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getPolicyUpdateMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleState policyDelete(policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getPolicyDeleteMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRule getPolicy(policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetPolicyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleList getPolicyByDeviceId(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetPolicyByDeviceIdMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleList getPolicyByServiceId(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetPolicyByServiceIdMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class PolicyServiceFutureStub extends io.grpc.stub.AbstractFutureStub<PolicyServiceFutureStub> {
+    private PolicyServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected PolicyServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new PolicyServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleState> policyAdd(
+        policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getPolicyAddMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleState> policyUpdate(
+        policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getPolicyUpdateMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleState> policyDelete(
+        policy.Policy.PolicyRule request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getPolicyDeleteMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRule> getPolicy(
+        policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetPolicyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleList> getPolicyByDeviceId(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetPolicyByDeviceIdMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleList> getPolicyByServiceId(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetPolicyByServiceIdMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_POLICY_ADD = 0;
+  private static final int METHODID_POLICY_UPDATE = 1;
+  private static final int METHODID_POLICY_DELETE = 2;
+  private static final int METHODID_GET_POLICY = 3;
+  private static final int METHODID_GET_POLICY_BY_DEVICE_ID = 4;
+  private static final int METHODID_GET_POLICY_BY_SERVICE_ID = 5;
+
+  private static final class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final PolicyServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(PolicyServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_POLICY_ADD:
+          serviceImpl.policyAdd((policy.Policy.PolicyRule) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver);
+          break;
+        case METHODID_POLICY_UPDATE:
+          serviceImpl.policyUpdate((policy.Policy.PolicyRule) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver);
+          break;
+        case METHODID_POLICY_DELETE:
+          serviceImpl.policyDelete((policy.Policy.PolicyRule) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleState>) responseObserver);
+          break;
+        case METHODID_GET_POLICY:
+          serviceImpl.getPolicy((policy.Policy.PolicyRuleId) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRule>) responseObserver);
+          break;
+        case METHODID_GET_POLICY_BY_DEVICE_ID:
+          serviceImpl.getPolicyByDeviceId((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver);
+          break;
+        case METHODID_GET_POLICY_BY_SERVICE_ID:
+          serviceImpl.getPolicyByServiceId((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private static abstract class PolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    PolicyServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return policy.Policy.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("PolicyService");
+    }
+  }
+
+  private static final class PolicyServiceFileDescriptorSupplier
+      extends PolicyServiceBaseDescriptorSupplier {
+    PolicyServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class PolicyServiceMethodDescriptorSupplier
+      extends PolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    PolicyServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (PolicyServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new PolicyServiceFileDescriptorSupplier())
+              .addMethod(getPolicyAddMethod())
+              .addMethod(getPolicyUpdateMethod())
+              .addMethod(getPolicyDeleteMethod())
+              .addMethod(getGetPolicyMethod())
+              .addMethod(getGetPolicyByDeviceIdMethod())
+              .addMethod(getGetPolicyByServiceIdMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b82855281d2afc44e0a8f9e02637c09c0ab95d7c
--- /dev/null
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -0,0 +1,88 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
+    app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+  labels:
+    app.kubernetes.io/name: policyservice
+    app.kubernetes.io/version: 0.0.1
+    app: policyservice
+  name: policyservice
+spec:
+  ports:
+    - name: grpc-server
+      port: 9999
+      targetPort: 9999
+    - name: http
+      port: 8080
+      targetPort: 8080
+  selector:
+    app.kubernetes.io/name: policyservice
+    app.kubernetes.io/version: 0.0.1
+  type: NodePort
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
+    app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+  labels:
+    app: policyservice
+    app.kubernetes.io/version: 0.0.1
+    app.kubernetes.io/name: policyservice
+  name: policyservice
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app.kubernetes.io/version: 0.0.1
+      app.kubernetes.io/name: policyservice
+  template:
+    metadata:
+      annotations:
+        app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
+        app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+      labels:
+        app: policyservice
+        app.kubernetes.io/version: 0.0.1
+        app.kubernetes.io/name: policyservice
+    spec:
+      containers:
+        - env:
+            - name: KUBERNETES_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+          image: registry.gitlab.com/teraflow-h2020/controller/policy:0.0.1
+          imagePullPolicy: Always
+          livenessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/live
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 5
+            periodSeconds: 45
+            successThreshold: 1
+            timeoutSeconds: 10
+          name: policyservice
+          ports:
+            - containerPort: 9999
+              name: grpc-server
+              protocol: TCP
+            - containerPort: 8080
+              name: http
+              protocol: TCP
+          readinessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/ready
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 5
+            periodSeconds: 45
+            successThreshold: 1
+            timeoutSeconds: 10